ZGlmZiAtLWdpdCBhL2NvcmUvZnBkZmFwaS9lZGl0L2NwZGZfcGFnZWNvbnRlbnRnZW5lcmF0b3IuY3BwIGIvY29yZS9mcGRmYXBpL2VkaXQvY3BkZl9wYWdlY29udGVudGdlbmVyYXRvci5jcHAKaW5kZXggMTk5OTRmYS4uYmE4ZDAzZCAxMDA2NDQKLS0tIGEvY29yZS9mcGRmYXBpL2VkaXQvY3BkZl9wYWdlY29udGVudGdlbmVyYXRvci5jcHAKKysrIGIvY29yZS9mcGRmYXBpL2VkaXQvY3BkZl9wYWdlY29udGVudGdlbmVyYXRvci5jcHAKQEAgLTYsNiArNiw5IEBACiAKICNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvZWRpdC9jcGRmX3BhZ2Vjb250ZW50Z2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDx0dXBsZT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCkBAIC03MywzNSArNzYsNjkgQEAKIAogc3RkOjptYXA8aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6b3N0cmluZ3N0cmVhbT4+CiBDUERGX1BhZ2VDb250ZW50R2VuZXJhdG9yOjpHZW5lcmF0ZU1vZGlmaWVkU3RyZWFtcygpIHsKLSAgYXV0byBidWYgPSBwZGZpdW06Ok1ha2VVbmlxdWU8c3RkOjpvc3RyaW5nc3RyZWFtPigpOworICAvLyBNYWtlIHN1cmUgZGVmYXVsdCBncmFwaGljcyBhcmUgY3JlYXRlZC4KKyAgKHZvaWQpR2V0T3JDcmVhdGVEZWZhdWx0R3JhcGhpY3MoKTsKIAorICAvLyBGaWd1cmUgb3V0IHdoaWNoIHN0cmVhbXMgYXJlIGRpcnR5LgorICBzdGQ6OnNldDxpbnQzMl90PiBhbGxfZGlydHlfc3RyZWFtczsKKyAgZm9yIChhdXRvJiBwUGFnZU9iaiA6IG1fcGFnZU9iamVjdHMpIHsKKyAgICBpZiAocFBhZ2VPYmotPklzRGlydHkoKSkKKyAgICAgIGFsbF9kaXJ0eV9zdHJlYW1zLmluc2VydChwUGFnZU9iai0+R2V0Q29udGVudFN0cmVhbSgpKTsKKyAgfQorICBjb25zdCBzdGQ6OnNldDxpbnQzMl90PiogbWFya2VkX2RpcnR5X3N0cmVhbXMgPQorICAgICAgbV9wT2JqSG9sZGVyLT5HZXREaXJ0eVN0cmVhbXMoKTsKKyAgYWxsX2RpcnR5X3N0cmVhbXMuaW5zZXJ0KG1hcmtlZF9kaXJ0eV9zdHJlYW1zLT5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VkX2RpcnR5X3N0cmVhbXMtPmVuZCgpKTsKKworICAvLyBTdGFydCByZWdlbmVyYXRpbmcgZGlydHkgc3RyZWFtcy4KICAgc3RkOjptYXA8aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6b3N0cmluZ3N0cmVhbT4+IHN0cmVhbXM7Ci0gIGlmIChHZW5lcmF0ZVN0cmVhbVdpdGhOZXdPYmplY3RzKGJ1Zi5nZXQoKSkpCi0gICAgc3RyZWFtc1tDUERGX1BhZ2VPYmplY3Q6OmtOb0NvbnRlbnRTdHJlYW1dID0gc3RkOjptb3ZlKGJ1Zik7CisgIHN0ZDo6bWFwPGludDMyX3QsIGJvb2w+IHN0cmVhbV9pc19lbXB0eTsKIAotICAvLyBUT0RPKHBkZml1bToxMDUxKTogR2VuZXJhdGUgb3RoZXIgc3RyZWFtcyBhbmQgYWRkIHRvIHxzdHJlYW1zfC4KKyAgZm9yIChpbnQzMl90IGRpcnR5X3N0cmVhbSA6IGFsbF9kaXJ0eV9zdHJlYW1zKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6b3N0cmluZ3N0cmVhbT4gYnVmID0KKyAgICAgICAgcGRmaXVtOjpNYWtlVW5pcXVlPHN0ZDo6b3N0cmluZ3N0cmVhbT4oKTsKKworICAgIC8vIFNldCB0aGUgZGVmYXVsdCBncmFwaGljIHN0YXRlIHZhbHVlcworICAgICpidWYgPDwgInFcbiI7CisgICAgaWYgKCFtX3BPYmpIb2xkZXItPkdldExhc3RDVE0oKS5Jc0lkZW50aXR5KCkpCisgICAgICAqYnVmIDw8IG1fcE9iakhvbGRlci0+R2V0TGFzdENUTSgpLkdldEludmVyc2UoKSA8PCAiIGNtXG4iOworCisgICAgUHJvY2Vzc0RlZmF1bHRHcmFwaGljcyhidWYuZ2V0KCkpOworCisgICAgc3RyZWFtc1tkaXJ0eV9zdHJlYW1dID0gc3RkOjptb3ZlKGJ1Zik7CisgICAgc3RyZWFtX2lzX2VtcHR5W2RpcnR5X3N0cmVhbV0gPSB0cnVlOworICB9CisKKyAgLy8gUHJvY2VzcyB0aGUgcGFnZSBvYmplY3RzLCB3cml0ZSBpbnRvIGVhY2ggZGlydHkgc3RyZWFtLgorICBmb3IgKGF1dG8mIHBQYWdlT2JqIDogbV9wYWdlT2JqZWN0cykgeworICAgIGludCBzdHJlYW1faW5kZXggPSBwUGFnZU9iai0+R2V0Q29udGVudFN0cmVhbSgpOworICAgIGF1dG8gaXQgPSBzdHJlYW1zLmZpbmQoc3RyZWFtX2luZGV4KTsKKyAgICBpZiAoaXQgPT0gc3RyZWFtcy5lbmQoKSkKKyAgICAgIGNvbnRpbnVlOworCisgICAgc3RkOjpvc3RyaW5nc3RyZWFtKiBidWYgPSBpdC0+c2Vjb25kLmdldCgpOworICAgIHN0cmVhbV9pc19lbXB0eVtzdHJlYW1faW5kZXhdID0gZmFsc2U7CisgICAgUHJvY2Vzc1BhZ2VPYmplY3QoYnVmLCBwUGFnZU9iai5HZXQoKSk7CisgIH0KKworICAvLyBGaW5pc2ggZGlydHkgc3RyZWFtcy4KKyAgZm9yIChpbnQzMl90IGRpcnR5X3N0cmVhbSA6IGFsbF9kaXJ0eV9zdHJlYW1zKSB7CisgICAgc3RkOjpvc3RyaW5nc3RyZWFtKiBidWYgPSBzdHJlYW1zW2RpcnR5X3N0cmVhbV0uZ2V0KCk7CisgICAgaWYgKHN0cmVhbV9pc19lbXB0eVtkaXJ0eV9zdHJlYW1dKSB7CisgICAgICAvLyBDbGVhciB0byBzaG93IHRoYXQgdGhpcyBzdHJlYW0gbmVlZHMgdG8gYmUgZGVsZXRlZC4KKyAgICAgIGJ1Zi0+c3RyKCIiKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gUmV0dXJuIGdyYXBoaWNzIHRvIG9yaWdpbmFsIHN0YXRlCisgICAgICAqYnVmIDw8ICJRXG4iOworICAgIH0KKyAgfQorCisgIC8vIENsZWFyIGRpcnR5IHN0cmVhbXMgaW4gbV9wT2JqSG9sZGVyCisgIG1fcE9iakhvbGRlci0+Q2xlYXJEaXJ0eVN0cmVhbXMoKTsKIAogICByZXR1cm4gc3RyZWFtczsKIH0KIAotYm9vbCBDUERGX1BhZ2VDb250ZW50R2VuZXJhdG9yOjpHZW5lcmF0ZVN0cmVhbVdpdGhOZXdPYmplY3RzKAotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSogYnVmKSB7Ci0gIC8vIFNldCB0aGUgZGVmYXVsdCBncmFwaGljIHN0YXRlIHZhbHVlcwotICAqYnVmIDw8ICJxXG4iOwotICBpZiAoIW1fcE9iakhvbGRlci0+R2V0TGFzdENUTSgpLklzSWRlbnRpdHkoKSkKLSAgICAqYnVmIDw8IG1fcE9iakhvbGRlci0+R2V0TGFzdENUTSgpLkdldEludmVyc2UoKSA8PCAiIGNtXG4iOwotICBQcm9jZXNzRGVmYXVsdEdyYXBoaWNzKGJ1Zik7Ci0KLSAgLy8gUHJvY2VzcyB0aGUgcGFnZSBvYmplY3RzCi0gIGlmICghUHJvY2Vzc1BhZ2VPYmplY3RzKGJ1ZikpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIC8vIFJldHVybiBncmFwaGljcyB0byBvcmlnaW5hbCBzdGF0ZQotICAqYnVmIDw8ICJRXG4iOwotCi0gIHJldHVybiB0cnVlOwotfQotCiB2b2lkIENQREZfUGFnZUNvbnRlbnRHZW5lcmF0b3I6OlVwZGF0ZUNvbnRlbnRTdHJlYW1zKAogICAgIHN0ZDo6bWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6Om9zdHJpbmdzdHJlYW0+PiogbmV3X3N0cmVhbV9kYXRhKSB7CiAgIC8vIElmIG5vIHN0cmVhbXMgd2VyZSByZWdlbmVyYXRlZCBvciByZW1vdmVkLCBub3RoaW5nIHRvIGRvIGhlcmUuCkBAIC0xMjQsNiArMTYxLDkgQEAKICAgICAgICAgcGFnZV9jb250ZW50X21hbmFnZXIuR2V0U3RyZWFtQnlJbmRleChzdHJlYW1faW5kZXgpOwogICAgIEFTU0VSVChvbGRfc3RyZWFtKTsKIAorICAgIC8vIFRPRE8ocGRmaXVtOjEwNTEpOiBSZW1vdmUgc3RyZWFtcyB0aGF0IGFyZSBub3cgZW1wdHkuIElmIGJ1ZiBpcyBlbXB0eSwKKyAgICAvLyByZW1vdmUgdGhpcyBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGRhdGEuCisKICAgICBvbGRfc3RyZWFtLT5TZXREYXRhKGJ1Zik7CiAgIH0KIH0KQEAgLTE2MiwyMSArMjAyLDI4IEBACiAgICAgICBjb250aW51ZTsKIAogICAgIGJEaXJ0eSA9IHRydWU7Ci0gICAgaWYgKENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iamVjdCA9IHBQYWdlT2JqLT5Bc0ltYWdlKCkpCi0gICAgICBQcm9jZXNzSW1hZ2UoYnVmLCBwSW1hZ2VPYmplY3QpOwotICAgIGVsc2UgaWYgKENQREZfUGF0aE9iamVjdCogcFBhdGhPYmogPSBwUGFnZU9iai0+QXNQYXRoKCkpCi0gICAgICBQcm9jZXNzUGF0aChidWYsIHBQYXRoT2JqKTsKLSAgICBlbHNlIGlmIChDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqID0gcFBhZ2VPYmotPkFzVGV4dCgpKQotICAgICAgUHJvY2Vzc1RleHQoYnVmLCBwVGV4dE9iaik7Ci0gICAgcFBhZ2VPYmotPlNldERpcnR5KGZhbHNlKTsKKyAgICBQcm9jZXNzUGFnZU9iamVjdChidWYsIHBQYWdlT2JqLkdldCgpKTsKICAgfQogICByZXR1cm4gYkRpcnR5OwogfQogCiB2b2lkIENQREZfUGFnZUNvbnRlbnRHZW5lcmF0b3I6OlVwZGF0ZVN0cmVhbWxlc3NQYWdlT2JqZWN0cygKICAgICBpbnQgbmV3X2NvbnRlbnRfc3RyZWFtX2luZGV4KSB7Ci0gIC8vIFRPRE8ocGRmaXVtOjEwNTEpOiBNYXJrIHBhZ2Ugb2JqZWN0cyB0aGF0IGRpZCBub3QgaGF2ZSBhIGNvbnRlbnQgc3RyZWFtCi0gIC8vIHdpdGggdGhlIG5ldyBjb250ZW50IHN0cmVhbSBpbmRleC4KKyAgZm9yIChhdXRvJiBwUGFnZU9iaiA6IG1fcGFnZU9iamVjdHMpIHsKKyAgICBpZiAocFBhZ2VPYmotPkdldENvbnRlbnRTdHJlYW0oKSA9PSBDUERGX1BhZ2VPYmplY3Q6OmtOb0NvbnRlbnRTdHJlYW0pCisgICAgICBwUGFnZU9iai0+U2V0Q29udGVudFN0cmVhbShuZXdfY29udGVudF9zdHJlYW1faW5kZXgpOworICB9Cit9CisKK3ZvaWQgQ1BERl9QYWdlQ29udGVudEdlbmVyYXRvcjo6UHJvY2Vzc1BhZ2VPYmplY3Qoc3RkOjpvc3RyaW5nc3RyZWFtKiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmopIHsKKyAgaWYgKENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iamVjdCA9IHBQYWdlT2JqLT5Bc0ltYWdlKCkpCisgICAgUHJvY2Vzc0ltYWdlKGJ1ZiwgcEltYWdlT2JqZWN0KTsKKyAgZWxzZSBpZiAoQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaiA9IHBQYWdlT2JqLT5Bc1BhdGgoKSkKKyAgICBQcm9jZXNzUGF0aChidWYsIHBQYXRoT2JqKTsKKyAgZWxzZSBpZiAoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaiA9IHBQYWdlT2JqLT5Bc1RleHQoKSkKKyAgICBQcm9jZXNzVGV4dChidWYsIHBUZXh0T2JqKTsKKyAgcFBhZ2VPYmotPlNldERpcnR5KGZhbHNlKTsKIH0KIAogdm9pZCBDUERGX1BhZ2VDb250ZW50R2VuZXJhdG9yOjpQcm9jZXNzSW1hZ2Uoc3RkOjpvc3RyaW5nc3RyZWFtKiBidWYsCmRpZmYgLS1naXQgYS9jb3JlL2ZwZGZhcGkvZWRpdC9jcGRmX3BhZ2Vjb250ZW50Z2VuZXJhdG9yLmggYi9jb3JlL2ZwZGZhcGkvZWRpdC9jcGRmX3BhZ2Vjb250ZW50Z2VuZXJhdG9yLmgKaW5kZXggMDRhZGYxYy4uMTNiODQzMSAxMDA2NDQKLS0tIGEvY29yZS9mcGRmYXBpL2VkaXQvY3BkZl9wYWdlY29udGVudGdlbmVyYXRvci5oCisrKyBiL2NvcmUvZnBkZmFwaS9lZGl0L2NwZGZfcGFnZWNvbnRlbnRnZW5lcmF0b3IuaApAQCAtMzUsNiArMzUsNyBAQAogIHByaXZhdGU6CiAgIGZyaWVuZCBjbGFzcyBDUERGX1BhZ2VDb250ZW50R2VuZXJhdG9yVGVzdDsKIAorICB2b2lkIFByb2Nlc3NQYWdlT2JqZWN0KHN0ZDo6b3N0cmluZ3N0cmVhbSogYnVmLCBDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqKTsKICAgdm9pZCBQcm9jZXNzUGF0aChzdGQ6Om9zdHJpbmdzdHJlYW0qIGJ1ZiwgQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaik7CiAgIHZvaWQgUHJvY2Vzc0ltYWdlKHN0ZDo6b3N0cmluZ3N0cmVhbSogYnVmLCBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2VPYmopOwogICB2b2lkIFByb2Nlc3NHcmFwaGljcyhzdGQ6Om9zdHJpbmdzdHJlYW0qIGJ1ZiwgQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaik7CkBAIC00OSw5ICs1MCw2IEBACiAgIHN0ZDo6bWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6Om9zdHJpbmdzdHJlYW0+PgogICBHZW5lcmF0ZU1vZGlmaWVkU3RyZWFtcygpOwogCi0gIC8vIEdlbmVyYXRlIG5ldyBzdHJlYW0gZGF0YSB3aXRoIGFsbCBkaXJ0eSBwYWdlIG9iamVjdHMuCi0gIGJvb2wgR2VuZXJhdGVTdHJlYW1XaXRoTmV3T2JqZWN0cyhzdGQ6Om9zdHJpbmdzdHJlYW0qIGJ1Zik7Ci0KICAgLy8gQWRkIGJ1ZmZlciBhcyBhIHN0cmVhbSBpbiBwYWdlJ3MgJ0NvbnRlbnRzJwogICB2b2lkIFVwZGF0ZUNvbnRlbnRTdHJlYW1zKAogICAgICAgc3RkOjptYXA8aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6b3N0cmluZ3N0cmVhbT4+KiBidWYpOwpkaWZmIC0tZ2l0IGEvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl9wYWdlb2JqZWN0LmggYi9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuaAppbmRleCAzOWU3NjI5Li4zZmMzNWFhIDEwMDY0NAotLS0gYS9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuaAorKysgYi9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuaApAQCAtNjUsMTAgKzY1LDE0IEBACiAgIC8vIEdldCB3aGF0IGNvbnRlbnQgc3RyZWFtIHRoZSBvYmplY3Qgd2FzIHBhcnNlZCBmcm9tIGluIGl0cyBwYWdlLiBUaGlzIG51bWJlcgogICAvLyBpcyB0aGUgaW5kZXggb2YgdGhlIGNvbnRlbnQgc3RyZWFtIGluIHRoZSAiQ29udGVudHMiIGFycmF5LCBvciAwIGlmIHRoZXJlCiAgIC8vIGlzIGEgc2luZ2xlIGNvbnRlbnQgc3RyZWFtLiBJZiB0aGUgb2JqZWN0IGlzIG5ld2x5IGNyZWF0ZWQsCi0gIC8vIGtOb0NvbnRlbnRTdHJlYW0gaXMgcmV0dXJuZWQuCisgIC8vIHxrTm9Db250ZW50U3RyZWFtfCBpcyByZXR1cm5lZC4KKyAgLy8KICAgLy8gSWYgdGhlIG9iamVjdCBpcyBzcHJlYWQgYW1vbmcgbW9yZSB0aGFuIG9uZSBjb250ZW50IHN0cmVhbSwgdGhpcyBpcyB0aGUKICAgLy8gaW5kZXggb2YgdGhlIGxhc3Qgc3RyZWFtLgogICBpbnQzMl90IEdldENvbnRlbnRTdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX0NvbnRlbnRTdHJlYW07IH0KKyAgdm9pZCBTZXRDb250ZW50U3RyZWFtKGludDMyX3QgbmV3X2NvbnRlbnRfc3RyZWFtKSB7CisgICAgbV9Db250ZW50U3RyZWFtID0gbmV3X2NvbnRlbnRfc3RyZWFtOworICB9CiAKICAgZmxvYXQgbV9MZWZ0OwogICBmbG9hdCBtX1JpZ2h0OwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX2VkaXRfZW1iZWRkZXJ0ZXN0LmNwcCBiL2ZwZGZzZGsvZnBkZl9lZGl0X2VtYmVkZGVydGVzdC5jcHAKaW5kZXggMGExMTliOS4uMDc4NzljNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX2VkaXRfZW1iZWRkZXJ0ZXN0LmNwcAorKysgYi9mcGRmc2RrL2ZwZGZfZWRpdF9lbWJlZGRlcnRlc3QuY3BwCkBAIC00MjgsOCArNDI4LDcgQEAKICAgVmVyaWZ5U2F2ZWREb2N1bWVudCg2MTIsIDc5Miwga0xhc3RNRDUpOwogfQogCi0vLyBGYWlscyBkdWUgdG8gcGRmaXVtOjEwNTEuCi1URVNUX0YoRlBERkVkaXRFbWJlZGRlcnRlc3QsIERJU0FCTEVEX1NldFRleHQpIHsKK1RFU1RfRihGUERGRWRpdEVtYmVkZGVydGVzdCwgU2V0VGV4dCkgewogICAvLyBMb2FkIGRvY3VtZW50IHdpdGggc29tZSB0ZXh0LgogICBFWFBFQ1RfVFJVRShPcGVuRG9jdW1lbnQoImhlbGxvX3dvcmxkLnBkZiIpKTsKICAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKQEAgLTYyNiw4ICs2MjUsNyBAQAogICBVbmxvYWRQYWdlKHBhZ2UpOwogfQogCi0vLyBGYWlscyBkdWUgdG8gcGRmaXVtOjEwNTEuCi1URVNUX0YoRlBERkVkaXRFbWJlZGRlcnRlc3QsIERJU0FCTEVEX1JlbW92ZUV4aXN0aW5nUGFnZU9iamVjdCkgeworVEVTVF9GKEZQREZFZGl0RW1iZWRkZXJ0ZXN0LCBSZW1vdmVFeGlzdGluZ1BhZ2VPYmplY3QpIHsKICAgLy8gTG9hZCBkb2N1bWVudCB3aXRoIHNvbWUgdGV4dC4KICAgRVhQRUNUX1RSVUUoT3BlbkRvY3VtZW50KCJoZWxsb193b3JsZC5wZGYiKSk7CiAgIEZQREZfUEFHRSBwYWdlID0gTG9hZFBhZ2UoMCk7CkBAIC02NTYsNiArNjU0LDEwMCBAQAogICBDbG9zZVNhdmVkRG9jdW1lbnQoKTsKIH0KIAorVEVTVF9GKEZQREZFZGl0RW1iZWRkZXJ0ZXN0LCBSZW1vdmVFeGlzdGluZ1BhZ2VPYmplY3RTcGxpdFN0cmVhbXNOb3RMb25lbHkpIHsKKyAgLy8gTG9hZCBkb2N1bWVudCB3aXRoIHNvbWUgdGV4dC4KKyAgRVhQRUNUX1RSVUUoT3BlbkRvY3VtZW50KCJoZWxsb193b3JsZF9zcGxpdF9zdHJlYW1zLnBkZiIpKTsKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgLy8gR2V0IHRoZSAiSGVsbG8sIHdvcmxkISIgdGV4dCBvYmplY3QgYW5kIHJlbW92ZSBpdC4gVGhlcmUgaXMgYW5vdGhlciBvYmplY3QKKyAgLy8gaW4gdGhlIHNhbWUgc3RyZWFtIHRoYXQgc2F5cyAiR29vZGJ5ZSwgd29ybGQhIgorICBBU1NFUlRfRVEoMywgRlBERlBhZ2VfQ291bnRPYmplY3RzKHBhZ2UpKTsKKyAgRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqZWN0ID0gRlBERlBhZ2VfR2V0T2JqZWN0KHBhZ2UsIDApOworICBBU1NFUlRfVFJVRShwYWdlX29iamVjdCk7CisgIEVYUEVDVF9UUlVFKEZQREZQYWdlX1JlbW92ZU9iamVjdChwYWdlLCBwYWdlX29iamVjdCkpOworCisgIC8vIFZlcmlmeSB0aGUgIkhlbGxvLCB3b3JsZCEiIHRleHQgaXMgZ29uZS4KKyAgQVNTRVJUX0VRKDIsIEZQREZQYWdlX0NvdW50T2JqZWN0cyhwYWdlKSk7CisjaWYgX0ZYX1BMQVRGT1JNXyA9PSBfRlhfUExBVEZPUk1fQVBQTEVfCisgIGNvbnN0IGNoYXIga0hlbGxvUmVtb3ZlZE1ENVtdID0gImUwN2E2MmQ0MTI3MjhmYzRkNmUzZmY0MmYyZGQwZTExIjsKKyNlbGlmIF9GWF9QTEFURk9STV8gPT0gX0ZYX1BMQVRGT1JNX1dJTkRPV1NfCisgIGNvbnN0IGNoYXIga0hlbGxvUmVtb3ZlZE1ENVtdID0gImRlMzdiMGJiN2ZmOTAzYzEwNjhiYWUzNjE4NDRiZTUwIjsKKyNlbHNlCisgIGNvbnN0IGNoYXIga0hlbGxvUmVtb3ZlZE1ENVtdID0gIjk1YjkyOTUwNjQ3YTIxOTBlMTIzMDkxMWU3YTFhMGU5IjsKKyNlbmRpZgorICB7CisgICAgU2NvcGVkRlBERkJpdG1hcCBwYWdlX2JpdG1hcCA9IFJlbmRlclBhZ2VXaXRoRmxhZ3MocGFnZSwgbnVsbHB0ciwgMCk7CisgICAgQ29tcGFyZUJpdG1hcChwYWdlX2JpdG1hcC5nZXQoKSwgMjAwLCAyMDAsIGtIZWxsb1JlbW92ZWRNRDUpOworICB9CisKKyAgLy8gU2F2ZSB0aGUgZmlsZQorICBFWFBFQ1RfVFJVRShGUERGUGFnZV9HZW5lcmF0ZUNvbnRlbnQocGFnZSkpOworICBFWFBFQ1RfVFJVRShGUERGX1NhdmVBc0NvcHkoZG9jdW1lbnQoKSwgdGhpcywgMCkpOworICBVbmxvYWRQYWdlKHBhZ2UpOworICBGUERGUGFnZU9ial9EZXN0cm95KHBhZ2Vfb2JqZWN0KTsKKworICAvLyBSZS1vcGVuIHRoZSBmaWxlIGFuZCBjaGVjayB0aGUgcGFnZSBvYmplY3QgY291bnQgaXMgc3RpbGwgMi4KKyAgT3BlblNhdmVkRG9jdW1lbnQoKTsKKyAgRlBERl9QQUdFIHNhdmVkX3BhZ2UgPSBMb2FkU2F2ZWRQYWdlKDApOworCisgIEVYUEVDVF9FUSgyLCBGUERGUGFnZV9Db3VudE9iamVjdHMoc2F2ZWRfcGFnZSkpOworICB7CisgICAgU2NvcGVkRlBERkJpdG1hcCBwYWdlX2JpdG1hcCA9IFJlbmRlclBhZ2VXaXRoRmxhZ3Moc2F2ZWRfcGFnZSwgbnVsbHB0ciwgMCk7CisgICAgQ29tcGFyZUJpdG1hcChwYWdlX2JpdG1hcC5nZXQoKSwgMjAwLCAyMDAsIGtIZWxsb1JlbW92ZWRNRDUpOworICB9CisKKyAgQ2xvc2VTYXZlZFBhZ2Uoc2F2ZWRfcGFnZSk7CisgIENsb3NlU2F2ZWREb2N1bWVudCgpOworfQorCitURVNUX0YoRlBERkVkaXRFbWJlZGRlcnRlc3QsIFJlbW92ZUV4aXN0aW5nUGFnZU9iamVjdFNwbGl0U3RyZWFtc0xvbmVseSkgeworICAvLyBMb2FkIGRvY3VtZW50IHdpdGggc29tZSB0ZXh0LgorICBFWFBFQ1RfVFJVRShPcGVuRG9jdW1lbnQoImhlbGxvX3dvcmxkX3NwbGl0X3N0cmVhbXMucGRmIikpOworICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICBBU1NFUlRfVFJVRShwYWdlKTsKKworICAvLyBHZXQgdGhlICJHcmVldGluZ3MsIHdvcmxkISIgdGV4dCBvYmplY3QgYW5kIHJlbW92ZSBpdC4gVGhpcyBpcyB0aGUgb25seQorICAvLyBvYmplY3QgaW4gdGhlIHN0cmVhbS4KKyAgQVNTRVJUX0VRKDMsIEZQREZQYWdlX0NvdW50T2JqZWN0cyhwYWdlKSk7CisgIEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCA9IEZQREZQYWdlX0dldE9iamVjdChwYWdlLCAyKTsKKyAgQVNTRVJUX1RSVUUocGFnZV9vYmplY3QpOworICBFWFBFQ1RfVFJVRShGUERGUGFnZV9SZW1vdmVPYmplY3QocGFnZSwgcGFnZV9vYmplY3QpKTsKKworICAvLyBWZXJpZnkgdGhlICJHcmVldGluZ3MsIHdvcmxkISIgdGV4dCBpcyBnb25lLgorICBBU1NFUlRfRVEoMiwgRlBERlBhZ2VfQ291bnRPYmplY3RzKHBhZ2UpKTsKKyNpZiBfRlhfUExBVEZPUk1fID09IF9GWF9QTEFURk9STV9BUFBMRV8KKyAgY29uc3QgY2hhciBrR3JlZXRpbmdzUmVtb3ZlZE1ENVtdID0gImI5MDQ3NWNhNjRkMTM0OGMzYmY1ZTJiNzdhZDkxODdhIjsKKyNlbGlmIF9GWF9QTEFURk9STV8gPT0gX0ZYX1BMQVRGT1JNX1dJTkRPV1NfCisgIGNvbnN0IGNoYXIga0dyZWV0aW5nc1JlbW92ZWRNRDVbXSA9ICJlNWE2ZmEyODI5OGRiMDc0ODRjZDkyMmYzZTIxMGM4OCI7CisjZWxzZQorICBjb25zdCBjaGFyIGtHcmVldGluZ3NSZW1vdmVkTUQ1W10gPSAiMmJhYTRjMGUxNzU4ZGViYTFiOWM5MDhlMWZiZDA0ZWQiOworI2VuZGlmCisgIHsKKyAgICBTY29wZWRGUERGQml0bWFwIHBhZ2VfYml0bWFwID0gUmVuZGVyUGFnZVdpdGhGbGFncyhwYWdlLCBudWxscHRyLCAwKTsKKyAgICBDb21wYXJlQml0bWFwKHBhZ2VfYml0bWFwLmdldCgpLCAyMDAsIDIwMCwga0dyZWV0aW5nc1JlbW92ZWRNRDUpOworICB9CisKKyAgLy8gU2F2ZSB0aGUgZmlsZQorICBFWFBFQ1RfVFJVRShGUERGUGFnZV9HZW5lcmF0ZUNvbnRlbnQocGFnZSkpOworICBFWFBFQ1RfVFJVRShGUERGX1NhdmVBc0NvcHkoZG9jdW1lbnQoKSwgdGhpcywgMCkpOworICBVbmxvYWRQYWdlKHBhZ2UpOworICBGUERGUGFnZU9ial9EZXN0cm95KHBhZ2Vfb2JqZWN0KTsKKworICAvLyBSZS1vcGVuIHRoZSBmaWxlIGFuZCBjaGVjayB0aGUgcGFnZSBvYmplY3QgY291bnQgaXMgc3RpbGwgMi4KKyAgT3BlblNhdmVkRG9jdW1lbnQoKTsKKyAgRlBERl9QQUdFIHNhdmVkX3BhZ2UgPSBMb2FkU2F2ZWRQYWdlKDApOworCisgIEVYUEVDVF9FUSgyLCBGUERGUGFnZV9Db3VudE9iamVjdHMoc2F2ZWRfcGFnZSkpOworICB7CisgICAgU2NvcGVkRlBERkJpdG1hcCBwYWdlX2JpdG1hcCA9IFJlbmRlclBhZ2VXaXRoRmxhZ3Moc2F2ZWRfcGFnZSwgbnVsbHB0ciwgMCk7CisgICAgQ29tcGFyZUJpdG1hcChwYWdlX2JpdG1hcC5nZXQoKSwgMjAwLCAyMDAsIGtHcmVldGluZ3NSZW1vdmVkTUQ1KTsKKyAgfQorCisgIENsb3NlU2F2ZWRQYWdlKHNhdmVkX3BhZ2UpOworICBDbG9zZVNhdmVkRG9jdW1lbnQoKTsKK30KKwogLy8gVE9ETyhwZGZpdW06MTA1MSk6IEV4dGVuZCB0aGlzIHRlc3QgdG8gcmVtb3ZlIHNvbWUgZWxlbWVudHMgYW5kIHZlcmlmeQogLy8gc2F2aW5nIHdvcmtzLgogVEVTVF9GKEZQREZFZGl0RW1iZWRkZXJ0ZXN0LCBHZXRDb250ZW50U3RyZWFtKSB7CkBAIC03MTMsNiArODA1LDM5IEBACiAgIENsb3NlU2F2ZWREb2N1bWVudCgpOwogfQogCitURVNUX0YoRlBERkVkaXRFbWJlZGRlcnRlc3QsIEluc2VydFBhZ2VPYmplY3RFZGl0QW5kU2F2ZSkgeworICAvLyBMb2FkIGRvY3VtZW50IHdpdGggc29tZSB0ZXh0LgorICBFWFBFQ1RfVFJVRShPcGVuRG9jdW1lbnQoImhlbGxvX3dvcmxkLnBkZiIpKTsKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgLy8gQWRkIGEgcmVkIHJlY3RhbmdsZS4KKyAgQVNTRVJUX0VRKDIsIEZQREZQYWdlX0NvdW50T2JqZWN0cyhwYWdlKSk7CisgIEZQREZfUEFHRU9CSkVDVCByZWRfcmVjdCA9IEZQREZQYWdlT2JqX0NyZWF0ZU5ld1JlY3QoMjAsIDEwMCwgNTAsIDUwKTsKKyAgRVhQRUNUX1RSVUUoRlBERlBhdGhfU2V0RmlsbENvbG9yKHJlZF9yZWN0LCAyNTUsIDEwMCwgMTAwLCAyNTUpKTsKKyAgRVhQRUNUX1RSVUUoRlBERlBhdGhfU2V0RHJhd01vZGUocmVkX3JlY3QsIEZQREZfRklMTE1PREVfQUxURVJOQVRFLCAwKSk7CisgIEZQREZQYWdlX0luc2VydE9iamVjdChwYWdlLCByZWRfcmVjdCk7CisKKyAgLy8gVmVyaWZ5IHRoZSByZWQgcmVjdGFuZ2xlIHdhcyBhZGRlZC4KKyAgQVNTRVJUX0VRKDMsIEZQREZQYWdlX0NvdW50T2JqZWN0cyhwYWdlKSk7CisKKyAgLy8gR2VuZXJhdGUgY29udGVudCBidXQgY2hhbmdlIGl0IGFnYWluCisgIEVYUEVDVF9UUlVFKEZQREZQYWdlX0dlbmVyYXRlQ29udGVudChwYWdlKSk7CisgIEVYUEVDVF9UUlVFKEZQREZQYXRoX1NldEZpbGxDb2xvcihyZWRfcmVjdCwgMjU1LCAwLCAwLCAyNTUpKTsKKworICAvLyBTYXZlIHRoZSBmaWxlCisgIEVYUEVDVF9UUlVFKEZQREZQYWdlX0dlbmVyYXRlQ29udGVudChwYWdlKSk7CisgIEVYUEVDVF9UUlVFKEZQREZfU2F2ZUFzQ29weShkb2N1bWVudCgpLCB0aGlzLCAwKSk7CisgIFVubG9hZFBhZ2UocGFnZSk7CisKKyAgLy8gUmUtb3BlbiB0aGUgZmlsZSBhbmQgY2hlY2sgdGhlIHBhZ2Ugb2JqZWN0IGNvdW50IGlzIHN0aWxsIDMuCisgIE9wZW5TYXZlZERvY3VtZW50KCk7CisgIEZQREZfUEFHRSBzYXZlZF9wYWdlID0gTG9hZFNhdmVkUGFnZSgwKTsKKyAgRVhQRUNUX0VRKDMsIEZQREZQYWdlX0NvdW50T2JqZWN0cyhzYXZlZF9wYWdlKSk7CisgIENsb3NlU2F2ZWRQYWdlKHNhdmVkX3BhZ2UpOworICBDbG9zZVNhdmVkRG9jdW1lbnQoKTsKK30KKwogVEVTVF9GKEZQREZFZGl0RW1iZWRkZXJ0ZXN0LCBBZGRBbmRSZW1vdmVQYXRocykgewogICAvLyBTdGFydCB3aXRoIGEgYmxhbmsgcGFnZS4KICAgRlBERl9QQUdFIHBhZ2UgPSBGUERGUGFnZV9OZXcoQ3JlYXRlTmV3RG9jdW1lbnQoKSwgMCwgNjEyLCA3OTIpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvaGVsbG9fd29ybGRfc3BsaXRfc3RyZWFtcy5pbiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2hlbGxvX3dvcmxkX3NwbGl0X3N0cmVhbXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhMjkzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL2hlbGxvX3dvcmxkX3NwbGl0X3N0cmVhbXMuaW4KQEAgLTAsMCArMSw2MyBAQAore3toZWFkZXJ9fQore3tvYmplY3QgMSAwfX0gPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAyIDB9fSA8PAorICAvVHlwZSAvUGFnZXMKKyAgL01lZGlhQm94IFsgMCAwIDIwMCAyMDAgXQorICAvQ291bnQgMQorICAvS2lkcyBbIDMgMCBSIF0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDMgMH19IDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL1Jlc291cmNlcyA8PAorICAgIC9Gb250IDw8CisgICAgICAvRjEgNCAwIFIKKyAgICAgIC9GMiA1IDAgUgorICAgID4+CisgID4+CisgIC9Db250ZW50cyBbNiAwIFIgNyAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCA0IDB9fSA8PAorICAvVHlwZSAvRm9udAorICAvU3VidHlwZSAvVHlwZTEKKyAgL0Jhc2VGb250IC9UaW1lcy1Sb21hbgorPj4KK2VuZG9iagore3tvYmplY3QgNSAwfX0gPDwKKyAgL1R5cGUgL0ZvbnQKKyAgL1N1YnR5cGUgL1R5cGUxCisgIC9CYXNlRm9udCAvSGVsdmV0aWNhCis+PgorZW5kb2JqCit7e29iamVjdCA2IDB9fSA8PAorPj4KK3N0cmVhbQorQlQKKzIwIDUwIFRkCisvRjEgMTIgVGYKKyhIZWxsbywgd29ybGQhKSBUagorMCA1MCBUZAorL0YyIDE2IFRmCisoR29vZGJ5ZSwgd29ybGQhKSBUagorRVQKK2VuZHN0cmVhbQorZW5kb2JqCit7e29iamVjdCA3IDB9fSA8PAorPj4KK3N0cmVhbQorQlQKKzIwIDUwIFRkCisvRjEgMTIgVGYKKyhHcmVldGluZ3MsIHdvcmxkISkgVGoKK2VuZHN0cmVhbQorZW5kb2JqCit7e3hyZWZ9fQore3t0cmFpbGVyfX0KK3t7c3RhcnR4cmVmfX0KKyUlRU9GCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9oZWxsb193b3JsZF9zcGxpdF9zdHJlYW1zLnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2hlbGxvX3dvcmxkX3NwbGl0X3N0cmVhbXMucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWZjY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9oZWxsb193b3JsZF9zcGxpdF9zdHJlYW1zLnBkZgpAQCAtMCwwICsxLDc3IEBACislUERGLTEuNworJaDypPQKKzEgMCBvYmogPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvTWVkaWFCb3ggWyAwIDAgMjAwIDIwMCBdCisgIC9Db3VudCAxCisgIC9LaWRzIFsgMyAwIFIgXQorPj4KK2VuZG9iagorMyAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9SZXNvdXJjZXMgPDwKKyAgICAvRm9udCA8PAorICAgICAgL0YxIDQgMCBSCisgICAgICAvRjIgNSAwIFIKKyAgICA+PgorICA+PgorICAvQ29udGVudHMgWzYgMCBSIDcgMCBSXQorPj4KK2VuZG9iagorNCAwIG9iaiA8PAorICAvVHlwZSAvRm9udAorICAvU3VidHlwZSAvVHlwZTEKKyAgL0Jhc2VGb250IC9UaW1lcy1Sb21hbgorPj4KK2VuZG9iagorNSAwIG9iaiA8PAorICAvVHlwZSAvRm9udAorICAvU3VidHlwZSAvVHlwZTEKKyAgL0Jhc2VGb250IC9IZWx2ZXRpY2EKKz4+CitlbmRvYmoKKzYgMCBvYmogPDwKKz4+CitzdHJlYW0KK0JUCisyMCA1MCBUZAorL0YxIDEyIFRmCisoSGVsbG8sIHdvcmxkISkgVGoKKzAgNTAgVGQKKy9GMiAxNiBUZgorKEdvb2RieWUsIHdvcmxkISkgVGoKK0VUCitlbmRzdHJlYW0KK2VuZG9iagorNyAwIG9iaiA8PAorPj4KK3N0cmVhbQorQlQKKzIwIDUwIFRkCisvRjEgMTIgVGYKKyhHcmVldGluZ3MsIHdvcmxkISkgVGoKK2VuZHN0cmVhbQorZW5kb2JqCit4cmVmCiswIDgKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMTUgMDAwMDAgbiAKKzAwMDAwMDAwNjggMDAwMDAgbiAKKzAwMDAwMDAxNjEgMDAwMDAgbiAKKzAwMDAwMDAzMTEgMDAwMDAgbiAKKzAwMDAwMDAzODkgMDAwMDAgbiAKKzAwMDAwMDA0NjUgMDAwMDAgbiAKKzAwMDAwMDA1ODYgMDAwMDAgbiAKK3RyYWlsZXIgPDwKKyAgL1Jvb3QgMSAwIFIKKyAgL1NpemUgOAorPj4KK3N0YXJ0eHJlZgorNjY5CislJUVPRgo=