ZGlmZiAtLWdpdCBhL0RvYy9yZWYvcmVmMy50ZXggYi9Eb2MvcmVmL3JlZjMudGV4CmluZGV4IGM1ZGJmZDIuLmMwZjMyMTkgMTAwNjQ0Ci0tLSBhL0RvYy9yZWYvcmVmMy50ZXgKKysrIGIvRG9jL3JlZi9yZWYzLnRleApAQCAtMTU5Myw2ICsxNTkzLDExIEBACiBNYXBwaW5ncyBtYXkgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5CiBiZSBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuICAgICAgICAgICAgICAgICAgICAgIAogCitcaXRlbSBcdmFye19fY2xhc3NfX30gYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZQorc2FtZSBcdmFye19fc2xvdHNfX30uCitcdmVyc2lvbmNoYW5nZWRbUHJldmlvdXNseSwgXHZhcntfX2NsYXNzX199IGFzc2lnbm1lbnQgcmFpc2VkIGFuIGVycm9yCitpZiBlaXRoZXIgbmV3IG9yIG9sZCBjbGFzcyBoYWQgXHZhcntfX3Nsb3RzX199XXsyLjZ9CisKIFxlbmR7aXRlbWl6ZX0KIAogCkBAIC0yMjIzLDMgKzIyMjgsNiBAQAogICAgICAgICAgIFB5dGhvbiBca2V5d29yZHt3aXRofSBzdGF0ZW1lbnQufQogXGVuZHtzZWVhbHNvfQogCisKKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQppbmRleCA3MWY0ZWM0Li41YWJlY2Y0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKQEAgLTI4NTMsNiArMjg1Myw1MSBAQAogICAgIGNhbnQobywgdHlwZSgxKSkKICAgICBjYW50KG8sIHR5cGUoTm9uZSkpCiAgICAgZGVsIG8KKyAgICBjbGFzcyBHKG9iamVjdCk6CisgICAgICAgIF9fc2xvdHNfXyA9IFsiYSIsICJiIl0KKyAgICBjbGFzcyBIKG9iamVjdCk6CisgICAgICAgIF9fc2xvdHNfXyA9IFsiYiIsICJhIl0KKyAgICB0cnk6CisgICAgICAgIHVuaWNvZGUKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBjbGFzcyBJKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImEiLCAiYiJdCisgICAgZWxzZToKKyAgICAgICAgY2xhc3MgSShvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gW3VuaWNvZGUoImEiKSwgdW5pY29kZSgiYiIpXQorICAgIGNsYXNzIEoob2JqZWN0KToKKyAgICAgICAgX19zbG90c19fID0gWyJjIiwgImIiXQorICAgIGNsYXNzIEsob2JqZWN0KToKKyAgICAgICAgX19zbG90c19fID0gWyJhIiwgImIiLCAiZCJdCisgICAgY2xhc3MgTChIKToKKyAgICAgICAgX19zbG90c19fID0gWyJlIl0KKyAgICBjbGFzcyBNKEkpOgorICAgICAgICBfX3Nsb3RzX18gPSBbImUiXQorICAgIGNsYXNzIE4oSik6CisgICAgICAgIF9fc2xvdHNfXyA9IFsiX193ZWFrcmVmX18iXQorICAgIGNsYXNzIFAoSik6CisgICAgICAgIF9fc2xvdHNfXyA9IFsiX19kaWN0X18iXQorICAgIGNsYXNzIFEoSik6CisgICAgICAgIHBhc3MKKyAgICBjbGFzcyBSKEopOgorICAgICAgICBfX3Nsb3RzX18gPSBbIl9fZGljdF9fIiwgIl9fd2Vha3JlZl9fIl0KKworICAgIGZvciBjbHMsIGNsczIgaW4gKChHLCBIKSwgKEcsIEkpLCAoSSwgSCksIChRLCBSKSwgKFIsIFEpKToKKyAgICAgICAgeCA9IGNscygpCisgICAgICAgIHguYSA9IDEKKyAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMyCisgICAgICAgIHZlcmlmeSh4Ll9fY2xhc3NfXyBpcyBjbHMyLAorICAgICAgICAgICAgICAgImFzc2lnbmluZyAlciBhcyBfX2NsYXNzX18gZm9yICVyIHNpbGVudGx5IGZhaWxlZCIgJSAoY2xzMiwgeCkpCisgICAgICAgIHZlcmVxKHguYSwgMSkKKyAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMKKyAgICAgICAgdmVyaWZ5KHguX19jbGFzc19fIGlzIGNscywKKyAgICAgICAgICAgICAgICJhc3NpZ25pbmcgJXIgYXMgX19jbGFzc19fIGZvciAlciBzaWxlbnRseSBmYWlsZWQiICUgKGNscywgeCkpCisgICAgICAgIHZlcmVxKHguYSwgMSkKKyAgICBmb3IgY2xzIGluIEcsIEosIEssIEwsIE0sIE4sIFAsIFIsIGxpc3QsIEludDoKKyAgICAgICAgZm9yIGNsczIgaW4gRywgSiwgSywgTCwgTSwgTiwgUCwgUiwgbGlzdCwgSW50OgorICAgICAgICAgICAgaWYgY2xzIGlzIGNsczI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNhbnQoY2xzKCksIGNsczIpCiAKIGRlZiBzZXRkaWN0KCk6CiAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlRlc3RpbmcgX19kaWN0X18gYXNzaWdubWVudC4uLiIKZGlmZiAtLWdpdCBhL01pc2MvQUNLUyBiL01pc2MvQUNLUwppbmRleCA3YjYwMDJjLi5lZWIyNjZhIDEwMDY0NAotLS0gYS9NaXNjL0FDS1MKKysrIGIvTWlzYy9BQ0tTCkBAIC0yNzYsNiArMjc2LDcgQEAKIEl2YW4gSGVybWFuCiBK/HJnZW4gSGVybWFubgogR2FyeSBIZXJyb24KK1Rob21hcyBIZXJ2ZQogQmVybmhhcmQgSGVyem9nCiBNYWdudXMgTC4gSGV0bGFuZAogUmF5bW9uZCBIZXR0aW5nZXIKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCA4YWYxZWIxLi42ZTMzNmI2IDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0xMiw2ICsxMiw5IEBACiBDb3JlIGFuZCBidWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBQYXRjaCAjMTYyMzU2MzogYWxsb3cgX19jbGFzc19fIGFzc2lnbm1lbnQgZm9yIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18uCisgIFRoZSBvbGQgYW5kIHRoZSBuZXcgY2xhc3MgYXJlIHN0aWxsIHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWUgc2xvdCBuYW1lcy4KKwogLSBQYXRjaCAjMTY0MjU0NzogRml4IGFuIGVycm9yL2NyYXNoIHdoZW4gZW5jb3VudGVyaW5nIHN5bnRheCBlcnJvcnMgaW4KICAgY29tcGxleCBpZiBzdGF0ZW1lbnRzLgogCmRpZmYgLS1naXQgYS9PYmplY3RzL3R5cGVvYmplY3QuYyBiL09iamVjdHMvdHlwZW9iamVjdC5jCmluZGV4IDY0YWJlNWEuLjY0MDAzZmMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHlwZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHlwZW9iamVjdC5jCkBAIC0xODQ0LDggKzE4NDQsMTEgQEAKIAkJCX0KIAkJfQogCi0JCS8qIENvcHkgc2xvdHMgaW50byB5ZXQgYW5vdGhlciB0dXBsZSwgZGVtYW5nbGluZyBuYW1lcyAqLwotCQluZXdzbG90cyA9IFB5VHVwbGVfTmV3KG5zbG90cyAtIGFkZF9kaWN0IC0gYWRkX3dlYWspOworCQkvKiBDb3B5IHNsb3RzIGludG8gYSBsaXN0LCBtYW5nbGUgbmFtZXMgYW5kIHNvcnQgdGhlbS4KKwkJICAgU29ydGVkIG5hbWVzIGFyZSBuZWVkZWQgZm9yIF9fY2xhc3NfXyBhc3NpZ25tZW50LgorCQkgICBDb252ZXJ0IHRoZW0gYmFjayB0byB0dXBsZSBhdCB0aGUgZW5kLgorCQkqLworCQluZXdzbG90cyA9IFB5TGlzdF9OZXcobnNsb3RzIC0gYWRkX2RpY3QgLSBhZGRfd2Vhayk7CiAJCWlmIChuZXdzbG90cyA9PSBOVUxMKQogCQkJZ290byBiYWRfc2xvdHM7CiAJCWZvciAoaSA9IGogPSAwOyBpIDwgbnNsb3RzOyBpKyspIHsKQEAgLTE4NTgsMTMgKzE4NjEsMjMgQEAKIAkJCXRtcCA9X1B5X01hbmdsZShuYW1lLCB0bXApOwogCQkJaWYgKCF0bXApCiAJCQkgICAgZ290byBiYWRfc2xvdHM7Ci0JCQlQeVR1cGxlX1NFVF9JVEVNKG5ld3Nsb3RzLCBqLCB0bXApOworCQkJUHlMaXN0X1NFVF9JVEVNKG5ld3Nsb3RzLCBqLCB0bXApOwogCQkJaisrOwogCQl9CiAJCWFzc2VydChqID09IG5zbG90cyAtIGFkZF9kaWN0IC0gYWRkX3dlYWspOwogCQluc2xvdHMgPSBqOwogCQlQeV9ERUNSRUYoc2xvdHMpOwotCQlzbG90cyA9IG5ld3Nsb3RzOworCQlpZiAoUHlMaXN0X1NvcnQobmV3c2xvdHMpID09IC0xKSB7CisJCQlQeV9ERUNSRUYoYmFzZXMpOworCQkJUHlfREVDUkVGKG5ld3Nsb3RzKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXNsb3RzID0gUHlMaXN0X0FzVHVwbGUobmV3c2xvdHMpOworCQlQeV9ERUNSRUYobmV3c2xvdHMpOworCQlpZiAoc2xvdHMgPT0gTlVMTCkgeworCQkJUHlfREVDUkVGKGJhc2VzKTsKKwkJCXJldHVybiBOVUxMOworCQl9CiAKIAkJLyogU2Vjb25kYXJ5IGJhc2VzIG1heSBwcm92aWRlIHdlYWtyZWZzIG9yIGRpY3QgKi8KIAkJaWYgKG5iYXNlcyA+IDEgJiYKQEAgLTI0ODEsNiArMjQ5NCw3IEBACiB7CiAJUHlUeXBlT2JqZWN0ICpiYXNlID0gYS0+dHBfYmFzZTsKIAlQeV9zc2l6ZV90IHNpemU7CisJUHlPYmplY3QgKnNsb3RzX2EsICpzbG90c19iOwogCiAJaWYgKGJhc2UgIT0gYi0+dHBfYmFzZSkKIAkJcmV0dXJuIDA7CkBAIC0yNDkxLDYgKzI1MDUsMTUgQEAKIAkJc2l6ZSArPSBzaXplb2YoUHlPYmplY3QgKik7CiAJaWYgKGEtPnRwX3dlYWtsaXN0b2Zmc2V0ID09IHNpemUgJiYgYi0+dHBfd2Vha2xpc3RvZmZzZXQgPT0gc2l6ZSkKIAkJc2l6ZSArPSBzaXplb2YoUHlPYmplY3QgKik7CisKKwkvKiBDaGVjayBzbG90cyBjb21wbGlhbmNlICovCisJc2xvdHNfYSA9ICgoUHlIZWFwVHlwZU9iamVjdCAqKWEpLT5odF9zbG90czsKKwlzbG90c19iID0gKChQeUhlYXBUeXBlT2JqZWN0ICopYiktPmh0X3Nsb3RzOworCWlmIChzbG90c19hICYmIHNsb3RzX2IpIHsKKwkJaWYgKFB5T2JqZWN0X0NvbXBhcmUoc2xvdHNfYSwgc2xvdHNfYikgIT0gMCkKKwkJCXJldHVybiAwOworCQlzaXplICs9IHNpemVvZihQeU9iamVjdCAqKSAqIFB5VHVwbGVfR0VUX1NJWkUoc2xvdHNfYSk7CisJfQogCXJldHVybiBzaXplID09IGEtPnRwX2Jhc2ljc2l6ZSAmJiBzaXplID09IGItPnRwX2Jhc2ljc2l6ZTsKIH0KIAo=