ZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgKaW5kZXggOTFiYWFmYS4uMGVhNDhiNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgKQEAgLTI4OCw2ICsyODgsOCBAQAogCiAgIHZvaWQgQ3JlYXRlKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3ApOwogICB2aXJ0dWFsIENGWF9CeXRlU3RyaW5nIEdldENsYXNzTmFtZSgpIGNvbnN0OworICB2b2lkIEludmFsaWRhdGVGb2N1c0hhbmRsZXIoSVBXTF9Gb2N1c0hhbmRsZXIqIGhhbmRsZXIpOworICB2b2lkIEludmFsaWRhdGVQcm92aWRlcihJUFdMX1Byb3ZpZGVyKiBwcm92aWRlcik7CiAgIHZvaWQgRGVzdHJveSgpOwogICB2b2lkIE1vdmUoY29uc3QgQ1BERl9SZWN0JiByY05ldywgRlhfQk9PTCBiUmVzZXQsIEZYX0JPT0wgYlJlZnJlc2gpOwogICB2aXJ0dWFsIHZvaWQgSW52YWxpZGF0ZVJlY3QoQ1BERl9SZWN0KiBwUmVjdCA9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfQ29tYm9Cb3guY3BwIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfQ29tYm9Cb3guY3BwCmluZGV4IDQ5ZDc2YmIuLjVlODhhNWQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmNwcAorKysgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Db21ib0JveC5jcHAKQEAgLTIxLDYgKzIxLDggQEAKIH0KIAogQ0ZGTF9Db21ib0JveDo6fkNGRkxfQ29tYm9Cb3goKSB7CisgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX01hcHMpCisgICAgaXQuc2Vjb25kLT5JbnZhbGlkYXRlRm9jdXNIYW5kbGVyKHRoaXMpOwogICBkZWxldGUgbV9wRm9udE1hcDsKIH0KIApkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5jcHAgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmNwcAppbmRleCAyZTczYjQ5Li5jZTczZjdkIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmNwcAorKysgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmNwcApAQCAtMjQsOSArMjQsMTAgQEAKIH0KIAogQ0ZGTF9Gb3JtRmlsbGVyOjp+Q0ZGTF9Gb3JtRmlsbGVyKCkgewotICBmb3IgKGF1dG8mIGl0IDogbV9NYXBzKSB7CisgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX01hcHMpIHsKICAgICBDUFdMX1duZCogcFduZCA9IGl0LnNlY29uZDsKICAgICBDRkZMX1ByaXZhdGVEYXRhKiBwRGF0YSA9IChDRkZMX1ByaXZhdGVEYXRhKilwV25kLT5HZXRBdHRhY2hlZERhdGEoKTsKKyAgICBwV25kLT5JbnZhbGlkYXRlUHJvdmlkZXIodGhpcyk7CiAgICAgcFduZC0+RGVzdHJveSgpOwogICAgIGRlbGV0ZSBwV25kOwogICAgIGRlbGV0ZSBwRGF0YTsKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1RleHRGaWVsZC5jcHAgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9UZXh0RmllbGQuY3BwCmluZGV4IDhkMzliODIuLmNhNGUwN2IgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1RleHRGaWVsZC5jcHAKKysrIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfVGV4dEZpZWxkLmNwcApAQCAtMTYsNiArMTYsOCBAQAogfQogCiBDRkZMX1RleHRGaWVsZDo6fkNGRkxfVGV4dEZpZWxkKCkgeworICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogbV9NYXBzKQorICAgIGl0LnNlY29uZC0+SW52YWxpZGF0ZUZvY3VzSGFuZGxlcih0aGlzKTsKICAgZGVsZXRlIG1fcEZvbnRNYXA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZ2aWV3X2VtYmVkZGVydGVzdC5jcHAgYi9mcGRmc2RrL3NyYy9mcGRmdmlld19lbWJlZGRlcnRlc3QuY3BwCmluZGV4IDBmNDY2NjguLjZlYjVmYjkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZwZGZ2aWV3X2VtYmVkZGVydGVzdC5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZnZpZXdfZW1iZWRkZXJ0ZXN0LmNwcApAQCAtMTk2LDEwICsxOTYsMTQgQEAKIH0KIAogVEVTVF9GKEZQREZWaWV3RW1iZWRkZXJ0ZXN0LCBDcmFzaGVyXzQ1NDY5NSkgewotICAvLyBEb2N1bWVudCBpcyBkYW1hbmdlZCBhbmQgY2FuJ3QgYmUgb3BlbmVkLgorICAvLyBEb2N1bWVudCBpcyBkYW1hZ2VkIGFuZCBjYW4ndCBiZSBvcGVuZWQuCiAgIEVYUEVDVF9GQUxTRShPcGVuRG9jdW1lbnQoImJ1Z180NTQ2OTUucGRmIikpOwogfQogCitURVNUX0YoRlBERlZpZXdFbWJlZGRlcnRlc3QsIENyYXNoZXJfNTcyODcxKSB7CisgIEVYUEVDVF9UUlVFKE9wZW5Eb2N1bWVudCgiYnVnXzU3Mjg3MS5wZGYiKSk7Cit9CisKIC8vIFRoZSBmb2xsb3dpbmcgdGVzdHMgcGFzcyBpZiB0aGUgZG9jdW1lbnQgb3BlbnMgd2l0aG91dCBpbmZpbml0ZSBsb29waW5nLgogVEVTVF9GKEZQREZWaWV3RW1iZWRkZXJ0ZXN0LCBIYW5nXzI5OCkgewogICBFWFBFQ1RfRkFMU0UoT3BlbkRvY3VtZW50KCJidWdfMjk4LnBkZiIpKTsKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfV25kLmNwcCBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfV25kLmNwcAppbmRleCA5YzRlMjE3Li41YmVkYWQxIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1duZC5jcHAKKysrIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9XbmQuY3BwCkBAIC0yMzcsNiArMjM3LDE2IEBACiAKIHZvaWQgQ1BXTF9XbmQ6Ok9uRGVzdHJveSgpIHt9CiAKK3ZvaWQgQ1BXTF9XbmQ6OkludmFsaWRhdGVGb2N1c0hhbmRsZXIoSVBXTF9Gb2N1c0hhbmRsZXIqIGhhbmRsZXIpIHsKKyAgaWYgKG1fc1ByaXZhdGVQYXJhbS5wRm9jdXNIYW5kbGVyID09IGhhbmRsZXIpCisgICAgbV9zUHJpdmF0ZVBhcmFtLnBGb2N1c0hhbmRsZXIgPSBudWxscHRyOworfQorCit2b2lkIENQV0xfV25kOjpJbnZhbGlkYXRlUHJvdmlkZXIoSVBXTF9Qcm92aWRlciogcHJvdmlkZXIpIHsKKyAgaWYgKG1fc1ByaXZhdGVQYXJhbS5wUHJvdmlkZXIgPT0gcHJvdmlkZXIpCisgICAgbV9zUHJpdmF0ZVBhcmFtLnBQcm92aWRlciA9IG51bGxwdHI7Cit9CisKIHZvaWQgQ1BXTF9XbmQ6OkRlc3Ryb3koKSB7CiAgIEtpbGxGb2N1cygpOwogCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9idWdfNTcyODcxLmluIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzU3Mjg3MS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGNiOTQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvYnVnXzU3Mjg3MS5pbgpAQCAtMCwwICsxLDk2IEBACit7e2hlYWRlcn19Cit7e29iamVjdCAxIDB9fSA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKyAgL0Fjcm9Gb3JtIDMgMCBSCisgIC9BQSAxMSAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDIgMH19IDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMworICAvS2lkcyBbNCAwIFIgNSAwIFIgNiAwIFIgXQorPj4KK2VuZG9iagore3tvYmplY3QgMyAwfX0gPDwKKyAgL0NPIFs5IDAgUl0KKyAgL0ZpZWxkcyBbOSAwIFIgNyAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCA0IDB9fSA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCisgIC9SZXNvdXJjZXMgPDw+PgorPj4KK2VuZG9iagore3tvYmplY3QgNSAwfX0gPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQorICAvUmVzb3VyY2VzIDw8Pj4KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDYgMH19IDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL1Jlc291cmNlcyA8PD4+CisgIC9Bbm5vdHMgWzcgMCBSIDkgMCBSXQorPj4KK2VuZG9iagore3tvYmplY3QgNyAwfX0gPDwKKyAgL0ZUIC9UeAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL1dpZGdldAorICAvVCAodHh0TmFtZTIpCisgIC9GIDQKKyAgL0FQIDw8L04gOCAwIFI+PgorICAvUmVjdCBbMjAgMjAgNDAwIDYwXQorPj4KK2VuZG9iagore3tvYmplY3QgOCAwfX0gPDwKKyAgL1R5cGUgL1hPYmplY3QKKyAgL1N1YnR5cGUgL0Zvcm0KKyAgL0Zvcm1UeXBlIDEKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDkgMH19IDw8CisgIC9GVCAvVHgKKyAgL1R5cGUgL0Fubm90CisgIC9TdWJ0eXBlIC9XaWRnZXQKKyAgL1QgKHR4dE5hbWUxKQorICAvRiA0CisgIC9BUCA8PC9OIDEwIDAgUj4+CisgIC9SZWN0IFsyMDAgMjAwIDQwMCAyNjBdCis+PgorZW5kb2JqCit7e29iamVjdCAxMCAwfX0gPDwKKyAgL1R5cGUgL1hPYmplY3QKKyAgL1N1YnR5cGUgL0Zvcm0KKyAgL0Zvcm1UeXBlIDEKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDExIDB9fSA8PAorICAvV0MgMTIgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAxMiAwfX0gPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YVNjcmlwdAorICAvSlMgMTMgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAxMyAwfX0gPDw+Pgorc3RyZWFtCit0ID0gdGhpcy5nZXRGaWVsZCgndHh0TmFtZTInKTsKK3Quc2V0Rm9jdXMoKTsKK2VuZHN0cmVhbQorZW5kb2JqCit7e3hyZWZ9fQordHJhaWxlciA8PAorICAvU2l6ZSAxNAorICAvUm9vdCAxIDAgUgorPj4KK3t7c3RhcnR4cmVmfX0KKyUlRU9GCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9idWdfNTcyODcxLnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2J1Z181NzI4NzEucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjZiYzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9idWdfNTcyODcxLnBkZgpAQCAtMCwwICsxLDExMyBAQAorJVBERi0xLjcKKyWg8qT0CisxIDAgb2JqIDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorICAvQWNyb0Zvcm0gMyAwIFIKKyAgL0FBIDExIDAgUgorPj4KK2VuZG9iagorMiAwIG9iaiA8PAorICAvVHlwZSAvUGFnZXMKKyAgL0NvdW50IDMKKyAgL0tpZHMgWzQgMCBSIDUgMCBSIDYgMCBSIF0KKz4+CitlbmRvYmoKKzMgMCBvYmogPDwKKyAgL0NPIFs5IDAgUl0KKyAgL0ZpZWxkcyBbOSAwIFIgNyAwIFJdCis+PgorZW5kb2JqCis0IDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL1Jlc291cmNlcyA8PD4+Cis+PgorZW5kb2JqCis1IDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL1Jlc291cmNlcyA8PD4+Cis+PgorZW5kb2JqCis2IDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL1Jlc291cmNlcyA8PD4+CisgIC9Bbm5vdHMgWzcgMCBSIDkgMCBSXQorPj4KK2VuZG9iagorNyAwIG9iaiA8PAorICAvRlQgL1R4CisgIC9UeXBlIC9Bbm5vdAorICAvU3VidHlwZSAvV2lkZ2V0CisgIC9UICh0eHROYW1lMikKKyAgL0YgNAorICAvQVAgPDwvTiA4IDAgUj4+CisgIC9SZWN0IFsyMCAyMCA0MDAgNjBdCis+PgorZW5kb2JqCis4IDAgb2JqIDw8CisgIC9UeXBlIC9YT2JqZWN0CisgIC9TdWJ0eXBlIC9Gb3JtCisgIC9Gb3JtVHlwZSAxCis+PgorZW5kb2JqCis5IDAgb2JqIDw8CisgIC9GVCAvVHgKKyAgL1R5cGUgL0Fubm90CisgIC9TdWJ0eXBlIC9XaWRnZXQKKyAgL1QgKHR4dE5hbWUxKQorICAvRiA0CisgIC9BUCA8PC9OIDEwIDAgUj4+CisgIC9SZWN0IFsyMDAgMjAwIDQwMCAyNjBdCis+PgorZW5kb2JqCisxMCAwIG9iaiA8PAorICAvVHlwZSAvWE9iamVjdAorICAvU3VidHlwZSAvRm9ybQorICAvRm9ybVR5cGUgMQorPj4KK2VuZG9iagorMTEgMCBvYmogPDwKKyAgL1dDIDEyIDAgUgorPj4KK2VuZG9iagorMTIgMCBvYmogPDwKKyAgL1R5cGUgL0FjdGlvbgorICAvUyAvSmF2YVNjcmlwdAorICAvSlMgMTMgMCBSCis+PgorZW5kb2JqCisxMyAwIG9iaiA8PD4+CitzdHJlYW0KK3QgPSB0aGlzLmdldEZpZWxkKCd0eHROYW1lMicpOwordC5zZXRGb2N1cygpOworZW5kc3RyZWFtCitlbmRvYmoKK3hyZWYKKzAgMTQKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMTUgMDAwMDAgbiAKKzAwMDAwMDAwOTkgMDAwMDAgbiAKKzAwMDAwMDAxNzUgMDAwMDAgbiAKKzAwMDAwMDAyMzQgMDAwMDAgbiAKKzAwMDAwMDAzMjkgMDAwMDAgbiAKKzAwMDAwMDA0MjQgMDAwMDAgbiAKKzAwMDAwMDA1NDMgMDAwMDAgbiAKKzAwMDAwMDA2NzMgMDAwMDAgbiAKKzAwMDAwMDA3NDIgMDAwMDAgbiAKKzAwMDAwMDA4NzYgMDAwMDAgbiAKKzAwMDAwMDA5NDYgMDAwMDAgbiAKKzAwMDAwMDA5ODEgMDAwMDAgbiAKKzAwMDAwMDEwNDkgMDAwMDAgbiAKK3RyYWlsZXIgPDwKKyAgL1NpemUgMTQKKyAgL1Jvb3QgMSAwIFIKKz4+CitzdGFydHhyZWYKKzExMzIKKyUlRU9GCg==