ZGlmZiAtLWdpdCBhL2NvcmUvZnBkZmFwaS9wYWdlL2NwZGZfaW1hZ2VvYmplY3QuY3BwIGIvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl9pbWFnZW9iamVjdC5jcHAKaW5kZXggMjc4ZmI4NC4uNGQ5OWE4OSAxMDA2NDQKLS0tIGEvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl9pbWFnZW9iamVjdC5jcHAKKysrIGIvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl9pbWFnZW9iamVjdC5jcHAKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAiY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl9kb2NwYWdlZGF0YS5oIgogI2luY2x1ZGUgImNvcmUvZnBkZmFwaS9wYWdlL2NwZGZfaW1hZ2UuaCIKICNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvcGFyc2VyL2NwZGZfc3RyZWFtLmgiCisjaW5jbHVkZSAiY29yZS9meGNydC9meF9jb29yZGluYXRlcy5oIgogI2luY2x1ZGUgImNvcmUvZnhnZS9kaWIvY2Z4X2RpYmJhc2UuaCIKICNpbmNsdWRlICJjb3JlL2Z4Z2UvZGliL2NmeF9kaWJpdG1hcC5oIgogCkBAIC00NSw2ICs0Niw3IEBACiAKIHZvaWQgQ1BERl9JbWFnZU9iamVjdDo6Q2FsY0JvdW5kaW5nQm94KCkgewogICBzdGF0aWMgY29uc3RleHByIENGWF9GbG9hdFJlY3Qga1JlY3QoMC4wZiwgMC4wZiwgMS4wZiwgMS4wZik7CisgIFNldE9yaWdpbmFsUmVjdChrUmVjdCk7CiAgIFNldFJlY3QobV9NYXRyaXguVHJhbnNmb3JtUmVjdChrUmVjdCkpOwogfQogCmRpZmYgLS1naXQgYS9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuY3BwIGIvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl9wYWdlb2JqZWN0LmNwcAppbmRleCBiZGUxNzA0Li40Y2UyNTA0IDEwMDY0NAotLS0gYS9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuY3BwCisrKyBiL2NvcmUvZnBkZmFwaS9wYWdlL2NwZGZfcGFnZW9iamVjdC5jcHAKQEAgLTYsNiArNiw4IEBACiAKICNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuaCIKIAorI2luY2x1ZGUgImNvcmUvZnhjcnQvZnhfY29vcmRpbmF0ZXMuaCIKKwogQ1BERl9QYWdlT2JqZWN0OjpDUERGX1BhZ2VPYmplY3QoaW50MzJfdCBjb250ZW50X3N0cmVhbSkKICAgICA6IG1fQ29udGVudFN0cmVhbShjb250ZW50X3N0cmVhbSkge30KIApkaWZmIC0tZ2l0IGEvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl9wYWdlb2JqZWN0LmggYi9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuaAppbmRleCA2MDYyNmFmLi5iODhiZTBjIDEwMDY0NAotLS0gYS9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuaAorKysgYi9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuaApAQCAtNjAsNiArNjAsOCBAQAogICB2b2lkIFRyYW5zZm9ybUNsaXBQYXRoKGNvbnN0IENGWF9NYXRyaXgmIG1hdHJpeCk7CiAgIHZvaWQgVHJhbnNmb3JtR2VuZXJhbFN0YXRlKGNvbnN0IENGWF9NYXRyaXgmIG1hdHJpeCk7CiAKKyAgdm9pZCBTZXRPcmlnaW5hbFJlY3QoY29uc3QgQ0ZYX0Zsb2F0UmVjdCYgcmVjdCkgeyBtX09yaWdpbmFsUmVjdCA9IHJlY3Q7IH0KKyAgY29uc3QgQ0ZYX0Zsb2F0UmVjdCYgR2V0T3JpZ2luYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9PcmlnaW5hbFJlY3Q7IH0KICAgdm9pZCBTZXRSZWN0KGNvbnN0IENGWF9GbG9hdFJlY3QmIHJlY3QpIHsgbV9SZWN0ID0gcmVjdDsgfQogICBjb25zdCBDRlhfRmxvYXRSZWN0JiBHZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9SZWN0OyB9CiAgIEZYX1JFQ1QgR2V0QkJveCgpIGNvbnN0OwpAQCAtODksNiArOTEsNyBAQAogICBDRlhfRmxvYXRSZWN0IG1fUmVjdDsKIAogIHByaXZhdGU6CisgIENGWF9GbG9hdFJlY3QgbV9PcmlnaW5hbFJlY3Q7CiAgIENQREZfQ29udGVudE1hcmtzIG1fQ29udGVudE1hcmtzOwogICBib29sIG1fYkRpcnR5ID0gZmFsc2U7CiAgIGludDMyX3QgbV9Db250ZW50U3RyZWFtOwpkaWZmIC0tZ2l0IGEvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl90ZXh0b2JqZWN0LmNwcCBiL2NvcmUvZnBkZmFwaS9wYWdlL2NwZGZfdGV4dG9iamVjdC5jcHAKaW5kZXggMzNlMWIwYi4uNzllOTMwMCAxMDA2NDQKLS0tIGEvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl90ZXh0b2JqZWN0LmNwcAorKysgYi9jb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3RleHRvYmplY3QuY3BwCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvZm9udC9jcGRmX2NpZGZvbnQuaCIKICNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvZm9udC9jcGRmX2ZvbnQuaCIKKyNpbmNsdWRlICJjb3JlL2Z4Y3J0L2Z4X2Nvb3JkaW5hdGVzLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvYmFzZS9jaGVjay5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Jhc2Uvc3Bhbi5oIgogCkBAIC0zMjUsOSArMzI2LDExIEBACiAgICAgbWF4X3kgPSBtYXhfeSAqIGZvbnRzaXplIC8gMTAwMDsKICAgfQogCi0gIENGWF9GbG9hdFJlY3QgcmVjdCA9Ci0gICAgICBHZXRUZXh0TWF0cml4KCkuVHJhbnNmb3JtUmVjdChDRlhfRmxvYXRSZWN0KG1pbl94LCBtaW5feSwgbWF4X3gsIG1heF95KSk7CisgIFNldE9yaWdpbmFsUmVjdChDRlhfRmxvYXRSZWN0KG1pbl94LCBtaW5feSwgbWF4X3gsIG1heF95KSk7CisgIENGWF9GbG9hdFJlY3QgcmVjdCA9IEdldFRleHRNYXRyaXgoKS5UcmFuc2Zvcm1SZWN0KEdldE9yaWdpbmFsUmVjdCgpKTsKICAgaWYgKFRleHRSZW5kZXJpbmdNb2RlSXNTdHJva2VNb2RlKG1fVGV4dFN0YXRlLkdldFRleHRNb2RlKCkpKSB7CisgICAgLy8gVE9ETyhjcmJ1Zy5jb20vcGRmaXVtLzE4NDApOiBEb2VzIHRoZSBvcmlnaW5hbCByZWN0IG5lZWQgYSBzaW1pbGFyCisgICAgLy8gYWRqdXN0bWVudD8KICAgICBjb25zdCBmbG9hdCBoYWxmX3dpZHRoID0gbV9HcmFwaFN0YXRlLkdldExpbmVXaWR0aCgpIC8gMjsKICAgICByZWN0LkluZmxhdGUoaGFsZl93aWR0aCwgaGFsZl93aWR0aCk7CiAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvZnBkZmFwaS9wYWdlL2NwZGZfdGV4dG9iamVjdC5oIGIvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl90ZXh0b2JqZWN0LmgKaW5kZXggZDUyYWFkNy4uNWU3YWRmYyAxMDA2NDQKLS0tIGEvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl90ZXh0b2JqZWN0LmgKKysrIGIvY29yZS9mcGRmYXBpL3BhZ2UvY3BkZl90ZXh0b2JqZWN0LmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb3JlL2ZwZGZhcGkvcGFnZS9jcGRmX3BhZ2VvYmplY3QuaCIKKyNpbmNsdWRlICJjb3JlL2Z4Y3J0L2Z4X2Nvb3JkaW5hdGVzLmgiCiAjaW5jbHVkZSAiY29yZS9meGNydC9meF9zdHJpbmcuaCIKICNpbmNsdWRlICJjb3JlL2Z4Y3J0L3JldGFpbl9wdHIuaCIKIApkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX2VkaXRwYWdlLmNwcCBiL2ZwZGZzZGsvZnBkZl9lZGl0cGFnZS5jcHAKaW5kZXggOGEyZDI2OS4uOTg1ODIzYSAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX2VkaXRwYWdlLmNwcAorKysgYi9mcGRmc2RrL2ZwZGZfZWRpdHBhZ2UuY3BwCkBAIC03ODYsNiArNzg2LDQ0IEBACiB9CiAKIEZQREZfRVhQT1JUIEZQREZfQk9PTCBGUERGX0NBTExDT05WCitGUERGUGFnZU9ial9HZXRSb3RhdGVkQm91bmRzKEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNfUVVBRFBPSU5UU0YqIHF1YWRfcG9pbnRzKSB7CisgIENQREZfUGFnZU9iamVjdCogY3BhZ2Vfb2JqZWN0ID0gQ1BERlBhZ2VPYmplY3RGcm9tRlBERlBhZ2VPYmplY3QocGFnZV9vYmplY3QpOworICBpZiAoIWNwYWdlX29iamVjdCB8fCAhcXVhZF9wb2ludHMpCisgICAgcmV0dXJuIGZhbHNlOworCisgIENGWF9NYXRyaXggbWF0cml4OworICBzd2l0Y2ggKGNwYWdlX29iamVjdC0+R2V0VHlwZSgpKSB7CisgICAgY2FzZSBDUERGX1BhZ2VPYmplY3Q6OlR5cGU6OmtUZXh0OgorICAgICAgbWF0cml4ID0gY3BhZ2Vfb2JqZWN0LT5Bc1RleHQoKS0+R2V0VGV4dE1hdHJpeCgpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDUERGX1BhZ2VPYmplY3Q6OlR5cGU6OmtJbWFnZToKKyAgICAgIG1hdHJpeCA9IGNwYWdlX29iamVjdC0+QXNJbWFnZSgpLT5tYXRyaXgoKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvLyBUT0RPKGNyYnVnLmNvbS9wZGZpdW0vMTg0MCk6IFN1cHBvcnQgbW9yZSBvYmplY3QgdHlwZXMuCisgICAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjb25zdCBDRlhfRmxvYXRSZWN0JiBiYm94ID0gY3BhZ2Vfb2JqZWN0LT5HZXRPcmlnaW5hbFJlY3QoKTsKKyAgY29uc3QgQ0ZYX1BvaW50RiBib3R0b21fbGVmdCA9IG1hdHJpeC5UcmFuc2Zvcm0oe2Jib3gubGVmdCwgYmJveC5ib3R0b219KTsKKyAgY29uc3QgQ0ZYX1BvaW50RiBib3R0b21fcmlnaHQgPSBtYXRyaXguVHJhbnNmb3JtKHtiYm94LnJpZ2h0LCBiYm94LmJvdHRvbX0pOworICBjb25zdCBDRlhfUG9pbnRGIHRvcF9yaWdodCA9IG1hdHJpeC5UcmFuc2Zvcm0oe2Jib3gucmlnaHQsIGJib3gudG9wfSk7CisgIGNvbnN0IENGWF9Qb2ludEYgdG9wX2xlZnQgPSBtYXRyaXguVHJhbnNmb3JtKHtiYm94LmxlZnQsIGJib3gudG9wfSk7CisKKyAgLy8gU2VlIFBERiAzMjAwMC0xOjIwMDgsIGZpZ3VyZSA2NCBmb3IgdGhlIFF1YWRQb2ludHMgb3JkZXJpbmcuCisgIHF1YWRfcG9pbnRzLT54MSA9IGJvdHRvbV9sZWZ0Lng7CisgIHF1YWRfcG9pbnRzLT55MSA9IGJvdHRvbV9sZWZ0Lnk7CisgIHF1YWRfcG9pbnRzLT54MiA9IGJvdHRvbV9yaWdodC54OworICBxdWFkX3BvaW50cy0+eTIgPSBib3R0b21fcmlnaHQueTsKKyAgcXVhZF9wb2ludHMtPngzID0gdG9wX3JpZ2h0Lng7CisgIHF1YWRfcG9pbnRzLT55MyA9IHRvcF9yaWdodC55OworICBxdWFkX3BvaW50cy0+eDQgPSB0b3BfbGVmdC54OworICBxdWFkX3BvaW50cy0+eTQgPSB0b3BfbGVmdC55OworICByZXR1cm4gdHJ1ZTsKK30KKworRlBERl9FWFBPUlQgRlBERl9CT09MIEZQREZfQ0FMTENPTlYKIEZQREZQYWdlT2JqX1NldFN0cm9rZUNvbG9yKEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IEcsCmRpZmYgLS1naXQgYS9mcGRmc2RrL2ZwZGZfZWRpdHBhZ2VfZW1iZWRkZXJ0ZXN0LmNwcCBiL2ZwZGZzZGsvZnBkZl9lZGl0cGFnZV9lbWJlZGRlcnRlc3QuY3BwCmluZGV4IDJhZjRlNTQuLmZlMjcxOWIgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvZnBkZl9lZGl0cGFnZV9lbWJlZGRlcnRlc3QuY3BwCisrKyBiL2ZwZGZzZGsvZnBkZl9lZGl0cGFnZV9lbWJlZGRlcnRlc3QuY3BwCkBAIC0yOTIsMyArMjkyLDE2NyBAQAogCiAgIFVubG9hZFBhZ2UocGFnZSk7CiB9CisKK1RFU1RfRihGUERGRWRpdFBhZ2VFbWJlZGRlclRlc3QsIEdldFJvdGF0ZWRCb3VuZHNCYWRQYXJhbWV0ZXJzKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiaGVsbG9fd29ybGQucGRmIikpOworICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICBBU1NFUlRfVFJVRShwYWdlKTsKKworICBGUERGX1BBR0VPQkpFQ1Qgb2JqID0gRlBERlBhZ2VfR2V0T2JqZWN0KHBhZ2UsIDApOworICBBU1NFUlRfRVEoRlBERl9QQUdFT0JKX1RFWFQsIEZQREZQYWdlT2JqX0dldFR5cGUob2JqKSk7CisKKyAgRlNfUVVBRFBPSU5UU0YgcXVhZDsKKyAgQVNTRVJUX0ZBTFNFKEZQREZQYWdlT2JqX0dldFJvdGF0ZWRCb3VuZHMobnVsbHB0ciwgbnVsbHB0cikpOworICBBU1NFUlRfRkFMU0UoRlBERlBhZ2VPYmpfR2V0Um90YXRlZEJvdW5kcyhvYmosIG51bGxwdHIpKTsKKyAgQVNTRVJUX0ZBTFNFKEZQREZQYWdlT2JqX0dldFJvdGF0ZWRCb3VuZHMobnVsbHB0ciwgJnF1YWQpKTsKKworICBVbmxvYWRQYWdlKHBhZ2UpOworfQorCitURVNUX0YoRlBERkVkaXRQYWdlRW1iZWRkZXJUZXN0LCBHZXRCb3VuZHNGb3JOb3JtYWxUZXh0KSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiaGVsbG9fd29ybGQucGRmIikpOworICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICBBU1NFUlRfVFJVRShwYWdlKTsKKworICBGUERGX1BBR0VPQkpFQ1Qgb2JqID0gRlBERlBhZ2VfR2V0T2JqZWN0KHBhZ2UsIDApOworICBBU1NFUlRfRVEoRlBERl9QQUdFT0JKX1RFWFQsIEZQREZQYWdlT2JqX0dldFR5cGUob2JqKSk7CisKKyAgY29uc3RleHByIGZsb2F0IGtFeHBlY3RlZExlZnQgPSAyMC4zNDhmOworICBjb25zdGV4cHIgZmxvYXQga0V4cGVjdGVkQm90dG9tID0gNDguMTY0ZjsKKyAgY29uc3RleHByIGZsb2F0IGtFeHBlY3RlZFJpZ2h0ID0gODMuMzZmOworICBjb25zdGV4cHIgZmxvYXQga0V4cGVjdGVkVG9wID0gNTguMzI4ZjsKKworICBmbG9hdCBsZWZ0OworICBmbG9hdCBib3R0b207CisgIGZsb2F0IHJpZ2h0OworICBmbG9hdCB0b3A7CisgIEFTU0VSVF9UUlVFKEZQREZQYWdlT2JqX0dldEJvdW5kcyhvYmosICZsZWZ0LCAmYm90dG9tLCAmcmlnaHQsICZ0b3ApKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZExlZnQsIGxlZnQpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkQm90dG9tLCBib3R0b20pOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkUmlnaHQsIHJpZ2h0KTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZFRvcCwgdG9wKTsKKworICBGU19RVUFEUE9JTlRTRiBxdWFkOworICBBU1NFUlRfVFJVRShGUERGUGFnZU9ial9HZXRSb3RhdGVkQm91bmRzKG9iaiwgJnF1YWQpKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZExlZnQsIHF1YWQueDEpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkQm90dG9tLCBxdWFkLnkxKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZFJpZ2h0LCBxdWFkLngyKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZEJvdHRvbSwgcXVhZC55Mik7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRSaWdodCwgcXVhZC54Myk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRUb3AsIHF1YWQueTMpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkTGVmdCwgcXVhZC54NCk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRUb3AsIHF1YWQueTQpOworCisgIFVubG9hZFBhZ2UocGFnZSk7Cit9CisKK1RFU1RfRihGUERGRWRpdFBhZ2VFbWJlZGRlclRlc3QsIEdldEJvdW5kc0ZvclJvdGF0ZWRUZXh0KSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgicm90YXRlZF90ZXh0LnBkZiIpKTsKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgRlBERl9QQUdFT0JKRUNUIG9iaiA9IEZQREZQYWdlX0dldE9iamVjdChwYWdlLCAwKTsKKyAgQVNTRVJUX0VRKEZQREZfUEFHRU9CSl9URVhULCBGUERGUGFnZU9ial9HZXRUeXBlKG9iaikpOworCisgIGNvbnN0ZXhwciBmbG9hdCBrRXhwZWN0ZWRMZWZ0ID0gOTguOTQ3OGY7CisgIGNvbnN0ZXhwciBmbG9hdCBrRXhwZWN0ZWRCb3R0b20gPSA3OC4yNjA3ZjsKKyAgY29uc3RleHByIGZsb2F0IGtFeHBlY3RlZFJpZ2h0ID0gMTI2LjMyOTgzZjsKKyAgY29uc3RleHByIGZsb2F0IGtFeHBlY3RlZFRvcCA9IDEwNS42NDI3MmY7CisKKyAgZmxvYXQgbGVmdDsKKyAgZmxvYXQgYm90dG9tOworICBmbG9hdCByaWdodDsKKyAgZmxvYXQgdG9wOworICBBU1NFUlRfVFJVRShGUERGUGFnZU9ial9HZXRCb3VuZHMob2JqLCAmbGVmdCwgJmJvdHRvbSwgJnJpZ2h0LCAmdG9wKSk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRMZWZ0LCBsZWZ0KTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZEJvdHRvbSwgYm90dG9tKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZFJpZ2h0LCByaWdodCk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRUb3AsIHRvcCk7CisKKyAgRlNfUVVBRFBPSU5UU0YgcXVhZDsKKyAgQVNTRVJUX1RSVUUoRlBERlBhZ2VPYmpfR2V0Um90YXRlZEJvdW5kcyhvYmosICZxdWFkKSk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRMZWZ0LCBxdWFkLngxKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKDk4LjQ1NTdmLCBxdWFkLnkxKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKDExOS4xNDI3OWYsIHF1YWQueDIpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkQm90dG9tLCBxdWFkLnkyKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZFJpZ2h0LCBxdWFkLngzKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKDg1LjQ0NzczOWYsIHF1YWQueTMpOworICBFWFBFQ1RfRkxPQVRfRVEoMTA2LjEzNDg2ZiwgcXVhZC54NCk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRUb3AsIHF1YWQueTQpOworCisgIFVubG9hZFBhZ2UocGFnZSk7Cit9CisKK1RFU1RfRihGUERGRWRpdFBhZ2VFbWJlZGRlclRlc3QsIEdldEJvdW5kc0Zvck5vcm1hbEltYWdlKSB7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgibWF0dGUucGRmIikpOworICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICBBU1NFUlRfVFJVRShwYWdlKTsKKworICBGUERGX1BBR0VPQkpFQ1Qgb2JqID0gRlBERlBhZ2VfR2V0T2JqZWN0KHBhZ2UsIDIpOworICBBU1NFUlRfRVEoRlBERl9QQUdFT0JKX0lNQUdFLCBGUERGUGFnZU9ial9HZXRUeXBlKG9iaikpOworCisgIGNvbnN0ZXhwciBmbG9hdCBrRXhwZWN0ZWRMZWZ0ID0gMC4wZjsKKyAgY29uc3RleHByIGZsb2F0IGtFeHBlY3RlZEJvdHRvbSA9IDkwLjBmOworICBjb25zdGV4cHIgZmxvYXQga0V4cGVjdGVkUmlnaHQgPSA0MC4wZjsKKyAgY29uc3RleHByIGZsb2F0IGtFeHBlY3RlZFRvcCA9IDE1MC4wZjsKKworICBmbG9hdCBsZWZ0OworICBmbG9hdCBib3R0b207CisgIGZsb2F0IHJpZ2h0OworICBmbG9hdCB0b3A7CisgIEFTU0VSVF9UUlVFKEZQREZQYWdlT2JqX0dldEJvdW5kcyhvYmosICZsZWZ0LCAmYm90dG9tLCAmcmlnaHQsICZ0b3ApKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZExlZnQsIGxlZnQpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkQm90dG9tLCBib3R0b20pOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkUmlnaHQsIHJpZ2h0KTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZFRvcCwgdG9wKTsKKworICBGU19RVUFEUE9JTlRTRiBxdWFkOworICBBU1NFUlRfVFJVRShGUERGUGFnZU9ial9HZXRSb3RhdGVkQm91bmRzKG9iaiwgJnF1YWQpKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZExlZnQsIHF1YWQueDEpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkQm90dG9tLCBxdWFkLnkxKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZFJpZ2h0LCBxdWFkLngyKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZEJvdHRvbSwgcXVhZC55Mik7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRSaWdodCwgcXVhZC54Myk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRUb3AsIHF1YWQueTMpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkTGVmdCwgcXVhZC54NCk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRUb3AsIHF1YWQueTQpOworCisgIFVubG9hZFBhZ2UocGFnZSk7Cit9CisKK1RFU1RfRihGUERGRWRpdFBhZ2VFbWJlZGRlclRlc3QsIEdldEJvdW5kc0ZvclJvdGF0ZWRJbWFnZSkgeworICBBU1NFUlRfVFJVRShPcGVuRG9jdW1lbnQoInJvdGF0ZWRfaW1hZ2UucGRmIikpOworICBGUERGX1BBR0UgcGFnZSA9IExvYWRQYWdlKDApOworICBBU1NFUlRfVFJVRShwYWdlKTsKKworICBGUERGX1BBR0VPQkpFQ1Qgb2JqID0gRlBERlBhZ2VfR2V0T2JqZWN0KHBhZ2UsIDApOworICBBU1NFUlRfRVEoRlBERl9QQUdFT0JKX0lNQUdFLCBGUERGUGFnZU9ial9HZXRUeXBlKG9iaikpOworCisgIGNvbnN0ZXhwciBmbG9hdCBrRXhwZWN0ZWRMZWZ0ID0gMTAwLjBmOworICBjb25zdGV4cHIgZmxvYXQga0V4cGVjdGVkQm90dG9tID0gNzAuMGY7CisgIGNvbnN0ZXhwciBmbG9hdCBrRXhwZWN0ZWRSaWdodCA9IDE3MC4wZjsKKyAgY29uc3RleHByIGZsb2F0IGtFeHBlY3RlZFRvcCA9IDE0MC4wZjsKKworICBmbG9hdCBsZWZ0OworICBmbG9hdCBib3R0b207CisgIGZsb2F0IHJpZ2h0OworICBmbG9hdCB0b3A7CisgIEFTU0VSVF9UUlVFKEZQREZQYWdlT2JqX0dldEJvdW5kcyhvYmosICZsZWZ0LCAmYm90dG9tLCAmcmlnaHQsICZ0b3ApKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZExlZnQsIGxlZnQpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkQm90dG9tLCBib3R0b20pOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkUmlnaHQsIHJpZ2h0KTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZFRvcCwgdG9wKTsKKworICBGU19RVUFEUE9JTlRTRiBxdWFkOworICBBU1NFUlRfVFJVRShGUERGUGFnZU9ial9HZXRSb3RhdGVkQm91bmRzKG9iaiwgJnF1YWQpKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKGtFeHBlY3RlZExlZnQsIHF1YWQueDEpOworICBFWFBFQ1RfRkxPQVRfRVEoMTAwLjBmLCBxdWFkLnkxKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKDEzMC4wZiwgcXVhZC54Mik7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRCb3R0b20sIHF1YWQueTIpOworICBFWFBFQ1RfRkxPQVRfRVEoa0V4cGVjdGVkUmlnaHQsIHF1YWQueDMpOworICBFWFBFQ1RfRkxPQVRfRVEoMTEwLjBmLCBxdWFkLnkzKTsKKyAgRVhQRUNUX0ZMT0FUX0VRKDE0MC4wZiwgcXVhZC54NCk7CisgIEVYUEVDVF9GTE9BVF9FUShrRXhwZWN0ZWRUb3AsIHF1YWQueTQpOworCisgIFVubG9hZFBhZ2UocGFnZSk7Cit9CmRpZmYgLS1naXQgYS9mcGRmc2RrL2ZwZGZfdmlld19jX2FwaV90ZXN0LmMgYi9mcGRmc2RrL2ZwZGZfdmlld19jX2FwaV90ZXN0LmMKaW5kZXggZTUyNGYzMC4uNmU0Nzg3NiAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX3ZpZXdfY19hcGlfdGVzdC5jCisrKyBiL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYwpAQCAtMjA4LDYgKzIwOCw3IEBACiAgICAgQ0hLKEZQREZQYWdlT2JqX0dldExpbmVKb2luKTsKICAgICBDSEsoRlBERlBhZ2VPYmpfR2V0TWFyayk7CiAgICAgQ0hLKEZQREZQYWdlT2JqX0dldE1hdHJpeCk7CisgICAgQ0hLKEZQREZQYWdlT2JqX0dldFJvdGF0ZWRCb3VuZHMpOwogICAgIENISyhGUERGUGFnZU9ial9HZXRTdHJva2VDb2xvcik7CiAgICAgQ0hLKEZQREZQYWdlT2JqX0dldFN0cm9rZVdpZHRoKTsKICAgICBDSEsoRlBERlBhZ2VPYmpfR2V0VHlwZSk7CmRpZmYgLS1naXQgYS9wdWJsaWMvZnBkZl9lZGl0LmggYi9wdWJsaWMvZnBkZl9lZGl0LmgKaW5kZXggOGY0ZTdmMC4uYzkwMjk5OCAxMDA2NDQKLS0tIGEvcHVibGljL2ZwZGZfZWRpdC5oCisrKyBiL3B1YmxpYy9mcGRmX2VkaXQuaApAQCAtNzYxLDcgKzc2MSw3IEBACiAvLyByaWdodCAgICAgICAgLSBwb2ludGVyIHdoZXJlIHRoZSByaWdodCBjb29yZGluYXRlIHdpbGwgYmUgc3RvcmVkCiAvLyB0b3AgICAgICAgICAgLSBwb2ludGVyIHdoZXJlIHRoZSB0b3AgY29vcmRpbmF0ZSB3aWxsIGJlIHN0b3JlZAogLy8KLS8vIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgorLy8gT24gc3VjY2VzcywgcmV0dXJucyBUUlVFIGFuZCBmaWxscyBpbiB0aGUgNCBjb29yZGluYXRlcy4KIEZQREZfRVhQT1JUIEZQREZfQk9PTCBGUERGX0NBTExDT05WCiBGUERGUGFnZU9ial9HZXRCb3VuZHMoRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBsZWZ0LApAQCAtNzY5LDYgKzc2OSwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiByaWdodCwKICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogdG9wKTsKIAorLy8gRXhwZXJpbWVudGFsIEFQSS4KKy8vIEdldCB0aGUgcXVhZCBwb2ludHMgdGhhdCBib3VuZHMgfHBhZ2Vfb2JqZWN0fC4KKy8vCisvLyBwYWdlX29iamVjdCAgLSBoYW5kbGUgdG8gYSBwYWdlIG9iamVjdC4KKy8vIHF1YWRfcG9pbnRzICAtIHBvaW50ZXIgd2hlcmUgdGhlIHF1YWRyaWxhdGVyYWwgcG9pbnRzIHdpbGwgYmUgc3RvcmVkLgorLy8KKy8vIE9uIHN1Y2Nlc3MsIHJldHVybnMgVFJVRSBhbmQgZmlsbHMgaW4gfHF1YWRfcG9pbnRzfC4KKy8vCisvLyBTaW1pbGFyIHRvIEZQREZQYWdlT2JqX0dldEJvdW5kcygpLCB0aGlzIHJldHVybnMgdGhlIGJvdW5kcyBvZiBhIHBhZ2UKKy8vIG9iamVjdC4gV2hlbiB0aGUgb2JqZWN0IGlzIHJvdGF0ZWQgYnkgYSBub24tbXVsdGlwbGUgb2YgOTAgZGVncmVlcywgdGhpcyBBUEkKKy8vIHJldHVybnMgYSB0aWdodGVyIGJvdW5kIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIHdpdGgganVzdCB0aGUgNCBzaWRlcyBvZgorLy8gYSByZWN0YW5nbGUuCisvLworLy8gQ3VycmVudGx5IG9ubHkgd29ya3MgdGhlIGZvbGxvd2luZyB8cGFnZV9vYmplY3R8IHR5cGVzOiBGUERGX1BBR0VPQkpfVEVYVCBhbmQKKy8vIEZQREZfUEFHRU9CSl9JTUFHRS4KK0ZQREZfRVhQT1JUIEZQREZfQk9PTCBGUERGX0NBTExDT05WCitGUERGUGFnZU9ial9HZXRSb3RhdGVkQm91bmRzKEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNfUVVBRFBPSU5UU0YqIHF1YWRfcG9pbnRzKTsKKwogLy8gU2V0IHRoZSBibGVuZCBtb2RlIG9mIHxwYWdlX29iamVjdHwuCiAvLwogLy8gcGFnZV9vYmplY3QgIC0gaGFuZGxlIHRvIGEgcGFnZSBvYmplY3QuCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9yb3RhdGVkX2ltYWdlLmluIGIvdGVzdGluZy9yZXNvdXJjZXMvcm90YXRlZF9pbWFnZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjgyZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9yZXNvdXJjZXMvcm90YXRlZF9pbWFnZS5pbgpAQCAtMCwwICsxLDUyIEBACit7e2hlYWRlcn19Cit7e29iamVjdCAxIDB9fSA8PAorICAvVHlwZSAvQ2F0YWxvZworICAvUGFnZXMgMiAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDIgMH19IDw8CisgIC9UeXBlIC9QYWdlcworICAvTWVkaWFCb3ggWzAgMCAyMDAgMjAwXQorICAvQ291bnQgMQorICAvS2lkcyBbMyAwIFJdCis+PgorZW5kb2JqCit7e29iamVjdCAzIDB9fSA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9Db250ZW50cyA0IDAgUgorICAvUmVzb3VyY2VzIDw8CisgICAgL1hPYmplY3QgPDwKKyAgICAgIC9JbWcgNSAwIFIKKyAgICA+PgorICA+PgorPj4KK2VuZG9iagore3tvYmplY3QgNCAwfX0gPDwKKyAge3tzdHJlYW1sZW59fQorPj4KK3N0cmVhbQorcQorMzAgLTMwIDQwIDQwIDEwMCAxMDAgY20KKy9JbWcgRG8KK1EKK2VuZHN0cmVhbQorZW5kb2JqCit7e29iamVjdCA1IDB9fSA8PAorICAvVHlwZSAvWE9iamVjdAorICAvU3VidHlwZSAvSW1hZ2UKKyAgL1dpZHRoIDUwCisgIC9IZWlnaHQgNTAKKyAgL0JpdHNQZXJDb21wb25lbnQgOAorICAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCCisgIC9GaWx0ZXIgWy9BU0NJSUhleERlY29kZSAvRmxhdGVEZWNvZGVdCisgIHt7c3RyZWFtbGVufX0KKz4+CitzdHJlYW0KKzc4OWNlZGMyMzEwZDAwMDAwYzAzYTA3ZjJhYWFiM2VhN2JjZjAzODQyNjU1NTU1NTU1NTU1NTU1ZjViZjAxY2M3ODE4ZGMKK2VuZHN0cmVhbQorZW5kb2JqCit7e3hyZWZ9fQore3t0cmFpbGVyfX0KK3t7c3RhcnR4cmVmfX0KKyUlRU9GCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9yb3RhdGVkX2ltYWdlLnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL3JvdGF0ZWRfaW1hZ2UucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYjE4MzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9yb3RhdGVkX2ltYWdlLnBkZgpAQCAtMCwwICsxLDY0IEBACislUERGLTEuNworJaDypPQKKzEgMCBvYmogPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvTWVkaWFCb3ggWzAgMCAyMDAgMjAwXQorICAvQ291bnQgMQorICAvS2lkcyBbMyAwIFJdCis+PgorZW5kb2JqCiszIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL0NvbnRlbnRzIDQgMCBSCisgIC9SZXNvdXJjZXMgPDwKKyAgICAvWE9iamVjdCA8PAorICAgICAgL0ltZyA1IDAgUgorICAgID4+CisgID4+Cis+PgorZW5kb2JqCis0IDAgb2JqIDw8CisgIC9MZW5ndGggMzYKKz4+CitzdHJlYW0KK3EKKzMwIC0zMCA0MCA0MCAxMDAgMTAwIGNtCisvSW1nIERvCitRCitlbmRzdHJlYW0KK2VuZG9iagorNSAwIG9iaiA8PAorICAvVHlwZSAvWE9iamVjdAorICAvU3VidHlwZSAvSW1hZ2UKKyAgL1dpZHRoIDUwCisgIC9IZWlnaHQgNTAKKyAgL0JpdHNQZXJDb21wb25lbnQgOAorICAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCCisgIC9GaWx0ZXIgWy9BU0NJSUhleERlY29kZSAvRmxhdGVEZWNvZGVdCisgIC9MZW5ndGggNzEKKz4+CitzdHJlYW0KKzc4OWNlZGMyMzEwZDAwMDAwYzAzYTA3ZjJhYWFiM2VhN2JjZjAzODQyNjU1NTU1NTU1NTU1NTU1ZjViZjAxY2M3ODE4ZGMKK2VuZHN0cmVhbQorZW5kb2JqCit4cmVmCiswIDYKKzAwMDAwMDAwMDAgNjU1MzUgZiAKKzAwMDAwMDAwMTUgMDAwMDAgbiAKKzAwMDAwMDAwNjggMDAwMDAgbiAKKzAwMDAwMDAxNTcgMDAwMDAgbiAKKzAwMDAwMDAyODcgMDAwMDAgbiAKKzAwMDAwMDAzNzQgMDAwMDAgbiAKK3RyYWlsZXIgPDwKKyAgL1Jvb3QgMSAwIFIKKyAgL1NpemUgNgorPj4KK3N0YXJ0eHJlZgorNjQ0CislJUVPRgo=