ZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9kZWJ1Zy5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvYXJjaC9hcm0vbWFjaC16eDI5NzUyMHYzL2RlYnVnLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBiODI2Zjk4Li45MmIyMTNkCi0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9kZWJ1Zy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9kZWJ1Zy5jCkBAIC0xNTUsMTMgKzE1NSwxOSBAQAogCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKIHsKIAlpbnQgZXJyb3IgPSAwOwotCXVuc2lnbmVkIGxvbmcgdGVtcDsJCisJdW5zaWduZWQgaW50IHRlbXA7CisJdm9pZCBfX2lvbWVtICogYWRkcjsKIAotCWlmKHN0cmljdF9zdHJ0b2woYnVmLCAxNiwgKGxvbmcgKikmdGVtcCkpCisJaWYoc3RyaWN0X3N0cnRvbChidWYsIDE2LCAmdGVtcCkpCiAJCWVycm9yID0gLUVJTlZBTDsKIAotCXByX2luZm8oInJlZ1sleF09JXgiLCB0ZW1wLCBpb3JlYWQzMigodm9pZCBfX2lvbWVtICopdGVtcCkpOwogCQkKKwlhZGRyID0gaW9yZW1hcCh0ZW1wLCA0KTsKKwlpZiAoYWRkcikgeworCQlwcl9pbmZvKCJcbnJlZ1sweCU4eF09MHglOHhcbiIsIHRlbXAsIGlvcmVhZDMyKGFkZHIpKTsKKwkJaW91bm1hcChhZGRyKTsKKwl9CisKIAlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IG47CiB9CiAKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9ncGlvLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tYWNoLXp4Mjk3NTIwdjMvZ3Bpby5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZmFkYWE0YS4uY2E3OWM3YwotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tYWNoLXp4Mjk3NTIwdjMvZ3Bpby5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9ncGlvLmMKQEAgLTg2NCw0OCArODY0LDU2IEBACiAgICAgeyJHUElPMTA0X0xURV9UUFVfT1VUMF81IiwJICAgMTA0LAkJR1BJTzEwNF9MVEVfVFBVX09VVDBfNX0sCiAgICAgeyJHUElPMTA0X1dfRzBfR1BJTzIiLAkJICAgMTA0LAkJR1BJTzEwNF9XX0cwX0dQSU8yfSwKICAgICB7IkdQSU8xMDRfR1NNX1RfT1VUX09fMCIsCSAgIDEwNCwJCUdQSU8xMDRfR1NNX1RfT1VUX09fMH0sCisJeyJHUElPMTA0X1JGMF9NSVgiLCAJCSAgIDEwNCwgCSAgR1BJTzEwNF9SRjBfTUlYfSwKIAogICAgIHsiR1BJTzEwNV9HUElPMTA1IiwgCQkgICAxMDUsCQkgICAgIEdQSU8xMDVfR1BJTzEwNX0sCiAgICAgeyJHUElPMTA1X1REX0cwX0dQSU8zIiwJICAgICAgIDEwNSwJICAgIEdQSU8xMDVfVERfRzBfR1BJTzN9LAogICAgIHsiR1BJTzEwNV9MVEVfVFBVX09VVDBfNiIsCSAgIDEwNSwJICAgIEdQSU8xMDVfTFRFX1RQVV9PVVQwXzZ9LAogICAgIHsiR1BJTzEwNV9XX0cwX0dQSU8zIiwJICAgICAgIDEwNSwJICAgIEdQSU8xMDVfV19HMF9HUElPM30sCiAgICAgeyJHUElPMTA1X0dTTV9UX09VVF9PXzEiLAkgICAxMDUsCSAgICBHUElPMTA1X0dTTV9UX09VVF9PXzF9LAorICAgIHsiR1BJTzEwNV9SRjFfTUlYIiwgCQkgICAxMDUsIAkgIEdQSU8xMDVfUkYxX01JWH0sCiAKICAgICB7IkdQSU8xMDZfR1BJTzEwNiIsIAkJICAgMTA2LAkJCSBHUElPMTA2X0dQSU8xMDZ9LAogICAgIHsiR1BJTzEwNl9URF9HMF9HUElPNCIsIAkgICAxMDYsCQkgR1BJTzEwNl9URF9HMF9HUElPNH0sCiAgICAgeyJHUElPMTA2X0xURV9UUFVfT1VUMF83IiwgCSAgIDEwNiwJCSBHUElPMTA2X0xURV9UUFVfT1VUMF83fSwKICAgICB7IkdQSU8xMDZfV19HMF9HUElPNCIsCSAJICAgMTA2LAkJIEdQSU8xMDZfV19HMF9HUElPNH0sCiAgICAgeyJHUElPMTA2X0dTTV9UX09VVF9PXzIiLCAJICAgMTA2LAkJIEdQSU8xMDZfR1NNX1RfT1VUX09fMn0sCisJeyJHUElPMTA2X1JGMl9NSVgiLCAJCSAgIDEwNiwgCSAgR1BJTzEwNl9SRjJfTUlYfSwKIAogICAgIHsiR1BJTzEwN19HUElPMTA3IiwgCQkgICAxMDcsCQkJIEdQSU8xMDdfR1BJTzEwN30sCiAgICAgeyJHUElPMTA3X1REX0cwX0dQSU81IiwgCSAgIDEwNywJCSBHUElPMTA3X1REX0cwX0dQSU81fSwKICAgICB7IkdQSU8xMDdfTFRFX1RQVV9PVVQwXzgiLCAJICAgMTA3LAkJIEdQSU8xMDdfTFRFX1RQVV9PVVQwXzh9LAogICAgIHsiR1BJTzEwN19XX0cwX0dQSU81IiwJIAkgICAxMDcsCQkgR1BJTzEwN19XX0cwX0dQSU81fSwKICAgICB7IkdQSU8xMDdfR1NNX1RfT1VUX09fMyIsIAkgICAxMDcsCQkgR1BJTzEwN19HU01fVF9PVVRfT18zfSwKKwl7IkdQSU8xMDdfUkYzX01JWCIsIAkJICAgMTA3LCAJICBHUElPMTA3X1JGM19NSVh9LAogCiAgICAgeyJHUElPMTA4X0dQSU8xMDgiLCAJCSAgIDEwOCwJCQkgR1BJTzEwOF9HUElPMTA4fSwKICAgICB7IkdQSU8xMDhfVERfRzBfR1BJTzYiLCAJICAgMTA4LAkJIEdQSU8xMDhfVERfRzBfR1BJTzZ9LAogICAgIHsiR1BJTzEwOF9MVEVfVFBVX09VVDBfOSIsIAkgICAxMDgsCQkgR1BJTzEwOF9MVEVfVFBVX09VVDBfOX0sCiAgICAgeyJHUElPMTA4X1dfRzBfR1BJTzYiLAkgCSAgIDEwOCwJCSBHUElPMTA4X1dfRzBfR1BJTzZ9LAogICAgIHsiR1BJTzEwOF9HU01fVF9PVVRfT180IiwgCSAgIDEwOCwJCSBHUElPMTA4X0dTTV9UX09VVF9PXzR9LAorCXsiR1BJTzEwOF9SRjRfTUlYIiwgCQkgICAxMDgsIAkgIEdQSU8xMDhfUkY0X01JWH0sCiAKIAl7IkdQSU8xMDlfR1BJTzEwOSIsIAkJICAgMTA5LAkJCSBHUElPMTA5X0dQSU8xMDl9LAogICAgIHsiR1BJTzEwOV9URF9HMF9HUElPNyIsIAkgICAxMDksCQkgR1BJTzEwOV9URF9HMF9HUElPN30sCiAgICAgeyJHUElPMTA5X0xURV9UUFVfT1VUMF8xMCIsICAgIDEwOSwJCSBHUElPMTA5X0xURV9UUFVfT1VUMF8xMH0sCiAgICAgeyJHUElPMTA5X1dfRzBfR1BJTzciLAkgCSAgIDEwOSwJCSBHUElPMTA5X1dfRzBfR1BJTzd9LAogICAgIHsiR1BJTzEwOV9HU01fVF9PVVRfT181IiwgCSAgIDEwOSwJCSBHUElPMTA5X0dTTV9UX09VVF9PXzV9LAorICAgIHsiR1BJTzEwOV9SRjVfTUlYIiwJCSAgICAgICAxMDksIAkgIEdQSU8xMDlfUkY1X01JWH0sCiAKIAl7IkdQSU8xMTBfR1BJTzExMCIsIAkJICAgMTEwLAkJCSBHUElPMTEwX0dQSU8xMTB9LAogICAgIHsiR1BJTzExMF9URF9HMF9HUElPOCIsIAkgICAxMTAsCQkgR1BJTzExMF9URF9HMF9HUElPOH0sCiAgICAgeyJHUElPMTEwX0xURV9UUFVfT1VUMF8xMSIsICAgIDExMCwJCSBHUElPMTEwX0xURV9UUFVfT1VUMF8xMX0sCiAgICAgeyJHUElPMTEwX1dfRzBfR1BJTzgiLAkgCSAgIDExMCwJCSBHUElPMTEwX1dfRzBfR1BJTzh9LAogICAgIHsiR1BJTzExMF9HU01fVF9PVVRfT182IiwgCSAgIDExMCwJCSBHUElPMTEwX0dTTV9UX09VVF9PXzZ9LAorICAgIHsiR1BJTzExMF9SRjZfTUlYIiwJCSAgICAgICAxMTAsIAkgIEdQSU8xMTBfUkY2X01JWH0sCiAKIAl7IkdQSU8xMTFfR1BJTzExMSIsIAkJICAgMTExLAkJCSBHUElPMTExX0dQSU8xMTF9LAogICAgIHsiR1BJTzExMV9URF9HMF9HUElPOSIsIAkgICAxMTEsCQkgR1BJTzExMV9URF9HMF9HUElPOX0sCiAgICAgeyJHUElPMTExX0xURV9UUFVfT1VUMF8xMiIsICAgIDExMSwJCSBHUElPMTExX0xURV9UUFVfT1VUMF8xMn0sCiAgICAgeyJHUElPMTExX1dfRzBfR1BJTzkiLAkgCSAgIDExMSwJCSBHUElPMTExX1dfRzBfR1BJTzl9LAogICAgIHsiR1BJTzExMV9HU01fVF9PVVRfT183IiwgCSAgIDExMSwJCSBHUElPMTExX0dTTV9UX09VVF9PXzd9LAorCXsiR1BJTzExMV9SRjdfTUlYIiwJCSAgICAgICAxMTEsIAkgIEdQSU8xMTFfUkY3X01JWH0sCiAKIAl7IkdQSU8xMTJfR1BJTzExMiIsIAkJICAgMTEyLAkJCSBHUElPMTEyX0dQSU8xMTJ9LAogICAgIHsiR1BJTzExMl9NSVBJX1JGRkVfQ0xLMCIsIAkgICAxMTIsCQkgR1BJTzExMl9NSVBJX1JGRkVfQ0xLMH0sCkBAIC0xMDI4LDYgKzEwMzYsNyBAQAogCXsiR1BJTzEzM19MVEVfVFBVX09VVDFfMSIsIAkgICAxMzMsIAkJIEdQSU8xMzNfTFRFX1RQVV9PVVQxXzF9LAogCXsiR1BJTzEzM19XX0cxX0dQSU8xIiwJCSAgIDEzMywgCSBHUElPMTMzX1dfRzFfR1BJTzF9LAogCXsiR1BJTzEzM19HU01fVF9PVVRfT18xMiIsCSAgIDEzMywgCSAgR1BJTzEzM19HU01fVF9PVVRfT18xMn0sCisJeyJHUElPMTMzX1JGMTJfTUlYIiwJCSAgIDEzMywgCSAgR1BJTzEzM19SRjEyX01JWH0sCiAKIAl7IkdQSU8xMzRfR1BJTzEzNCIsIAkJICAgMTM0LCAJCSBHUElPMTM0X0dQSU8xMzR9LAogCXsiR1BJTzEzNF9TSU0xX0NMSyIsCQkgICAxMzQsIAkgR1BJTzEzNF9TSU0xX0NMS30sCkBAIC0xMDM1LDYgKzEwNDQsNyBAQAogCXsiR1BJTzEzNF9MVEVfVFBVX09VVDFfMiIsCSAgIDEzNCwgCQkgR1BJTzEzNF9MVEVfVFBVX09VVDFfMn0sCiAJeyJHUElPMTM0X1dfRzFfR1BJTzIiLAkJICAgMTM0LCAJIEdQSU8xMzRfV19HMV9HUElPMn0sCiAJeyJHUElPMTM0X0dTTV9UX09VVF9PXzEzIiwJICAgMTM0LCAJICBHUElPMTM0X0dTTV9UX09VVF9PXzEzfSwKKwl7IkdQSU8xMzRfUkYxM19NSVgiLAkJICAgMTM0LCAJICBHUElPMTM0X1JGMTNfTUlYfSwKIAogCXsiR1BJTzEzNV9HUElPMTM1IiwgCQkgICAxMzUsIAkJIEdQSU8xMzVfR1BJTzEzNX0sCiAJeyJHUElPMTM1X1NJTTFfREFUQSIsCQkgICAxMzUsIAkgR1BJTzEzNV9TSU0xX0RBVEF9LApAQCAtMTA0Miw2ICsxMDUyLDcgQEAKIAl7IkdQSU8xMzVfTFRFX1RQVV9PVVQxXzMiLAkgICAxMzUsIAkJIEdQSU8xMzVfTFRFX1RQVV9PVVQxXzN9LAogCXsiR1BJTzEzNV9XX0cxX0dQSU8zIiwJCSAgIDEzNSwgCSBHUElPMTM1X1dfRzFfR1BJTzN9LAogCXsiR1BJTzEzNV9HU01fVF9PVVRfT18xNCIsCSAgIDEzNSwgCSAgR1BJTzEzNV9HU01fVF9PVVRfT18xNH0sCisJeyJHUElPMTM1X1JGMTRfTUlYIiwJICAgICAgIDEzNSwgCSAgR1BJTzEzNV9SRjE0X01JWH0sCiAKICAgICB7IkdQSU8gRlVOQ1RJT04gTk9UIEVYSVNUIiwgICAgWlgyOV9HUElPX05VTEwsCVpYMjlfR1BJT19OVUxMfSwKIH07CkBAIC0xMDUwLDYgKzEwNjEsOCBAQAogCWludCB0ZW1wID0gMCwgbiA9IDA7CiAKIAl0ZW1wID0gengyOV9ncGlvX2Z1bmN0aW9uX3NlbF9nZXQoZ3Bpbyk7CisJcHJpbnRrKCJHUElPJWQgZnVuY3Rpb24sIGZ1bmNbMHgleF1cbiIsZ3Bpbyx0ZW1wKTsKKwogCiAJZm9yKG49MDsgbjxBUlJBWV9TSVpFKGdwaW9fZGVmKTsgbisrKQogCXsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvYXJjaC9hcm0vbWFjaC16eDI5NzUyMHYzL2luY2x1ZGUvbWFjaC9ncGlvLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAwOWJkZGE3Li5hNTY4OWYyCi0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yOTEsNyArMjkxLDcgQEAKIAlHUElPNjlfRU1NQ19EQVRBMQkJCQk9IDB4NDUwMDEwMDAsCiAJR1BJTzcwX0dQSU83MCAgICAgICAgICAgCQk9IDB4NDYwMDAwMDAsCiAgICAgR1BJTzcwX0tFWV9ST1czICAgCQkJCT0gMHg0NjAwMDAwMSwKLQlHUElPNzBfRU1NQ19EQVRBMgkJCQk9IDB4NDYwMDEwMDAsDQorCUdQSU83MF9FTU1DX0RBVEEyCQkJCT0gMHg0NjAwMTAwMCwKIAlHUElPNzFfR1BJTzcxICAgICAgICAgICAJCT0gMHg0NzAwMDAwMCwKICAgICBHUElPNzFfS0VZX1JPVzQgICAJCQkJPSAweDQ3MDAwMDAxLAogCUdQSU83MV9FTU1DX0RBVEEzCQkJCT0gMHg0NzAwMTAwMCwKQEAgLTM5OCw0MSArMzk4LDQ5IEBACiAJR1BJTzEwNF9MVEVfVFBVX09VVDBfNQkJPSAweDY4MDAxMDA5LAogCUdQSU8xMDRfV19HMF9HUElPMgkJCT0gMHg2ODAwMTAxMSwKIAlHUElPMTA0X0dTTV9UX09VVF9PXzAgICAgICAgICA9IDB4NjgwMDEwMjEsCisJR1BJTzEwNF9SRjBfTUlYICAgICAgICAgCQk9IDB4NjgwMDEwYmEsCiAJR1BJTzEwNV9HUElPMTA1IAkJCQk9IDB4NjkwMDAwMDAsCiAJR1BJTzEwNV9URF9HMF9HUElPMwkJCT0gMHg2OTAwMTA4MSwKIAlHUElPMTA1X0xURV9UUFVfT1VUMF82CQk9IDB4NjkwMDEwMDksCiAJR1BJTzEwNV9XX0cwX0dQSU8zCQkJPSAweDY5MDAxMDExLAogCUdQSU8xMDVfR1NNX1RfT1VUX09fMSAgICAgICAgID0gMHg2OTAwMTAyMSwKKwlHUElPMTA1X1JGMV9NSVgJCQkJPSAweDY5MDAxMGJhLAogCUdQSU8xMDZfR1BJTzEwNiAJCQkJPSAweDZBMDAwMDAwLAogCUdQSU8xMDZfVERfRzBfR1BJTzQJCQk9IDB4NkEwMDEwODEsCiAJR1BJTzEwNl9MVEVfVFBVX09VVDBfNwkJPSAweDZBMDAxMDA5LAogCUdQSU8xMDZfV19HMF9HUElPNAkJCT0gMHg2QTAwMTAxMSwKIAlHUElPMTA2X0dTTV9UX09VVF9PXzIgICAgICAgICA9IDB4NkEwMDEwMjEsCisJR1BJTzEwNl9SRjJfTUlYCQkJCT0gMHg2YTAwMTBiYSwKIAlHUElPMTA3X0dQSU8xMDcgCQkJCT0gMHg2QjAwMDAwMCwKIAlHUElPMTA3X1REX0cwX0dQSU81CQkJPSAweDZCMDAxMDgxLAogCUdQSU8xMDdfTFRFX1RQVV9PVVQwXzgJCT0gMHg2QjAwMTAwOSwKIAlHUElPMTA3X1dfRzBfR1BJTzUJCQk9IDB4NkIwMDEwMTEsCiAJR1BJTzEwN19HU01fVF9PVVRfT18zICAgICAgICAgPSAweDZCMDAxMDIxLAorCUdQSU8xMDdfUkYzX01JWAkJCQk9IDB4NmIwMDEwYmEsCiAJR1BJTzEwOF9HUElPMTA4IAkJCQk9IDB4NkMwMDAwMDAsCiAJR1BJTzEwOF9URF9HMF9HUElPNgkJCT0gMHg2QzAwMTA4MSwKIAlHUElPMTA4X0xURV9UUFVfT1VUMF85CQk9IDB4NkMwMDEwMDksCiAJR1BJTzEwOF9XX0cwX0dQSU82CQkJPSAweDZDMDAxMDExLAogCUdQSU8xMDhfR1NNX1RfT1VUX09fNCAgICAgICAgID0gMHg2QzAwMTAyMSwKKwlHUElPMTA4X1JGNF9NSVgJCQkJPSAweDZjMDAxMGJhLAogCUdQSU8xMDlfR1BJTzEwOSAJCQkJPSAweDZEMDAwMDAwLAogCUdQSU8xMDlfVERfRzBfR1BJTzcJCQk9IDB4NkQwMDEwODEsCiAJR1BJTzEwOV9MVEVfVFBVX09VVDBfMTAJCT0gMHg2RDAwMTAwOSwKIAlHUElPMTA5X1dfRzBfR1BJTzcJCQk9IDB4NkQwMDEwMTEsCiAJR1BJTzEwOV9HU01fVF9PVVRfT181ICAgICAgICAgPSAweDZEMDAxMDIxLAorCUdQSU8xMDlfUkY1X01JWAkJCQk9IDB4NmQwMDEwYmEsCiAJR1BJTzExMF9HUElPMTEwCQkJCT0gMHg2RTAwMDAwMCwKIAlHUElPMTEwX1REX0cwX0dQSU84CQkJPSAweDZFMDAxMDgxLAogCUdQSU8xMTBfTFRFX1RQVV9PVVQwXzExCQk9IDB4NkUwMDEwMDksCiAJR1BJTzExMF9XX0cwX0dQSU84CQkJPSAweDZFMDAxMDExLAogCUdQSU8xMTBfR1NNX1RfT1VUX09fNiAgICAgICAgID0gMHg2RTAwMTAyMSwKKwlHUElPMTEwX1JGNl9NSVgJCQkJPSAweDZlMDAxMGJhLAogCUdQSU8xMTFfR1BJTzExMQkJCQk9IDB4NkYwMDAwMDAsCiAJR1BJTzExMV9URF9HMF9HUElPOQkJCT0gMHg2RjAwMTA4MSwKIAlHUElPMTExX0xURV9UUFVfT1VUMF8xMgkJPSAweDZGMDAxMDA5LAogCUdQSU8xMTFfV19HMF9HUElPOQkJCT0gMHg2RjAwMTAxMSwKIAlHUElPMTExX0dTTV9UX09VVF9PXzcgICAgICAgICA9IDB4NkYwMDEwMjEsCisJR1BJTzExMV9SRjdfTUlYCQkJCT0gMHg2ZjAwMTBiYSwKIAlHUElPMTEyX0dQSU8xMTIJCQkJPSAweDcwMDAwMDAwLAogCUdQSU8xMTJfTUlQSV9SRkZFX0NMSzAJCT0gMHg3MDAwMTAwNiwKIAlHUElPMTEyX1REX0cwX0dQSU8xMAkJCT0gMHg3MDAwMTA4MSwKQEAgLTUzOCwxOCArNTQ2LDIxIEBACiAJR1BJTzEzM19MVEVfVFBVX09VVDFfMQkJPSAweDg1MDAxMDA5LAogCUdQSU8xMzNfV19HMV9HUElPMQkJCT0gMHg4NTAwMTAxMSwKIAlHUElPMTMzX0dTTV9UX09VVF9PXzEyICAgICAgIAk9IDB4ODUwMDEwMjEsCisJR1BJTzEzM19SRjEyX01JWAkJCQk9IDB4ODUwMDEwYmEsCiAJR1BJTzEzNF9HUElPMTM0CQkJCT0gMHg4NjAwMDAwMCwKIAlHUElPMTM0X1NJTTFfQ0xLCQkJCT0gMHg4NjAwMDAwMSwKIAlHUElPMTM0X1REX0cxX0dQSU8yCQkJPSAweDg2MDAxMDgxLAogCUdQSU8xMzRfTFRFX1RQVV9PVVQxXzIJCT0gMHg4NjAwMTAwOSwKIAlHUElPMTM0X1dfRzFfR1BJTzIJCQk9IDB4ODYwMDEwMTEsCiAJR1BJTzEzNF9HU01fVF9PVVRfT18xMyAgICAgICAJPSAweDg2MDAxMDIxLAorCUdQSU8xMzRfUkYxM19NSVgJCQkJPSAweDg2MDAxMGJhLAogCUdQSU8xMzVfR1BJTzEzNQkJCQk9IDB4ODcwMDAwMDAsCiAJR1BJTzEzNV9TSU0xX0RBVEEJCQkJPSAweDg3MDAwMDAxLAogCUdQSU8xMzVfVERfRzFfR1BJTzMJCQk9IDB4ODcwMDEwODEsCiAJR1BJTzEzNV9MVEVfVFBVX09VVDFfMwkJPSAweDg3MDAxMDA5LAogCUdQSU8xMzVfV19HMV9HUElPMwkJCT0gMHg4NzAwMTAxMSwKIAlHUElPMTM1X0dTTV9UX09VVF9PXzE0ICAgICAgIAk9IDB4ODcwMDEwMjEsCisJR1BJTzEzNV9SRjE0X01JWAkJCQk9IDB4ODcwMDEwYmEsCiAKIAogCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tYWNoLXp4Mjk3NTIwdjMvaXJxLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tYWNoLXp4Mjk3NTIwdjMvaXJxLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA0ZWJkOTM3Li40NWE3MDk5Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9pcnEuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tYWNoLXp4Mjk3NTIwdjMvaXJxLmMKQEAgLTMxOCw1ICszMTgsNiBAQAogCQogCXJldHVybiByZXQ7CiB9CisKIHN1YnN5c19pbml0Y2FsbCh6eDI5X2V4dF9pbnRfaW5pdCk7Ci0gCisKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IGE5ZGNiZTIuLmVmMWZhZjggMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMjEsMTIgKzIxLDEyIEBACiAjaWZkZWYgQ09ORklHX01NVQogI2lmZGVmIENPTkZJR19LUFJPQkVTCiBzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncypyZWdzLHVuc2lnbmVkIGludCBmc3Ipe2ludCAKLXJldD0oMHhjOTIrMzg1OC0weDFiYTQpO2lmKCF1c2VyX21vZGUocmVncykpe3ByZWVtcHRfZGlzYWJsZSgpO2lmKGtwcm9iZV9ydW5uaW5nCi0oKSYma3Byb2JlX2ZhdWx0X2hhbmRsZXIocmVncyxmc3IpKXJldD0oMHgxMWMrNDM4My0weDEyM2EpO3ByZWVtcHRfZW5hYmxlKCk7fQorcmV0PSgweDIxMzgrMzE5LTB4MjI3Nyk7aWYoIXVzZXJfbW9kZShyZWdzKSl7cHJlZW1wdF9kaXNhYmxlKCk7aWYoa3Byb2JlX3J1bm5pbmcKKygpJiZrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLGZzcikpcmV0PSgweDQ4YSsyODMxLTB4Zjk4KTtwcmVlbXB0X2VuYWJsZSgpO30KIHJldHVybiByZXQ7fQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzKnJlZ3MsdW5zaWduZWQgaW50IGZzcil7cmV0dXJuCi0oMHgyMmNjKzk2LTB4MjMyYyk7fQorKDB4NWEyKzczODUtMHgyMjdiKTt9CiAjZW5kaWYKIHZvaWQgc2hvd19wdGUoc3RydWN0IG1tX3N0cnVjdCptbSx1bnNpZ25lZCBsb25nIGFkZHIpe3BnZF90KnBnZDtpZighbW0pbW09JgogaW5pdF9tbTtwcmludGsoS0VSTl9BTEVSVCJceDcwXHg2N1x4NjRceDIwXHgzZFx4MjBceDI1XHg3MCIgIlxuIixtbS0+cGdkKTtwZ2Q9CkBAIC0zNCwxMCArMzQsMTAgQEAKICJceDViXHgyNVx4MzBceDM4XHg2Y1x4NzhceDVkXHgyMFx4MmFceDcwXHg2N1x4NjRceDNkXHgyNVx4MzBceDM4XHg2Y1x4NmNceDc4IiwKIGFkZHIsKGxvbmcgbG9uZylwZ2RfdmFsKCpwZ2QpKTtkb3twdWRfdCpwdWQ7cG1kX3QqcG1kO3B0ZV90KnB0ZTtpZihwZ2Rfbm9uZSgqcGdkCiApKWJyZWFrO2lmKHBnZF9iYWQoKnBnZCkpe3ByaW50aygiXHgyOFx4NjJceDYxXHg2NFx4MjkiKTticmVhazt9cHVkPXB1ZF9vZmZzZXQoCi1wZ2QsYWRkcik7aWYoUFRSU19QRVJfUFVEIT0oMHgxMzEyKzM3NjQtMHgyMWM1KSlwcmludGsoCitwZ2QsYWRkcik7aWYoUFRSU19QRVJfUFVEIT0oMHgxY2MrMTMzMi0weDZmZikpcHJpbnRrKAogIlx4MmNceDIwXHgyYVx4NzBceDc1XHg2NFx4M2RceDI1XHgzMFx4MzhceDZjXHg2Y1x4NzgiLChsb25nIGxvbmcpcHVkX3ZhbCgqcHVkKSkKIDtpZihwdWRfbm9uZSgqcHVkKSlicmVhaztpZihwdWRfYmFkKCpwdWQpKXtwcmludGsoIlx4MjhceDYyXHg2MVx4NjRceDI5Iik7YnJlYWs7Ci19cG1kPXBtZF9vZmZzZXQocHVkLGFkZHIpO2lmKFBUUlNfUEVSX1BNRCE9KDB4MTQxMCszNjMxLTB4MjIzZSkpcHJpbnRrKAorfXBtZD1wbWRfb2Zmc2V0KHB1ZCxhZGRyKTtpZihQVFJTX1BFUl9QTUQhPSgweDFlMzQrMTQ5OC0weDI0MGQpKXByaW50aygKICJceDJjXHgyMFx4MmFceDcwXHg2ZFx4NjRceDNkXHgyNVx4MzBceDM4XHg2Y1x4NmNceDc4IiwobG9uZyBsb25nKXBtZF92YWwoKnBtZCkpCiA7aWYocG1kX25vbmUoKnBtZCkpYnJlYWs7aWYocG1kX2JhZCgqcG1kKSl7cHJpbnRrKCJceDI4XHg2Mlx4NjFceDY0XHgyOSIpO2JyZWFrOwogfWlmKFBhZ2VIaWdoTWVtKHBmbl90b19wYWdlKHBtZF92YWwoKnBtZCk+PlBBR0VfU0hJRlQpKSlicmVhaztwdGU9cHRlX29mZnNldF9tYXAKQEAgLTQ3LDE4ICs0NywxOCBAQAogcHJpbnRrKCJceDJjXHgyMFx4MmFceDcwXHg3MFx4NzRceDY1XHgzZFx4MjVceDMwXHgzOFx4NmNceDZjXHg3OCIsKGxvbmcgbG9uZykKIHB0ZV92YWwocHRlW1BURV9IV1RBQkxFX1BUUlNdKSk7CiAjZW5kaWYKLXB0ZV91bm1hcChwdGUpO313aGlsZSgoMHhmOGMrNTU2MS0weDI1NDUpKTtwcmludGsoIlxuIik7fQorcHRlX3VubWFwKHB0ZSk7fXdoaWxlKCgweDRhMiszNzgtMHg2MWMpKTtwcmludGsoIlxuIik7fQogI2Vsc2UJCQkJCQogdm9pZCBzaG93X3B0ZShzdHJ1Y3QgbW1fc3RydWN0Km1tLHVuc2lnbmVkIGxvbmcgYWRkcil7fQogI2VuZGlmCQkJCQkKIHN0YXRpYyB2b2lkIF9fZG9fa2VybmVsX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QqbW0sdW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIAogaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzKXtpZihmaXh1cF9leGNlcHRpb24ocmVncykpcmV0dXJuO2J1c3Rfc3BpbmxvY2tzKAotKDB4MWUzYSsyNS0weDFlNTIpKTtwcmludGsoS0VSTl9BTEVSVAorKDB4ZDYrMTUxNS0weDZjMCkpO3ByaW50ayhLRVJOX0FMRVJUCiAiXHg1NVx4NmVceDYxXHg2Mlx4NmNceDY1XHgyMFx4NzRceDZmXHgyMFx4NjhceDYxXHg2ZVx4NjRceDZjXHg2NVx4MjBceDZiXHg2NVx4NzJceDZlXHg2NVx4NmNceDIwXHgyNVx4NzNceDIwXHg2MVx4NzRceDIwXHg3Nlx4NjlceDcyXHg3NFx4NzVceDYxXHg2Y1x4MjBceDYxXHg2NFx4NjRceDcyXHg2NVx4NzNceDczXHgyMFx4MjVceDMwXHgzOFx4NmNceDc4IiAiXG4iCiAsKGFkZHI8UEFHRV9TSVpFKT8KICJceDRlXHg1NVx4NGNceDRjXHgyMFx4NzBceDZmXHg2OVx4NmVceDc0XHg2NVx4NzJceDIwXHg2NFx4NjVceDcyXHg2NVx4NjZceDY1XHg3Mlx4NjVceDZlXHg2M1x4NjUiCiA6Ilx4NzBceDYxXHg2N1x4NjlceDZlXHg2N1x4MjBceDcyXHg2NVx4NzFceDc1XHg2NVx4NzNceDc0IixhZGRyKTtzaG93X3B0ZShtbSwKLWFkZHIpO2RpZSgiXHg0Zlx4NmZceDcwXHg3MyIscmVncyxmc3IpO2J1c3Rfc3BpbmxvY2tzKCgweDE0MWYrMTgxLTB4MTRkNCkpOworYWRkcik7ZGllKCJceDRmXHg2Zlx4NzBceDczIixyZWdzLGZzcik7YnVzdF9zcGlubG9ja3MoKDB4MzJjKzQwODMtMHgxMzFmKSk7CiBkb19leGl0KFNJR0tJTEwpO31zdGF0aWMgdm9pZCBfX2RvX3VzZXJfZmF1bHQoc3RydWN0IHRhc2tfc3RydWN0KnRzayx1bnNpZ25lZCAKIGxvbmcgYWRkcix1bnNpZ25lZCBpbnQgZnNyLHVuc2lnbmVkIGludCBzaWcsaW50IGNvZGUsc3RydWN0IHB0X3JlZ3MqcmVncyl7c3RydWN0CiAgc2lnaW5mbyBzaTsKQEAgLTY5LDcgKzY5LDcgQEAKICx0c2stPmNvbW0sc2lnLGFkZHIsZnNyKTtzaG93X3B0ZSh0c2stPm1tLGFkZHIpO3Nob3dfcmVncyhyZWdzKTt9CiAjZW5kaWYKIHRzay0+dGhyZWFkLmFkZHJlc3M9YWRkcjt0c2stPnRocmVhZC5lcnJvcl9jb2RlPWZzcjt0c2stPnRocmVhZC50cmFwX25vPQotKDB4YTY1KzQ2ODktMHgxY2E4KTtzaS5zaV9zaWdubz1zaWc7c2kuc2lfZXJybm89KDB4ZjU1KzI1NDQtMHgxOTQ1KTtzaS5zaV9jb2RlPQorKDB4MTQ1Yys5MzItMHgxN2YyKTtzaS5zaV9zaWdubz1zaWc7c2kuc2lfZXJybm89KDB4NDBmKzMxODUtMHgxMDgwKTtzaS5zaV9jb2RlPQogY29kZTtzaS5zaV9hZGRyPSh2b2lkIF9fdXNlciopYWRkcjtmb3JjZV9zaWdfaW5mbyhzaWcsJnNpLHRzayk7fXZvaWQgZG9fYmFkX2FyZWEKICh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzKXtzdHJ1Y3QgdGFza19zdHJ1Y3QqdHNrCiA9Y3VycmVudDtzdHJ1Y3QgbW1fc3RydWN0Km1tPXRzay0+YWN0aXZlX21tO2lmKHVzZXJfbW9kZShyZWdzKSlfX2RvX3VzZXJfZmF1bHQoCkBAIC05MSw5ICs5MSw5IEBACiBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCBpbnQgZnNyLHN0cnVjdCAKIHB0X3JlZ3MqcmVncyl7c3RydWN0IHRhc2tfc3RydWN0KnRzaztzdHJ1Y3QgbW1fc3RydWN0Km1tO2ludCBmYXVsdCxzaWcsY29kZTtpbnQgCiB3cml0ZT1mc3ImRlNSX1dSSVRFO3Vuc2lnbmVkIGludCBmbGFncz1GQVVMVF9GTEFHX0FMTE9XX1JFVFJZfAotRkFVTFRfRkxBR19LSUxMQUJMRXwod3JpdGU/RkFVTFRfRkxBR19XUklURTooMHhlYjQrMzcyLTB4MTAyOCkpO2lmKAotbm90aWZ5X3BhZ2VfZmF1bHQocmVncyxmc3IpKXJldHVybigweDExMTcrNTIxNy0weDI1NzgpO3Rzaz1jdXJyZW50O21tPXRzay0+bW07aWYKLShpbnRlcnJ1cHRzX2VuYWJsZWQocmVncykpbG9jYWxfaXJxX2VuYWJsZSgpO2lmKCFtbXx8cGFnZWZhdWx0X2Rpc2FibGVkKCkpZ290byAKK0ZBVUxUX0ZMQUdfS0lMTEFCTEV8KHdyaXRlP0ZBVUxUX0ZMQUdfV1JJVEU6KDB4ZDgxKzI3OTctMHgxODZlKSk7aWYoCitub3RpZnlfcGFnZV9mYXVsdChyZWdzLGZzcikpcmV0dXJuKDB4N2U5KzQ0NDUtMHgxOTQ2KTt0c2s9Y3VycmVudDttbT10c2stPm1tO2lmKAoraW50ZXJydXB0c19lbmFibGVkKHJlZ3MpKWxvY2FsX2lycV9lbmFibGUoKTtpZighbW18fHBhZ2VmYXVsdF9kaXNhYmxlZCgpKWdvdG8gCiBub19jb250ZXh0O2lmKCFkb3duX3JlYWRfdHJ5bG9jaygmbW0tPm1tYXBfc2VtKSl7aWYoIXVzZXJfbW9kZShyZWdzKSYmIQogc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+QVJNX3BjKSlnb3RvIG5vX2NvbnRleHQ7cmV0cnk6ZG93bl9yZWFkKCZtbS0+CiBtbWFwX3NlbSk7fWVsc2V7bWlnaHRfc2xlZXAoKTsKQEAgLTEwMSwyMyArMTAxLDIzIEBACiBpZighdXNlcl9tb2RlKHJlZ3MpJiYhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+QVJNX3BjKSlnb3RvIG5vX2NvbnRleHQ7CiAjZW5kaWYKIH1mYXVsdD1fX2RvX3BhZ2VfZmF1bHQobW0sYWRkcixmc3IsZmxhZ3MsdHNrKTtpZigoZmF1bHQmVk1fRkFVTFRfUkVUUlkpJiYKLWZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKXJldHVybigweDcxYis2NTg4LTB4MjBkNyk7cGVyZl9zd19ldmVudCgKLVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsKDB4MTBlNCs0MzU4LTB4MjFlOSkscmVncyxhZGRyKTtpZighKGZhdWx0JgorZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpcmV0dXJuKDB4MjM5KzI5NjEtMHhkY2EpO3BlcmZfc3dfZXZlbnQoCitQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCgweDExMjErMTUyNS0weDE3MTUpLHJlZ3MsYWRkcik7aWYoIShmYXVsdCYKIFZNX0ZBVUxUX0VSUk9SKSYmZmxhZ3MmRkFVTFRfRkxBR19BTExPV19SRVRSWSl7aWYoZmF1bHQmVk1fRkFVTFRfTUFKT1Ipe3Rzay0+Ci1tYWpfZmx0Kys7cGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwoMHgxMmRiKzI1OTctMHgxY2ZmKSxyZWdzLAorbWFqX2ZsdCsrO3BlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosKDB4NmYwKzE2NzctMHhkN2MpLHJlZ3MsCiBhZGRyKTt9ZWxzZXt0c2stPm1pbl9mbHQrKztwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUlOLAotKDB4MjAyZCs0NjctMHgyMWZmKSxyZWdzLGFkZHIpO31pZihmYXVsdCZWTV9GQVVMVF9SRVRSWSl7ZmxhZ3MmPX4KKygweDhjNys3Mzk5LTB4MjVhZCkscmVncyxhZGRyKTt9aWYoZmF1bHQmVk1fRkFVTFRfUkVUUlkpe2ZsYWdzJj1+CiBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZO2dvdG8gcmV0cnk7fX11cF9yZWFkKCZtbS0+bW1hcF9zZW0pO2lmKGxpa2VseSghKGZhdWx0JigKLVZNX0ZBVUxUX0VSUk9SfFZNX0ZBVUxUX0JBRE1BUHxWTV9GQVVMVF9CQURBQ0NFU1MpKSkpcmV0dXJuKDB4MTEzKzI4MDgtMHhjMGIpO2lmCi0oZmF1bHQmVk1fRkFVTFRfT09NKXtwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpO3JldHVybigweDk0MSs3ODAtMHhjNGQpO31pZighCitWTV9GQVVMVF9FUlJPUnxWTV9GQVVMVF9CQURNQVB8Vk1fRkFVTFRfQkFEQUNDRVNTKSkpKXJldHVybigweDZmYSs3NjgtMHg5ZmEpO2lmKAorZmF1bHQmVk1fRkFVTFRfT09NKXtwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpO3JldHVybigweGI3Mis0ODExLTB4MWUzZCk7fWlmKCEKIHVzZXJfbW9kZShyZWdzKSlnb3RvIG5vX2NvbnRleHQ7aWYoZmF1bHQmVk1fRkFVTFRfU0lHQlVTKXtzaWc9U0lHQlVTO2NvZGU9CiBCVVNfQURSRVJSO31lbHNle3NpZz1TSUdTRUdWO2NvZGU9ZmF1bHQ9PVZNX0ZBVUxUX0JBREFDQ0VTUz9TRUdWX0FDQ0VSUjoKIFNFR1ZfTUFQRVJSO31fX2RvX3VzZXJfZmF1bHQodHNrLGFkZHIsZnNyLHNpZyxjb2RlLHJlZ3MpO3JldHVybgotKDB4YjU1KzI4MjYtMHgxNjVmKTtub19jb250ZXh0Ol9fZG9fa2VybmVsX2ZhdWx0KG1tLGFkZHIsZnNyLHJlZ3MpO3JldHVybgotKDB4MzBhKzMzMzQtMHgxMDEwKTt9CisoMHg1YWQrNzEyOS0weDIxODYpO25vX2NvbnRleHQ6X19kb19rZXJuZWxfZmF1bHQobW0sYWRkcixmc3IscmVncyk7cmV0dXJuCisoMHg3OTcrNzU5Mi0weDI1M2YpO30KICNlbHNlCQkJCQkKIHN0YXRpYyBpbnQgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzCi0pe3JldHVybigweDFkZjArMjAxMS0weDI1Y2IpO30KKyl7cmV0dXJuKDB4MjJjMCs4MzMtMHgyNjAxKTt9CiAjZW5kaWYJCQkJCQogI2lmZGVmIENPTkZJR19NTVUKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGRvX3RyYW5zbGF0aW9uX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCBpbnQgZnNyLApAQCAtMTMwLDIxICsxMzAsMjEgQEAKIGJhZF9hcmVhO2lmKCFwdWRfcHJlc2VudCgqcHVkKSlzZXRfcHVkKHB1ZCwqcHVkX2spO3BtZD1wbWRfb2Zmc2V0KHB1ZCxhZGRyKTsKIHBtZF9rPXBtZF9vZmZzZXQocHVkX2ssYWRkcik7CiAjaWZkZWYgQ09ORklHX0FSTV9MUEFFCi1pbmRleD0oMHhmOCs0MTk3LTB4MTE1ZCk7CitpbmRleD0oMHgyMTY3KzE0MzQtMHgyNzAxKTsKICNlbHNlCi1pbmRleD0oYWRkcj4+U0VDVElPTl9TSElGVCkmKDB4MTI5KzU2MzMtMHgxNzI5KTsKK2luZGV4PShhZGRyPj5TRUNUSU9OX1NISUZUKSYoMHgxNjVhKzI0OTQtMHgyMDE3KTsKICNlbmRpZgogaWYocG1kX25vbmUocG1kX2tbaW5kZXhdKSlnb3RvIGJhZF9hcmVhO2NvcHlfcG1kKHBtZCxwbWRfayk7cmV0dXJuCi0oMHg2MTUrNDY4My0weDE4NjApO2JhZF9hcmVhOmRvX2JhZF9hcmVhKGFkZHIsZnNyLHJlZ3MpO3JldHVybgotKDB4MTk2NCsyMzk5LTB4MjJjMyk7fQorKDB4MTFhYiszMTUxLTB4MWRmYSk7YmFkX2FyZWE6ZG9fYmFkX2FyZWEoYWRkcixmc3IscmVncyk7cmV0dXJuCisoMHgyNGY0KzUzOC0weDI3MGUpO30KICNlbHNlCQkJCQkKIHN0YXRpYyBpbnQgZG9fdHJhbnNsYXRpb25fZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3Isc3RydWN0IAotcHRfcmVncypyZWdzKXtyZXR1cm4oMHg2NzUrNjAxOC0weDFkZjcpO30KK3B0X3JlZ3MqcmVncyl7cmV0dXJuKDB4MTI0YysyNzk3LTB4MWQzOSk7fQogI2VuZGlmCQkJCQkKIHN0YXRpYyBpbnQgZG9fc2VjdF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzCiApe2lmKGludGVycnVwdHNfZW5hYmxlZChyZWdzKSlsb2NhbF9pcnFfZW5hYmxlKCk7ZG9fYmFkX2FyZWEoYWRkcixmc3IscmVncyk7Ci1yZXR1cm4oMHhmOCsxMzEyLTB4NjE4KTt9c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3IsCi1zdHJ1Y3QgcHRfcmVncypyZWdzKXtyZXR1cm4oMHg3NWIrMzQxMS0weDE0YWQpO31zdHJ1Y3QgZnNyX2luZm97aW50KCpmbikoCityZXR1cm4oMHgxMTgwKzM3NjUtMHgyMDM1KTt9c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCAKK2ZzcixzdHJ1Y3QgcHRfcmVncypyZWdzKXtyZXR1cm4oMHgxOTYwKzE0MTYtMHgxZWU3KTt9c3RydWN0IGZzcl9pbmZve2ludCgqZm4pKAogdW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyk7aW50IHNpZztpbnQgY29kZTtjb25zdCAKIGNoYXIqbmFtZTt9OwogI2lmZGVmIENPTkZJR19BUk1fTFBBRQpAQCAtMTUzLDQyICsxNTMsNDIgQEAKICNpbmNsdWRlICJmc3ItMmxldmVsLmMiCiAjZW5kaWYKIHZvaWQgX19pbml0IGhvb2tfZmF1bHRfY29kZShpbnQgbnIsaW50KCpmbikodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBpbnQsc3RydWN0IAotcHRfcmVncyopLGludCBzaWcsaW50IGNvZGUsY29uc3QgY2hhcipuYW1lKXtpZihucjwoMHgxOTc0KzM2OC0weDFhZTQpfHxucj49CitwdF9yZWdzKiksaW50IHNpZyxpbnQgY29kZSxjb25zdCBjaGFyKm5hbWUpe2lmKG5yPCgweGQyNSszMzUxLTB4MWEzYyl8fG5yPj0KIEFSUkFZX1NJWkUoZnNyX2luZm8pKUJVRygpO2Zzcl9pbmZvW25yXS5mbj1mbjtmc3JfaW5mb1tucl0uc2lnPXNpZztmc3JfaW5mb1tucl0uCiBjb2RlPWNvZGU7ZnNyX2luZm9bbnJdLm5hbWU9bmFtZTt9CiAjaWZkZWYgQ09ORklHX01PREVNX0NPREVfSVNfTUFQUElORwogc3RhdGljIERFQ0xBUkVfUldTRU0oc2hyaW5rZXJfcndzZW0pO2F0b21pY190IF9jb2RlX3BhZ2VfY291bnQ9QVRPTUlDX0lOSVQoCi0oMHgxNjlmKzQwMjgtMHgyNjViKSk7c3RydWN0IGFkZHJfaW5mb3tzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7dW5zaWduZWQgbG9uZyB2YWRkcgorKDB4MTZhYisyMjUxLTB4MWY3NikpO3N0cnVjdCBhZGRyX2luZm97c3RydWN0IGxpc3RfaGVhZCBub2RlO3Vuc2lnbmVkIGxvbmcgdmFkZHIKIDt1bnNpZ25lZCBsb25nIGthZGRyO3Vuc2lnbmVkIGxvbmcgcGFnZV9pbmRleDt9O2VudW0gbW9kZW1fYWNjZXNzX3RlY2hub2xvZ3l7R1NNCi09KDB4ZjIrMTA1LTB4MTViKSxVVFJBTj0oMHgxMmFhKzI2MjktMHgxY2VlKSxMVEU9KDB4YWU4KzQ2NTItMHgxZDEyKSxDT009Ci0oMHgxYzUwKzEwNjItMHgyMDczKSxOUl9NT0RFTV9BQ0NFU1M9KDB4NDZmKzQ4NDMtMHgxNzU2KX07c3RydWN0IGxpc3RfaGVhZCAKKz0oMHg2MCs4MjY4LTB4MjBhYyksVVRSQU49KDB4ZDQ0Kzk5MS0weDExMjIpLExURT0oMHhkNmIrNDMyMy0weDFlNGMpLENPTT0KKygweDM0NysyOTg4LTB4ZWYwKSxOUl9NT0RFTV9BQ0NFU1M9KDB4MWRjKzcwOTktMHgxZDkzKX07c3RydWN0IGxpc3RfaGVhZCAKIG1vZGVtX3BhZ2VfbGlzdFtOUl9NT0RFTV9BQ0NFU1NdPXtMSVNUX0hFQURfSU5JVChtb2RlbV9wYWdlX2xpc3RbCi0oMHhlYjErNDIzMi0weDFmMzkpXSksTElTVF9IRUFEX0lOSVQobW9kZW1fcGFnZV9saXN0WygweDNhNisxNzAzLTB4YTRjKV0pLAotTElTVF9IRUFEX0lOSVQobW9kZW1fcGFnZV9saXN0WygweDdiYys1MzktMHg5ZDUpXSksTElTVF9IRUFEX0lOSVQoCi1tb2RlbV9wYWdlX2xpc3RbKDB4MjRhYys1MTUtMHgyNmFjKV0pLH07dW5zaWduZWQgaW50IHBhZ2VfdXNlZFsoMHgzYSsxNS0weDIxKV07Ci1zdHJ1Y3QgY29tcGxldGlvbiBwYWdlX2NvbXBsZXRpb25bKDB4MWExKzY0NTEtMHgxYWFjKSooMHgxMzJiKzMzNTYtMHgyMDI3KV07Ci1zdGF0aWMgdm9pZCB1bm1hcF9wdGVfcmFuZ2UocG1kX3QqcG1kLHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCBsb25nIGVuZCl7Ci1wdGVfdCpwdGU7cHRlPXB0ZV9vZmZzZXRfa2VybmVsKHBtZCxhZGRyKTtkb3twdGVfdCBwdGVudD1wdGVwX2dldF9hbmRfY2xlYXIoJgotaW5pdF9tbSxhZGRyLHB0ZSk7V0FSTl9PTighcHRlX25vbmUocHRlbnQpJiYhcHRlX3ByZXNlbnQocHRlbnQpKTt9d2hpbGUocHRlKyssCi1hZGRyKz1QQUdFX1NJWkUsYWRkciE9ZW5kKTt9c3RhdGljIHZvaWQgdW5tYXBfcG1kX3JhbmdlKHB1ZF90KnB1ZCx1bnNpZ25lZCBsb25nIAotYWRkcix1bnNpZ25lZCBsb25nIGVuZCl7cG1kX3QqcG1kO3Vuc2lnbmVkIGxvbmcgbmV4dDtwbWQ9cG1kX29mZnNldChwdWQsYWRkcik7ZG8KLXtuZXh0PXBtZF9hZGRyX2VuZChhZGRyLGVuZCk7aWYocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpY29udGludWU7Ci11bm1hcF9wdGVfcmFuZ2UocG1kLGFkZHIsbmV4dCk7fXdoaWxlKHBtZCsrLGFkZHI9bmV4dCxhZGRyIT1lbmQpO31zdGF0aWMgdm9pZCAKLXVubWFwX3B1ZF9yYW5nZShwZ2RfdCpwZ2QsdW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGxvbmcgZW5kKXtwdWRfdCpwdWQ7Ci11bnNpZ25lZCBsb25nIG5leHQ7cHVkPXB1ZF9vZmZzZXQocGdkLGFkZHIpO2Rve25leHQ9cHVkX2FkZHJfZW5kKGFkZHIsZW5kKTtpZigKLXB1ZF9ub25lX29yX2NsZWFyX2JhZChwdWQpKWNvbnRpbnVlO3VubWFwX3BtZF9yYW5nZShwdWQsYWRkcixuZXh0KTt9d2hpbGUocHVkKyssCi1hZGRyPW5leHQsYWRkciE9ZW5kKTt9c3RhdGljIHZvaWQgdW5tYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgCi1sb25nIGVuZCl7cGdkX3QqcGdkO3Vuc2lnbmVkIGxvbmcgbmV4dDtCVUdfT04oYWRkcj49ZW5kKTtwZ2Q9cGdkX29mZnNldF9rKGFkZHIpOwotZG97bmV4dD1wZ2RfYWRkcl9lbmQoYWRkcixlbmQpO2lmKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKWNvbnRpbnVlOwotdW5tYXBfcHVkX3JhbmdlKHBnZCxhZGRyLG5leHQpO313aGlsZShwZ2QrKyxhZGRyPW5leHQsYWRkciE9ZW5kKTt9dm9pZCAKLXNocmlua19tb2RlbV9tZW0odW5zaWduZWQgaW50IGFjY2Vzc190eXBlKXtpbnQgaT0oMHgxOTZkKzI2MTAtMHgyMzlmKTt1bnNpZ25lZCAKKygweDIyNSs1MDM1LTB4MTVkMCldKSxMSVNUX0hFQURfSU5JVChtb2RlbV9wYWdlX2xpc3RbKDB4MjUzMSs0NjEtMHgyNmZkKV0pLAorTElTVF9IRUFEX0lOSVQobW9kZW1fcGFnZV9saXN0WygweDkzZCs2Mzg2LTB4MjIyZCldKSxMSVNUX0hFQURfSU5JVCgKK21vZGVtX3BhZ2VfbGlzdFsoMHgxNjQ4KzI1ODgtMHgyMDYxKV0pLH07dW5zaWduZWQgaW50IHBhZ2VfdXNlZFsKKygweDFmNmYrMzgtMHgxZjZkKV07c3RydWN0IGNvbXBsZXRpb24gcGFnZV9jb21wbGV0aW9uWygweDZhNCs2ODM5LTB4MjEzMykqCisoMHgxMzBjKzE1OC0weDEzOGEpXTtzdGF0aWMgdm9pZCB1bm1hcF9wdGVfcmFuZ2UocG1kX3QqcG1kLHVuc2lnbmVkIGxvbmcgYWRkciwKK3Vuc2lnbmVkIGxvbmcgZW5kKXtwdGVfdCpwdGU7cHRlPXB0ZV9vZmZzZXRfa2VybmVsKHBtZCxhZGRyKTtkb3twdGVfdCBwdGVudD0KK3B0ZXBfZ2V0X2FuZF9jbGVhcigmaW5pdF9tbSxhZGRyLHB0ZSk7V0FSTl9PTighcHRlX25vbmUocHRlbnQpJiYhcHRlX3ByZXNlbnQoCitwdGVudCkpO313aGlsZShwdGUrKyxhZGRyKz1QQUdFX1NJWkUsYWRkciE9ZW5kKTt9c3RhdGljIHZvaWQgdW5tYXBfcG1kX3JhbmdlKAorcHVkX3QqcHVkLHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCBsb25nIGVuZCl7cG1kX3QqcG1kO3Vuc2lnbmVkIGxvbmcgbmV4dDtwbWQKKz1wbWRfb2Zmc2V0KHB1ZCxhZGRyKTtkb3tuZXh0PXBtZF9hZGRyX2VuZChhZGRyLGVuZCk7aWYocG1kX25vbmVfb3JfY2xlYXJfYmFkKAorcG1kKSljb250aW51ZTt1bm1hcF9wdGVfcmFuZ2UocG1kLGFkZHIsbmV4dCk7fXdoaWxlKHBtZCsrLGFkZHI9bmV4dCxhZGRyIT1lbmQpO30KK3N0YXRpYyB2b2lkIHVubWFwX3B1ZF9yYW5nZShwZ2RfdCpwZ2QsdW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGxvbmcgZW5kKXsKK3B1ZF90KnB1ZDt1bnNpZ25lZCBsb25nIG5leHQ7cHVkPXB1ZF9vZmZzZXQocGdkLGFkZHIpO2Rve25leHQ9cHVkX2FkZHJfZW5kKGFkZHIsCitlbmQpO2lmKHB1ZF9ub25lX29yX2NsZWFyX2JhZChwdWQpKWNvbnRpbnVlO3VubWFwX3BtZF9yYW5nZShwdWQsYWRkcixuZXh0KTt9Cit3aGlsZShwdWQrKyxhZGRyPW5leHQsYWRkciE9ZW5kKTt9c3RhdGljIHZvaWQgdW5tYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIAorYWRkcix1bnNpZ25lZCBsb25nIGVuZCl7cGdkX3QqcGdkO3Vuc2lnbmVkIGxvbmcgbmV4dDtCVUdfT04oYWRkcj49ZW5kKTtwZ2Q9CitwZ2Rfb2Zmc2V0X2soYWRkcik7ZG97bmV4dD1wZ2RfYWRkcl9lbmQoYWRkcixlbmQpO2lmKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQorY29udGludWU7dW5tYXBfcHVkX3JhbmdlKHBnZCxhZGRyLG5leHQpO313aGlsZShwZ2QrKyxhZGRyPW5leHQsYWRkciE9ZW5kKTt9dm9pZCAKK3Nocmlua19tb2RlbV9tZW0odW5zaWduZWQgaW50IGFjY2Vzc190eXBlKXtpbnQgaT0oMHg1NGErNDc4Ni0weDE3ZmMpO3Vuc2lnbmVkIAogbG9uZyB2YWRkcjtzdHJ1Y3QgYWRkcl9pbmZvKmFkZHIsKnRtcF9hZGRyO3N0cnVjdCBsaXN0X2hlYWQgdG1wX3BhZ2VfbGlzdDtmb3IoaT0KLSgweDZmNisyNDg4LTB4MTBhZSk7aTxOUl9NT0RFTV9BQ0NFU1M7aSsrKXtpZihpPT1hY2Nlc3NfdHlwZSljb250aW51ZTtkb3duX3dyaXRlCisoMHgzMWQrODkzOS0weDI2MDgpO2k8TlJfTU9ERU1fQUNDRVNTO2krKyl7aWYoaT09YWNjZXNzX3R5cGUpY29udGludWU7ZG93bl93cml0ZQogKCZzaHJpbmtlcl9yd3NlbSk7bGlzdF9yZXBsYWNlX2luaXQoJm1vZGVtX3BhZ2VfbGlzdFtpXSwmdG1wX3BhZ2VfbGlzdCk7dXBfd3JpdGUKICgmc2hyaW5rZXJfcndzZW0pO2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLHRtcF9hZGRyLCZ0bXBfcGFnZV9saXN0LG5vZGUpewogbGlzdF9kZWxfaW5pdCgmYWRkci0+bm9kZSk7cGFnZV9jb21wbGV0aW9uW2FkZHItPnBhZ2VfaW5kZXhdLmRvbmU9Ci0oMHgxMjk2KzExNzMtMHgxNzJiKTtwYWdlX3VzZWRbYWRkci0+cGFnZV9pbmRleC9CSVRTX1BFUl9MT05HXSY9figKLSgweGQxMys1NjQ4LTB4MjMyMik8PChhZGRyLT5wYWdlX2luZGV4JUJJVFNfUEVSX0xPTkcpKTt2YWRkcj1hZGRyLT52YWRkciYKKygweDIxZDUrMzM1LTB4MjMyNCk7cGFnZV91c2VkW2FkZHItPnBhZ2VfaW5kZXgvQklUU19QRVJfTE9OR10mPX4oCisoMHgxMDQ4KzM2NzItMHgxZTlmKTw8KGFkZHItPnBhZ2VfaW5kZXglQklUU19QRVJfTE9ORykpO3ZhZGRyPWFkZHItPnZhZGRyJgogUEFHRV9NQVNLO2lmKHZhZGRyPGNwcHNfZ2xvYmFsX3Zhci5jcGtvX3RleHRfc3RhcnR8fHZhZGRyPmNwcHNfZ2xvYmFsX3Zhci4KIG1vZGVtX3RleHRfZW5kKXtwYW5pYygKICJceDYxXHg2NFx4NjRceDcyXHg1Zlx4NjlceDZlXHg2Nlx4NmZceDNhXHgyMFx4MjVceDMwXHgzOFx4NzhceDIwXHg2OVx4NzNceDIwXHgyMFx4NjRceDY1XHg3M1x4NzRceDcyXHg2Zlx4NzkiCkBAIC0xOTYsMTQgKzE5NiwxNCBAQAogUEFHRV9TSVpFKTtmbHVzaF90bGJfa2VybmVsX3JhbmdlKHZhZGRyLHZhZGRyK1BBR0VfU0laRSk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQogdW5zaWduZWQgaW50IGZsYWdzO2xvY2FsX2lycV9zYXZlKGZsYWdzKTtzZXRfbWVtb3J5X3J3KGFkZHItPmthZGRyLAotKDB4MjM2KzM4NzYtMHgxMTU5KSk7bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworKDB4MTI1NCs0NTQ3LTB4MjQxNikpO2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgogZnJlZV9wYWdlKGFkZHItPmthZGRyKTtrZnJlZShhZGRyKTthdG9taWNfZGVjKCZfY29kZV9wYWdlX2NvdW50KTt9O319CiBFWFBPUlRfU1lNQk9MKHNocmlua19tb2RlbV9tZW0pO3BoeXNfYWRkcl90IHZpcnRfaXNfbWFwcGluZyh1bnNpZ25lZCBsb25nIGFkZHIpewogcGdkX3QqcGdkO3BtZF90KnBtZDtwdGVfdCpwdGVwLHB0ZTt1bnNpZ25lZCBsb25nIHBmbjtwZ2Q9cGdkX29mZnNldF9rKGFkZHIpO2lmKCEKIHBnZF9ub25lKCpwZ2QpKXtwbWQ9cG1kX29mZnNldChwZ2QsYWRkcik7aWYoIXBtZF9ub25lKCpwbWQpKXtwdGVwPXB0ZV9vZmZzZXRfbWFwCiAocG1kLGFkZHIpO3B0ZT0qcHRlcDtpZihwdGVfcHJlc2VudChwdGUpKXtwZm49cHRlX3BmbihwdGUpO3JldHVybiBfX3Bmbl90b19waHlzKAotcGZuKTt9fX1yZXR1cm4oMHgxOGI0KzExNS0weDE5MjcpO31zdGF0aWMgaW50IHN5bmNfcGdkKHVuc2lnbmVkIGxvbmcgYWRkciwKK3Bmbik7fX19cmV0dXJuKDB4NWQrNTY2Mi0weDE2N2IpO31zdGF0aWMgaW50IHN5bmNfcGdkKHVuc2lnbmVkIGxvbmcgYWRkciwKIHVuc2lnbmVkIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyl7dW5zaWduZWQgaW50IGluZGV4O3BnZF90KnBnZCwqcGdkX2s7cHVkX3QqCiBwdWQsKnB1ZF9rO3BtZF90KnBtZCwqcG1kX2s7aW5kZXg9cGdkX2luZGV4KGFkZHIpO3BnZD1jcHVfZ2V0X3BnZCgpK2luZGV4O3BnZF9rPQogaW5pdF9tbS5wZ2QraW5kZXg7aWYocGdkX25vbmUoKnBnZF9rKSlnb3RvIGJhZF9hcmVhO2lmKCFwZ2RfcHJlc2VudCgqcGdkKSkKQEAgLTIxMSwxMyArMjExLDEzIEBACiBwdWRfbm9uZSgqcHVkX2spKWdvdG8gYmFkX2FyZWE7aWYoIXB1ZF9wcmVzZW50KCpwdWQpKXNldF9wdWQocHVkLCpwdWRfayk7cG1kPQogcG1kX29mZnNldChwdWQsYWRkcik7cG1kX2s9cG1kX29mZnNldChwdWRfayxhZGRyKTsKICNpZmRlZiBDT05GSUdfQVJNX0xQQUUKLWluZGV4PSgweDEyZmErMzgwMS0weDIxZDMpOworaW5kZXg9KDB4OTRjKzE4MzEtMHgxMDczKTsKICNlbHNlCi1pbmRleD0oYWRkcj4+U0VDVElPTl9TSElGVCkmKDB4OWI0Kzg5NS0weGQzMik7CitpbmRleD0oYWRkcj4+U0VDVElPTl9TSElGVCkmKDB4MmRmKzQ5Mi0weDRjYSk7CiAjZW5kaWYKIGlmKHBtZF9ub25lKHBtZF9rW2luZGV4XSkpZ290byBiYWRfYXJlYTtjb3B5X3BtZChwbWQscG1kX2spO3JldHVybgotKDB4MTZmMSsyNzgwLTB4MjFjZCk7YmFkX2FyZWE6ZG9fYmFkX2FyZWEoYWRkcixmc3IscmVncyk7cmV0dXJuCi0oMHhlNjQrNjA5Ni0weDI2MzQpO311bnNpZ25lZCBsb25nKnJlYWRfY29kZV9maWxlKHVuc2lnbmVkIGxvbmcgcGFnZV9pbmRleCl7CisoMHhmY2ErNTQwMy0weDI0ZTUpO2JhZF9hcmVhOmRvX2JhZF9hcmVhKGFkZHIsZnNyLHJlZ3MpO3JldHVybgorKDB4OTMxKzI3NDQtMHgxM2U5KTt9dW5zaWduZWQgbG9uZypyZWFkX2NvZGVfZmlsZSh1bnNpZ25lZCBsb25nIHBhZ2VfaW5kZXgpewogdW5zaWduZWQgbG9uZypjb2RlX2J1Zjtzc2l6ZV90IHJlc3VsdDtjb2RlX2J1Zj1nZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7aWYoIQogY29kZV9idWYpcGFuaWMoCiAiXHg2ZFx4NjVceDZkXHg2NVx4NmZceDcyXHg3OVx4MjBceDZlXHg2Zlx4NzRceDIwXHg2NVx4NmVceDZmXHg3NVx4NjdceDY4XHgyMVx4MjEiCkBAIC0yMjYsODAgKzIyNiw4MCBAQAogIlx4NmZceDcwXHg2NVx4NmVceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7fQogbW1fc2VnbWVudF90IG9sZF9mcztvbGRfZnM9Z2V0X2ZzKCk7c2V0X2ZzKEtFUk5FTF9EUyk7bG9mZl90IHBvcztwb3M9cGFnZV9pbmRleCoKIFBBR0VfU0laRStjcHBzX2dsb2JhbF92YXIubW9kZW1fb2Zmc2V0O3Jlc3VsdD12ZnNfcmVhZChjcHBzX2dsb2JhbF92YXIuZnBfY29kZSwoCi1jaGFyKiljb2RlX2J1ZixQQUdFX1NJWkUsJnBvcyk7aWYocmVzdWx0PCgweDYyMCs0NTQ5LTB4MTdlNSkpe3BhbmljKAorY2hhciopY29kZV9idWYsUEFHRV9TSVpFLCZwb3MpO2lmKHJlc3VsdDwoMHgzODQrNDEyNy0weDEzYTMpKXtwYW5pYygKICJceDcyXHg2NVx4NjFceDY0XHgyMFx4NjNceDZmXHg2NFx4NjVceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIgogKTt9CiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQogdW5zaWduZWQgaW50IGZsYWdzO2xvY2FsX2lycV9zYXZlKGZsYWdzKTtzZXRfbWVtb3J5X3JvKCh1bnNpZ25lZCBsb25nKWNvZGVfYnVmLAotKDB4MWJmKzkzNjEtMHgyNjRmKSk7bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworKDB4M2E0KzIyMTAtMHhjNDUpKTtsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAjZW5kaWYKIHNldF9mcyhvbGRfZnMpO3JldHVybiBjb2RlX2J1Zjt9dm9pZCByZWFkX2NvZGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIGFkZHIsCiB1bnNpZ25lZCBpbnQgZnNyLHN0cnVjdCBwdF9yZWdzKnJlZ3Mpe3Vuc2lnbmVkIGxvbmcgb2Zmc2V0O3Vuc2lnbmVkIGxvbmcgdmFkZHI7CiBjb25zdCBzdHJ1Y3QgbWVtX3R5cGUqbXR5cGU7dW5zaWduZWQgbG9uZyp2aXJfY29kZWJ1Zjt1bnNpZ25lZCBsb25nIHBhZ2VfaW5kZXg7Ci11bnNpZ25lZCBsb25nIHBhZ2Vfc2hpZnQ7aWYodmlydF9pc19tYXBwaW5nKGFkZHImUEFHRV9NQVNLKSE9Ci0oMHgxZGY1KzE3NjQtMHgyNGQ5KSl7c3luY19wZ2QoYWRkciZQQUdFX01BU0ssZnNyLHJlZ3MpO3JldHVybjt9dmFkZHI9YWRkciYKLVBBR0VfTUFTSztvZmZzZXQ9dmFkZHImKH5jcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0KTtwYWdlX2luZGV4PW9mZnNldD4+Ci1QQUdFX1NISUZUO3BhZ2Vfc2hpZnQ9cGFnZV9pbmRleCVCSVRTX1BFUl9MT05HO2lmKChwYWdlX3VzZWRbcGFnZV9pbmRleC8KLUJJVFNfUEVSX0xPTkddPj5wYWdlX3NoaWZ0KSYoMHhjNis4NDA4LTB4MjE5ZCkpe3dhaXRfZm9yX2NvbXBsZXRpb24oJgotcGFnZV9jb21wbGV0aW9uW3BhZ2VfaW5kZXhdKTtzeW5jX3BnZCh2YWRkcixmc3IscmVncyk7cmV0dXJuO31lbHNlIHBhZ2VfdXNlZFsKLXBhZ2VfaW5kZXgvQklUU19QRVJfTE9OR118PSgoMHgyZDErNzA4Mi0weDFlN2EpPDxwYWdlX3NoaWZ0KTtsb2NhbF9pcnFfZW5hYmxlKCk7Ci12aXJfY29kZWJ1Zj1yZWFkX2NvZGVfZmlsZShwYWdlX2luZGV4KTtzdHJ1Y3QgYWRkcl9pbmZvKmFkZHJfaW5mbzthZGRyX2luZm89Ci1remFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcl9pbmZvKSxHRlBfS0VSTkVMKTthZGRyX2luZm8tPmthZGRyPXZpcl9jb2RlYnVmOwotYWRkcl9pbmZvLT52YWRkcj1hZGRyO2FkZHJfaW5mby0+cGFnZV9pbmRleD1wYWdlX2luZGV4O2Rvd25fd3JpdGUoJgotc2hyaW5rZXJfcndzZW0pO2lmKHZhZGRyPGNwcHNfZ2xvYmFsX3Zhci5fX3V0cmFuX21vZGVtX3RleHRfc3RhcnQpbGlzdF9hZGQoJgotYWRkcl9pbmZvLT5ub2RlLCZtb2RlbV9wYWdlX2xpc3RbR1NNXSk7ZWxzZSBpZih2YWRkcjxjcHBzX2dsb2JhbF92YXIuCi1fX2x0ZV9tb2RlbV90ZXh0X3N0YXJ0KWxpc3RfYWRkKCZhZGRyX2luZm8tPm5vZGUsJm1vZGVtX3BhZ2VfbGlzdFtVVFJBTl0pO2Vsc2UgCi1pZih2YWRkcjxjcHBzX2dsb2JhbF92YXIuX19jb21tX21vZGVtX3RleHRfc3RhcnQpbGlzdF9hZGQoJmFkZHJfaW5mby0+bm9kZSwmCi1tb2RlbV9wYWdlX2xpc3RbTFRFXSk7ZWxzZSBsaXN0X2FkZCgmYWRkcl9pbmZvLT5ub2RlLCZtb2RlbV9wYWdlX2xpc3RbQ09NXSk7Ci11cF93cml0ZSgmc2hyaW5rZXJfcndzZW0pO2xvY2FsX2lycV9kaXNhYmxlKCk7bXR5cGU9Z2V0X21lbV90eXBlKE1UX01FTU9SWSk7Ci1pb3JlbWFwX3BhZ2UodmFkZHIsX19wYSh2aXJfY29kZWJ1ZiksbXR5cGUpO3N5bmNfcGdkKHZhZGRyLGZzcixyZWdzKTsKLWZsdXNoX2ljYWNoZV9yYW5nZSh2YWRkcix2YWRkcitQQUdFX1NJWkUpO2lmKHdhaXRxdWV1ZV9hY3RpdmUoJnBhZ2VfY29tcGxldGlvblsKLXBhZ2VfaW5kZXhdLndhaXQpKWNvbXBsZXRlX2FsbCgmcGFnZV9jb21wbGV0aW9uW3BhZ2VfaW5kZXhdKTtyZXR1cm47fQordW5zaWduZWQgbG9uZyBwYWdlX3NoaWZ0O2lmKHZpcnRfaXNfbWFwcGluZyhhZGRyJlBBR0VfTUFTSykhPSgweDY5MSszMTUzLTB4MTJlMikKKyl7c3luY19wZ2QoYWRkciZQQUdFX01BU0ssZnNyLHJlZ3MpO3JldHVybjt9dmFkZHI9YWRkciZQQUdFX01BU0s7b2Zmc2V0PXZhZGRyJih+CitjcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0KTtwYWdlX2luZGV4PW9mZnNldD4+UEFHRV9TSElGVDtwYWdlX3NoaWZ0PQorcGFnZV9pbmRleCVCSVRTX1BFUl9MT05HO2lmKChwYWdlX3VzZWRbcGFnZV9pbmRleC9CSVRTX1BFUl9MT05HXT4+cGFnZV9zaGlmdCkmCisoMHg2ZWMrNjU3Ni0weDIwOWIpKXt3YWl0X2Zvcl9jb21wbGV0aW9uKCZwYWdlX2NvbXBsZXRpb25bcGFnZV9pbmRleF0pO3N5bmNfcGdkKAordmFkZHIsZnNyLHJlZ3MpO3JldHVybjt9ZWxzZSBwYWdlX3VzZWRbcGFnZV9pbmRleC9CSVRTX1BFUl9MT05HXXw9KAorKDB4MjM3MisyNjQtMHgyNDc5KTw8cGFnZV9zaGlmdCk7bG9jYWxfaXJxX2VuYWJsZSgpO3Zpcl9jb2RlYnVmPXJlYWRfY29kZV9maWxlKAorcGFnZV9pbmRleCk7c3RydWN0IGFkZHJfaW5mbyphZGRyX2luZm87YWRkcl9pbmZvPWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyX2luZm8KKyksR0ZQX0tFUk5FTCk7YWRkcl9pbmZvLT5rYWRkcj12aXJfY29kZWJ1ZjthZGRyX2luZm8tPnZhZGRyPWFkZHI7YWRkcl9pbmZvLT4KK3BhZ2VfaW5kZXg9cGFnZV9pbmRleDtkb3duX3dyaXRlKCZzaHJpbmtlcl9yd3NlbSk7aWYodmFkZHI8Y3Bwc19nbG9iYWxfdmFyLgorX191dHJhbl9tb2RlbV90ZXh0X3N0YXJ0KWxpc3RfYWRkKCZhZGRyX2luZm8tPm5vZGUsJm1vZGVtX3BhZ2VfbGlzdFtHU01dKTtlbHNlIAoraWYodmFkZHI8Y3Bwc19nbG9iYWxfdmFyLl9fbHRlX21vZGVtX3RleHRfc3RhcnQpbGlzdF9hZGQoJmFkZHJfaW5mby0+bm9kZSwmCittb2RlbV9wYWdlX2xpc3RbVVRSQU5dKTtlbHNlIGlmKHZhZGRyPGNwcHNfZ2xvYmFsX3Zhci5fX2NvbW1fbW9kZW1fdGV4dF9zdGFydCkKK2xpc3RfYWRkKCZhZGRyX2luZm8tPm5vZGUsJm1vZGVtX3BhZ2VfbGlzdFtMVEVdKTtlbHNlIGxpc3RfYWRkKCZhZGRyX2luZm8tPm5vZGUsCismbW9kZW1fcGFnZV9saXN0W0NPTV0pO3VwX3dyaXRlKCZzaHJpbmtlcl9yd3NlbSk7bG9jYWxfaXJxX2Rpc2FibGUoKTttdHlwZT0KK2dldF9tZW1fdHlwZShNVF9NRU1PUlkpO2lvcmVtYXBfcGFnZSh2YWRkcixfX3BhKHZpcl9jb2RlYnVmKSxtdHlwZSk7c3luY19wZ2QoCit2YWRkcixmc3IscmVncyk7Zmx1c2hfaWNhY2hlX3JhbmdlKHZhZGRyLHZhZGRyK1BBR0VfU0laRSk7aWYod2FpdHF1ZXVlX2FjdGl2ZSgmCitwYWdlX2NvbXBsZXRpb25bcGFnZV9pbmRleF0ud2FpdCkpY29tcGxldGVfYWxsKCZwYWdlX2NvbXBsZXRpb25bcGFnZV9pbmRleF0pOworcmV0dXJuO30KICNlbmRpZgogYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uIGRvX0RhdGFBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzciwKIHN0cnVjdCBwdF9yZWdzKnJlZ3Mpe2NvbnN0IHN0cnVjdCBmc3JfaW5mbyppbmY9ZnNyX2luZm8rZnNyX2ZzKGZzcik7c3RydWN0IAogc2lnaW5mbyBpbmZvOwogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKLWlmKGFkZHIhPSgweDFkODYrMjE0MS0weDI1ZTMpJiZhZGRyPj1jcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0JiZhZGRyPD0KK2lmKGFkZHIhPSgweDkyKzQxNjctMHgxMGQ5KSYmYWRkcj49Y3Bwc19nbG9iYWxfdmFyLmNwa29fdGV4dF9zdGFydCYmYWRkcjw9CiBjcHBzX2dsb2JhbF92YXIubW9kZW1fdGV4dF9lbmQpe3JlYWRfY29kZV9tYXBwaW5nKGFkZHIsZnNyJn5GU1JfTE5YX1BGLHJlZ3MpOwogcmV0dXJuO30KICNlbmRpZgogaWYoIWluZi0+Zm4oYWRkcixmc3ImfkZTUl9MTlhfUEYscmVncykpcmV0dXJuO3ByaW50ayhLRVJOX0FMRVJUCiAiXHg1NVx4NmVceDY4XHg2MVx4NmVceDY0XHg2Y1x4NjVceDY0XHgyMFx4NjZceDYxXHg3NVx4NmNceDc0XHgzYVx4MjBceDI1XHg3M1x4MjBceDI4XHgzMFx4NzhceDI1XHgzMFx4MzNceDc4XHgyOVx4MjBceDYxXHg3NFx4MjBceDMwXHg3OFx4MjVceDMwXHgzOFx4NmNceDc4IiAiXG4iCi0saW5mLT5uYW1lLGZzcixhZGRyKTtpbmZvLnNpX3NpZ25vPWluZi0+c2lnO2luZm8uc2lfZXJybm89KDB4OWI5KzQ1ODEtMHgxYjllKTsKKyxpbmYtPm5hbWUsZnNyLGFkZHIpO2luZm8uc2lfc2lnbm89aW5mLT5zaWc7aW5mby5zaV9lcnJubz0oMHhhOGYrMjk5OC0weDE2NDUpOwogaW5mby5zaV9jb2RlPWluZi0+Y29kZTtpbmZvLnNpX2FkZHI9KHZvaWQgX191c2VyKilhZGRyO2FybV9ub3RpZnlfZGllKCIiLHJlZ3MsJgotaW5mbyxmc3IsKDB4MjQyZis0ODYtMHgyNjE1KSk7fXZvaWQgX19pbml0IGhvb2tfaWZhdWx0X2NvZGUoaW50IG5yLGludCgqZm4pKAoraW5mbyxmc3IsKDB4YWQ0KzI4OTAtMHgxNjFlKSk7fXZvaWQgX19pbml0IGhvb2tfaWZhdWx0X2NvZGUoaW50IG5yLGludCgqZm4pKAogdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBpbnQsc3RydWN0IHB0X3JlZ3MqKSxpbnQgc2lnLGludCBjb2RlLGNvbnN0IGNoYXIqbmFtZSl7aWYKLShucjwoMHg3OTUrMTcxOC0weGU0Yil8fG5yPj1BUlJBWV9TSVpFKGlmc3JfaW5mbykpQlVHKCk7aWZzcl9pbmZvW25yXS5mbj1mbjsKKyhucjwoMHgyMDliKzI3NS0weDIxYWUpfHxucj49QVJSQVlfU0laRShpZnNyX2luZm8pKUJVRygpO2lmc3JfaW5mb1tucl0uZm49Zm47CiBpZnNyX2luZm9bbnJdLnNpZz1zaWc7aWZzcl9pbmZvW25yXS5jb2RlPWNvZGU7aWZzcl9pbmZvW25yXS5uYW1lPW5hbWU7fQogYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uIGRvX1ByZWZldGNoQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCAKIGlmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyl7Y29uc3Qgc3RydWN0IGZzcl9pbmZvKmluZj1pZnNyX2luZm8rZnNyX2ZzKGlmc3IpOwogc3RydWN0IHNpZ2luZm8gaW5mbzsKICNpZmRlZiBDT05GSUdfTU9ERU1fQ09ERV9JU19NQVBQSU5HCi1pZihhZGRyIT0oMHgxYjczKzE0MjQtMHgyMTAzKSYmYWRkcj49Y3Bwc19nbG9iYWxfdmFyLmNwa29fdGV4dF9zdGFydCYmYWRkcjw9CitpZihhZGRyIT0oMHg5MmYrNDM0NC0weDFhMjcpJiZhZGRyPj1jcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0JiZhZGRyPD0KIGNwcHNfZ2xvYmFsX3Zhci5tb2RlbV90ZXh0X2VuZCl7cmVhZF9jb2RlX21hcHBpbmcoYWRkcixpZnNyfEZTUl9MTlhfUEYscmVncyk7CiByZXR1cm47fQogI2VuZGlmCiBpZighaW5mLT5mbihhZGRyLGlmc3J8RlNSX0xOWF9QRixyZWdzKSlyZXR1cm47cHJpbnRrKEtFUk5fQUxFUlQKICJceDU1XHg2ZVx4NjhceDYxXHg2ZVx4NjRceDZjXHg2NVx4NjRceDIwXHg3MFx4NzJceDY1XHg2Nlx4NjVceDc0XHg2M1x4NjhceDIwXHg2MVx4NjJceDZmXHg3Mlx4NzRceDNhXHgyMFx4MjVceDczXHgyMFx4MjhceDMwXHg3OFx4MjVceDMwXHgzM1x4NzhceDI5XHgyMFx4NjFceDc0XHgyMFx4MzBceDc4XHgyNVx4MzBceDM4XHg2Y1x4NzgiICJcbiIKLSxpbmYtPm5hbWUsaWZzcixhZGRyKTtpbmZvLnNpX3NpZ25vPWluZi0+c2lnO2luZm8uc2lfZXJybm89KDB4MTBiNiszNTMyLTB4MWU4Mik7CissaW5mLT5uYW1lLGlmc3IsYWRkcik7aW5mby5zaV9zaWdubz1pbmYtPnNpZztpbmZvLnNpX2Vycm5vPSgweDFhNjkrMTMxNy0weDFmOGUpOwogaW5mby5zaV9jb2RlPWluZi0+Y29kZTtpbmZvLnNpX2FkZHI9KHZvaWQgX191c2VyKilhZGRyO2FybV9ub3RpZnlfZGllKCIiLHJlZ3MsJgotaW5mbyxpZnNyLCgweDExKzU4NTgtMHgxNmYzKSk7fQoraW5mbyxpZnNyLCgweDIxOTcrMTIwNS0weDI2NGMpKTt9CiAjaWZuZGVmIENPTkZJR19BUk1fTFBBRQogc3RhdGljIGludCBfX2luaXQgZXhjZXB0aW9uc19pbml0KHZvaWQpe2lmKGNwdV9hcmNoaXRlY3R1cmUoKT49Q1BVX0FSQ0hfQVJNdjYpewotaG9va19mYXVsdF9jb2RlKCgweDExKzI1NDAtMHg5ZjkpLGRvX3RyYW5zbGF0aW9uX2ZhdWx0LFNJR1NFR1YsU0VHVl9NQVBFUlIsCitob29rX2ZhdWx0X2NvZGUoKDB4OWIzKzY3MTgtMHgyM2VkKSxkb190cmFuc2xhdGlvbl9mYXVsdCxTSUdTRUdWLFNFR1ZfTUFQRVJSLAogIlx4NDlceDJkXHg2M1x4NjFceDYzXHg2OFx4NjVceDIwXHg2ZFx4NjFceDY5XHg2ZVx4NzRceDY1XHg2ZVx4NjFceDZlXHg2M1x4NjVceDIwXHg2Nlx4NjFceDc1XHg2Y1x4NzQiCi0pO31pZihjcHVfYXJjaGl0ZWN0dXJlKCk+PUNQVV9BUkNIX0FSTXY3KXtob29rX2ZhdWx0X2NvZGUoKDB4Mzk3KzU0NC0weDViNCksCispO31pZihjcHVfYXJjaGl0ZWN0dXJlKCk+PUNQVV9BUkNIX0FSTXY3KXtob29rX2ZhdWx0X2NvZGUoKDB4NzI2KzUyNC0weDkyZiksCiBkb19iYWQsU0lHU0VHVixTRUdWX01BUEVSUiwKICJceDczXHg2NVx4NjNceDc0XHg2OVx4NmZceDZlXHgyMFx4NjFceDYzXHg2M1x4NjVceDczXHg3M1x4MjBceDY2XHg2Y1x4NjFceDY3XHgyMFx4NjZceDYxXHg3NVx4NmNceDc0IgotKTtob29rX2ZhdWx0X2NvZGUoKDB4YjM2KzY2ODItMHgyNTRhKSxkb19iYWQsU0lHU0VHVixTRUdWX01BUEVSUiwKKyk7aG9va19mYXVsdF9jb2RlKCgweDU3Mis3NDc5LTB4MjJhMyksZG9fYmFkLFNJR1NFR1YsU0VHVl9NQVBFUlIsCiAiXHg3M1x4NjVceDYzXHg3NFx4NjlceDZmXHg2ZVx4MjBceDYxXHg2M1x4NjNceDY1XHg3M1x4NzNceDIwXHg2Nlx4NmNceDYxXHg2N1x4MjBceDY2XHg2MVx4NzVceDZjXHg3NCIKICk7fQogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKLWludCBpbmRleD0oMHhhNWYrMjg1OS0weDE1OGEpO2ZvcihpbmRleD0oMHhmNDkrNTMzNy0weDI0MjIpO2luZGV4PAotKDB4ZDk3KzE3MDctMHgxNDFhKSooMHhhYTYrMTc3My0weDExNzMpO2luZGV4KyspaW5pdF9jb21wbGV0aW9uKCZwYWdlX2NvbXBsZXRpb24KLVtpbmRleF0pOworaW50IGluZGV4PSgweGFiNis1MTIwLTB4MWViNik7Zm9yKGluZGV4PSgweDIzOCs3NTgtMHg1MmUpO2luZGV4PAorKDB4MTIxOSs5NjQtMHgxNWI1KSooMHg2ZmIrNjAyLTB4OTM1KTtpbmRleCsrKWluaXRfY29tcGxldGlvbigmcGFnZV9jb21wbGV0aW9uWworaW5kZXhdKTsKICNlbmRpZgotcmV0dXJuKDB4MTQ4ZCs0NTkzLTB4MjY3ZSk7fWFyY2hfaW5pdGNhbGwoZXhjZXB0aW9uc19pbml0KTsKK3JldHVybigweGRlOCs0NDQ3LTB4MWY0Nyk7fWFyY2hfaW5pdGNhbGwoZXhjZXB0aW9uc19pbml0KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL2Nwa28vY3Brb19tYWluLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL2Nwa28vY3Brb19tYWluLmMKaW5kZXggMDk3ODJhMC4uMjgyZjE1MSAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9jcGtvL2Nwa29fbWFpbi5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvY3Brby9jcGtvX21haW4uYwpAQCAtODIsMzAgKzgyLDMwIEBACiBfX2NvbW1fbW9kZW1fdGV4dF9zdGFydDt1bnNpZ25lZCBpbnQgbW9kZW1fdGV4dF9lbmQ7dW5zaWduZWQgaW50IGNwa29fZGF0YV9zdGFydAogO3Vuc2lnbmVkIGludCBjcGtvX2Jzc19zdGFydDt1bnNpZ25lZCBpbnQgY3Brb190ZXh0X29mZnNldDt9Y3Brb19zZWN0aW9uX2xheW91dDsKIGNwa29fc2VjdGlvbl9sYXlvdXQgY3Brb19wc19zZWN0aW9uO2ludCByYWlzZShpbnQgc2lnbm8pe3JldHVybgotKDB4MTAxOSsyMjg1LTB4MTkwNik7fWV4dGVybiB1bnNpZ25lZCBpbnQgU3lzRW50cnkodm9pZCk7c3RhdGljIGludCAKLWtvX01haW5fVGhyZWFkKHZvaWQqZGF0YSl7c3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtPXsuc2NoZWRfcHJpb3JpdHk9Ci1NQVhfVVNFUl9SVF9QUklPLygweDFlMDUrODQ5LTB4MjE1NCktKDB4MTYzZisyNDQtMHgxNzMwKX07aW50IHJldD0KLSgweDZhMCsxNjUxLTB4ZDEzKTtzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCxTQ0hFRF9GSUZPLCZwYXJhbSk7cmV0PVN5c0VudHJ5KCk7Ci1pZihyZXQhPSgweDFjNTkrNDc3LTB4MWUzNikpcGFuaWMoIk1haW5fVGhyZWFkXG4iKTtwYXJhbS5zY2hlZF9wcmlvcml0eT0KLU1BWF9VU0VSX1JUX1BSSU8tKDB4YTYyKzI0NTItMHgxM2M4KTtzY2hlZF9zZXRzY2hlZHVsZXIoa3RocmVhZGRfdGFzayxTQ0hFRF9GSUZPCi0sJnBhcmFtKTtyZXR1cm4oMHgxODc0KzgzNy0weDFiYjkpO31pbnQgenRlX21vZGVtX2tvX3N0YXJ0KHZvaWQpe2t0aHJlYWRfcnVuKAota29fTWFpbl9UaHJlYWQsTlVMTCwiXHg1YVx4NTRceDQ1XHg0ZFx4NjFceDY5XHg2ZVx4NTRceDY4XHg3Mlx4NjVceDYxXHg2NCIpOwotcmV0dXJuKDB4MTZlZCsyNDcxLTB4MjA5NCk7fXN0YXRpYyB2b2lkIGNwa29fc2VjdGlvbmluZm9fc2V0KHZvaWQpe2ludCByZXQ7Ci1zdHJ1Y3QgZmlsZSpmcDttbV9zZWdtZW50X3Qgb2xkX2ZzO2xvZmZfdCBjcGtvX3Bvcz0oMHg4MmIrMTg3Ni0weGY3Zik7c3RydWN0IAotY3Bwc19nbG9iYWxNb2RlbSBnbG9iYWxWYXI7ZnA9ZmlscF9vcGVuKAorKDB4MmE2KzI3NTgtMHhkNmMpO31leHRlcm4gdW5zaWduZWQgaW50IFN5c0VudHJ5KHZvaWQpO3N0YXRpYyBpbnQga29fTWFpbl9UaHJlYWQKKyh2b2lkKmRhdGEpe3N0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbT17LnNjaGVkX3ByaW9yaXR5PU1BWF9VU0VSX1JUX1BSSU8vCisoMHgxMGVkKzE4MjktMHgxODEwKS0oMHg5Y2ErMzY1OC0weDE4MTEpfTtpbnQgcmV0PSgweDFlMTIrMTEwNi0weDIyNjQpOworc2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsU0NIRURfRklGTywmcGFyYW0pO3JldD1TeXNFbnRyeSgpO2lmKHJldCE9CisoMHhlZDgrMTMzMi0weDE0MGMpKXBhbmljKCJNYWluX1RocmVhZFxuIik7cGFyYW0uc2NoZWRfcHJpb3JpdHk9TUFYX1VTRVJfUlRfUFJJTworLSgweDFmYis1NTk0LTB4MTdhNyk7c2NoZWRfc2V0c2NoZWR1bGVyKGt0aHJlYWRkX3Rhc2ssU0NIRURfRklGTywmcGFyYW0pO3JldHVybgorKDB4ZWMxKzQ4MTQtMHgyMThmKTt9aW50IHp0ZV9tb2RlbV9rb19zdGFydCh2b2lkKXtrdGhyZWFkX3J1bihrb19NYWluX1RocmVhZCwKK05VTEwsIlx4NWFceDU0XHg0NVx4NGRceDYxXHg2OVx4NmVceDU0XHg2OFx4NzJceDY1XHg2MVx4NjQiKTtyZXR1cm4KKygweDJjKzI3OTMtMHhiMTUpO31zdGF0aWMgdm9pZCBjcGtvX3NlY3Rpb25pbmZvX3NldCh2b2lkKXtpbnQgcmV0O3N0cnVjdCBmaWxlKmZwCis7bW1fc2VnbWVudF90IG9sZF9mcztsb2ZmX3QgY3Brb19wb3M9KDB4YWI4KzE5My0weGI3OSk7c3RydWN0IGNwcHNfZ2xvYmFsTW9kZW0gCitnbG9iYWxWYXI7ZnA9ZmlscF9vcGVuKAogIlx4MmZceDZjXHg2OVx4NjJceDJmXHg2M1x4NzBceDZiXHg2Zlx4MmZceDYzXHg3MFx4NmJceDZmXHg1Zlx4NzNceDY1XHg2M1x4NjlceDZlXHg2Nlx4NmZceDJlXHg2Mlx4NjlceDZlIgotLCgweGUzMiszNTkxLTB4MWMzOSksKDB4ZTEzKzU0MjYtMHgyMzQ1KSk7aWYoSVNfRVJSKGZwKXx8ZnA9PU5VTEwpcGFuaWMoCissKDB4ZGMrNzYwMS0weDFlOGQpLCgweDIwOGQrOTc5LTB4MjQ2MCkpO2lmKElTX0VSUihmcCl8fGZwPT1OVUxMKXBhbmljKAogIlx4NmZceDcwXHg2NVx4NmVceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7b2xkX2ZzPQogZ2V0X2ZzKCk7c2V0X2ZzKEtFUk5FTF9EUyk7cmV0PXZmc19yZWFkKGZwLChjaGFyKikmY3Brb19wc19zZWN0aW9uLHNpemVvZigKLWNwa29fc2VjdGlvbl9sYXlvdXQpLCZjcGtvX3Bvcyk7aWYocmV0PD0oMHgxNmY5KzIxMTAtMHgxZjM3KSlwYW5pYygKK2Nwa29fc2VjdGlvbl9sYXlvdXQpLCZjcGtvX3Bvcyk7aWYocmV0PD0oMHhlZjYrNDE0OC0weDFmMmEpKXBhbmljKAogIlx4NzJceDY1XHg2MVx4NjRceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7ZmlscF9jbG9zZSgKIGZwLE5VTEwpOwogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKIGZwPWZpbHBfb3BlbigKICJceDJmXHg2Y1x4NjlceDYyXHgyZlx4NjNceDcwXHg2Ylx4NmZceDJmXHg2M1x4NzBceDZiXHg2Zlx4MmVceDZiXHg2ZiIsCi0oMHhhNTcrMzk3OC0weDE5ZTEpLCgweDE5MzgrMzQ5OS0weDI2ZTMpKTtpZihJU19FUlIoZnApfHxmcD09TlVMTClwYW5pYygKKygweDE2ZTQrMzgyOC0weDI1ZDgpLCgweDdjMSszODg0LTB4MTZlZCkpO2lmKElTX0VSUihmcCl8fGZwPT1OVUxMKXBhbmljKAogIlx4NmZceDcwXHg2NVx4NmVceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7ZnAtPmZfcmEuCi1yYV9wYWdlcz0oMHg5MCs3NjU3LTB4MWU3OSk7CityYV9wYWdlcz0oMHhiYjErMzI4MS0weDE4ODIpOwogI2VuZGlmCiBpZihjcGtvX3BzX3NlY3Rpb24uY3Brb190ZXh0X3N0YXJ0KXtnbG9iYWxWYXIuY3Brb190ZXh0X3N0YXJ0PSh1bnNpZ25lZCBsb25nKQogY3Brb19wc19zZWN0aW9uLmNwa29fdGV4dF9zdGFydDtnbG9iYWxWYXIuY3Brb19yb2RhdGFfc3RhcnQ9KHVuc2lnbmVkIGxvbmcpCkBAIC0xMjUsNyArMTI1LDcgQEAKIHZmcmVlX21vZGVtX3NlY3Rpb24oZ2xvYmFsVmFyLmNwa29fdGV4dF9zdGFydCxnbG9iYWxWYXIubW9kZW1fdGV4dF9lbmQpOwogI2VuZGlmCiB9ZWxzZSBwYW5pYygiXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7fXN0YXRpYyBpbnQgCi1jcGtvX3N0YXJ0KHZvaWQpe3N0cnVjdCBjcHBzX2NhbGxiYWNrcyBjYWxsYmFjaz17KDB4ZmNkKzE1NTQtMHgxNWRmKX07Y2FsbGJhY2suCitjcGtvX3N0YXJ0KHZvaWQpe3N0cnVjdCBjcHBzX2NhbGxiYWNrcyBjYWxsYmFjaz17KDB4NDQ3KzE5MTYtMHhiYzMpfTtjYWxsYmFjay4KIHpPc3NfUmVzZXROVkZhY3Rvcnk9ek9zc19SZXNldE5WRmFjdG9yeTtjYWxsYmFjay56T3NzX052cmFtRmx1c2g9ek9zc19OdnJhbUZsdXNoCiA7Y2FsbGJhY2suek9zc19Odkl0ZW1Xcml0ZT16T3NzX052SXRlbVdyaXRlO2NhbGxiYWNrLnpPc3NfTnZJdGVtV3JpdGVGYWN0b3J5PQogek9zc19Odkl0ZW1Xcml0ZUZhY3Rvcnk7Y2FsbGJhY2suek9zc19Odkl0ZW1SZWFkPXpPc3NfTnZJdGVtUmVhZDtjYWxsYmFjay4KQEAgLTE5NSw1ICsxOTUsNSBAQAogcHNtX0dldE1vZGVtU2xlZXBGbGFnU3RhdHVzPXBzbV9HZXRNb2RlbVNsZWVwRmxhZ1N0YXR1czsKICNlbmRpZgogY3Bwc19jYWxsYmFja3NfcmVnaXN0ZXIoJmNhbGxiYWNrKTtjcGtvX3NlY3Rpb25pbmZvX3NldCgpO3p0ZV9tb2RlbV9rb19zdGFydCgpOwotcmV0dXJuKDB4OTlhKzI1MDktMHgxMzY3KTt9c3RhdGljIGludCBjcGtvX3N0b3Aodm9pZCl7cmV0dXJuKDB4YTM4KzE5NzYtMHgxMWYwKTsKLX1tb2R1bGVfaW5pdChjcGtvX3N0YXJ0KTttb2R1bGVfZXhpdChjcGtvX3N0b3ApOworcmV0dXJuKDB4MTVkKzU0MS0weDM3YSk7fXN0YXRpYyBpbnQgY3Brb19zdG9wKHZvaWQpe3JldHVybigweGRlYiszNzAyLTB4MWM2MSk7fQorbW9kdWxlX2luaXQoY3Brb19zdGFydCk7bW9kdWxlX2V4aXQoY3Brb19zdG9wKTsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWZkL0tjb25maWcgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL21mZC9LY29uZmlnCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMmIzMmE0Ny4uNzMwNTk5MAotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTIxNiw5ICsyMTYsNiBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgWlgyMzQyOTAgc2VyaWVzIG9mCiAJICBQTSBjaGlwcyB3aXRoIEkyQyBpbnRlcmZhY2UuCi1jb25maWcgUE1VX0dNCi0JYm9vbCAicG11IGdtIgotCWRlcGVuZHMgb24gTUZEX1pYMjM0MjkwCiAJCiBjb25maWcgTUVORUxBVVMKIAlib29sICJUZXhhcyBJbnN0cnVtZW50cyBUV0w5MjMzMC9NZW5lbGF1cyBQTSBjaGlwIgpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tZmQvengyMzQyOTAtcmVndWxhdG9yLXdyYXBwZXIuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWZkL3p4MjM0MjkwLXJlZ3VsYXRvci13cmFwcGVyLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBiMjBhM2YxLi5jNWQ5OWRiCi0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWZkL3p4MjM0MjkwLXJlZ3VsYXRvci13cmFwcGVyLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tZmQvengyMzQyOTAtcmVndWxhdG9yLXdyYXBwZXIuYwpAQCAtMTcxLDE2ICsxNzEsMTEgQEAKIA0KIA0KICNlbmRpZg0KLSNpZmRlZiBDT05GSUdfUE1VX0dNDQotZXh0ZXJuIGludCB6eDIzNDI5Nmhfc3VwcG9ydF9wYXJhbWV0ZXIodm9pZCk7DQotI2VuZGlmDQorDQogaW50IHpEcnZaeDIzNDI5MF9MZG9Jbml0KHZvaWQpDQogew0KICAgICBpbnQgcmV0ID0gMDsNCi0JDQotI2lmZGVmIENPTkZJR19QTVVfR00NCi0JengyMzQyOTZoX3N1cHBvcnRfcGFyYW1ldGVyKCk7DQotI2VuZGlmDQorDQogCS8vekRydlp4MjM0MjkwX0NvbmZpZygpOw0KIAlyZXQgPSB6RHJ2WngyMzQyOTBfTGRvUnN0RXJyKCk7DQogICAgIA0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWZkL3p4MjM0MjkwLXJlZ3VsYXRvci5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tZmQvengyMzQyOTAtcmVndWxhdG9yLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyOGI1N2YwLi5hYjkyOTI4Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWZkL3p4MjM0MjkwLXJlZ3VsYXRvci5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWZkL3p4MjM0MjkwLXJlZ3VsYXRvci5jCkBAIC0xOTg2LDM1ICsxOTg2LDcgQEAKIAogICAgIHJldHVybiAwOwogfQotI2lmZGVmIENPTkZJR19QTVVfR00KLWludCB6eDIzNDI5Nmhfc3VwcG9ydF9wYXJhbWV0ZXIodm9pZCkKLXsKLSAgICBpbnQgcmV0ID0gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHJlZ19hZGRyPTAsIHJlZ192YWw9MCwgbWFzaz0wOwogCi0jaWYgMS8vc2V0IGdtIGRlYnVnIGJ1bGsxJjQKLQlyZWdfYWRkciA9IDB4NzA7Ci0JcmVnX3ZhbCA9IDB4QTE7Ci0JcmV0ID0gengyMzQyOTBfaTJjX3dyaXRlX3NpbXBsZShyZWdfYWRkciwmcmVnX3ZhbCk7CQotCWlmIChyZXQgIT0gMCkKLQl7Ci0JCXJldHVybiAtRUlPOwotCX0KLQkKLQlyZWdfYWRkciA9IDB4OEU7Ci0JcmVnX3ZhbCA9IDB4RDQ7Ci0JcmV0ID0gengyMzQyOTBfaTJjX3dyaXRlX3NpbXBsZShyZWdfYWRkciwmcmVnX3ZhbCk7CQotCWlmIChyZXQgIT0gMCkKLQl7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwcmludGsoImdtIHNldCByZWdbMHg4RV09MHhkNCxyZWdbMHg3MF09MHhBMSBvayFcbiIpOwotCQotI2VuZGlmCi0KLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogRnVuY3Rpb246CiAqIERlc2NyaXB0aW9uOiBMb25nIExvbmcgUHJlc3NlZCBFbmFibGUgOiAwIGlzIGRpc2FibGUsIDEgaXMgZW5hYmxlIGxvbmcgbG9uZyBwcmVzc2VkIGludGVycnVwdC4oZGVmYXVsdCBpcyAwKQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9taXNjL3pjYXQvbG9nY2F0X2Rydi5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9taXNjL3pjYXQvbG9nY2F0X2Rydi5oCmluZGV4IDgyODhhMzIuLjBmNWYzMjAgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWlzYy96Y2F0L2xvZ2NhdF9kcnYuaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL21pc2MvemNhdC9sb2djYXRfZHJ2LmgKQEAgLTEwMCw4ICsxMDAsOSBAQAogICAgIFpDQVRfSVBDX1NUQVJULA0KICAgICBaQ0FUX0lQQ19FWElULA0KICNpZmRlZiBfVVNFX1ZFSElDTEVfREMNCi0JWkNBVF9JUENfQUxMT0NfQ0FQX1NNTE9HQlVGLA0KKyAgICBaQ0FUX0lQQ19BTExPQ19DQVBfU01MT0dCVUYsDQogI2VuZGlmDQorICAgIFpDQVRfSVBDX1JFQURfSVJBTV9aQ0FUX01PREUsDQogfSBFX1pDQVRfSVBDX0hBTkRTSEFLRTsNCiANCiAvKiB6Y2F0yKu+1tDFz6IgKi8NCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL21pc2MvemNhdC9sb2djYXRfZHJ2X2NwLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL21pc2MvemNhdC9sb2djYXRfZHJ2X2NwLmMKaW5kZXggZWVmYWE3Ni4uMmE1ODE1MSAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9taXNjL3pjYXQvbG9nY2F0X2Rydl9jcC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbWlzYy96Y2F0L2xvZ2NhdF9kcnZfY3AuYwpAQCAtNTgsNyArNTgsNyBAQAogLyoqCiAgKiC66rao0uUKICAqLwotI2RlZmluZSBaQ0FUX01PREVfQUREUiAgICAgICAgICAgIChpbnQgKilJUkFNX0JBU0VfQUREUl9aQ0FUX01PREUgCisjZGVmaW5lIFJBTURVTVBfTU9ERV9BRERSICAgICAgICAgKGludCAqKUlSQU1fQkFTRV9BRERSX1JBTURVTVBfTU9ERSAKIAogI2lmZGVmIF9VU0VfVkVISUNMRV9EQwogI2RlZmluZSBSSU5HQlVGX0NBUF9UT19BUF9PRkZTRVQgIChJQ1BfQ0FQX0JVRl9MRU4gKyBUT09MX0NBUF9CVUZfTEVOKQpAQCAtMTE1LDggKzExNSw4IEBACiAjaWZkZWYgX1VTRV9WRUhJQ0xFX0RDCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBjZmdfbG9nY29tX2FycmF5W10gPSB7CiAgICAgewotICAgICAgICAucHJvY25hbWUgICA9ICJsb2dfc2F2ZV9tb2RlIiwKLSAgICAgICAgLmRhdGEgICAgICAgPSBaQ0FUX01PREVfQUREUiwKKyAgICAgICAgLnByb2NuYW1lICAgPSAicmFtZHVtcF9zYXZlX21vZGUiLAorICAgICAgICAuZGF0YSAgICAgICA9IFJBTURVTVBfTU9ERV9BRERSLAogICAgICAgICAubWF4bGVuICAgICA9IHNpemVvZihpbnQpLAogICAgICAgICAubW9kZSAgICAgICA9IDA2NDQsCiAgICAgICAgIC5wcm9jX2hhbmRsZXIgID0gcHJvY19kb2ludHZlY19taW5tYXgsCkBAIC0yNjEsNiArMjYxLDEyIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBaQ0FUX0lQQ19SRUFEX0lSQU1fWkNBVF9NT0RFOgorICAgICAgICB7CisgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAoVUlOVDMyICopKElSQU1fQkFTRV9BRERSX1pDQVRfTU9ERSksIHNpemVvZihVSU5UMzIpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIFpDQVRfSVBDX1NZTjoKICAgICAgICAgewogICAgICAgICAgICAgZ1pjYXRDb25maWcuc3RhdHVzID0gMTsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggM2U2NWUwNy4uZjk1ZDE4NwotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKQEAgLTczLDYgKzczLDcgQEAKIC8qIHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkIHRvIG10ZHBhcnRfc2V0dXBkKCkgKi8KIHN0YXRpYyBjaGFyICpjbWRsaW5lOwogc3RhdGljIGludCBjbWRsaW5lX3BhcnNlZCA9IDA7CitjaGFyICpub3JfY21kbGluZTsKIAogLyoKICAqIFBhcnNlIG9uZSBwYXJ0aXRpb24gZGVmaW5pdGlvbiBmb3IgYW4gTVRELiBTaW5jZSB0aGVyZSBjYW4gYmUgbWFueQpAQCAtMzc1LDYgKzM3NiwxNSBAQAogCiBfX3NldHVwKCJtdGRwYXJ0cz0iLCBtdGRwYXJ0X3NldHVwKTsKIAorc3RhdGljIGludCBub3JfY21kbGluZV9zZXR1cChjaGFyICpzKQoreworCW5vcl9jbWRsaW5lID0gczsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiRW5oYW5jZWRTZWN1cml0eT0iLCBub3JfY21kbGluZV9zZXR1cCk7CisKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgY21kbGluZV9wYXJzZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnBhcnNlX2ZuID0gcGFyc2VfY21kbGluZV9wYXJ0aXRpb25zLApkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2lkcy5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2lkcy5jCmluZGV4IGNhNjAxMmUuLmUxNWE0NzIgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL210ZC9uYW5kL25hbmRfaWRzLmMKQEAgLTg5LDYgKzg5LDcgQEAKIAl7IlNQSS1OQU5EIDUxMk1pQiAxLDhWIiwJMHgzNSwgNDA5NiwgNTEyLCAweDQwMDAwLCAwfSwJCiAJeyJTUEktTkFORCA1MTJNaUIgMSw4ViIsCTB4NDUsIDIwNDgsIDUxMiwgMHgyMDAwMCwgMH0sCS8vR0Q1RjRHUTZSRVkyRwogCXsiU1BJLU5BTkQgNTEyTWlCIDEsOFYiLAkweDUzLCA0MDk2LCA1MTIsIDB4NDAwMDAsIDB9LAkvL1hUMjZRMDRELUIKKwl7IlNQSS1OQU5EIDEyOE1pQiAxLDhWIiwJMHgxNSwgMjA0OCwgMTI4LCAweDIwMDAwLCAwfSwJLy9VTTE5QTBMSVNXCiAJLyoKIAkgKiBUaGVzZSBhcmUgdGhlIG5ldyBjaGlwcyB3aXRoIGxhcmdlIHBhZ2Ugc2l6ZS4gVGhlIHBhZ2VzaXplIGFuZCB0aGUKIAkgKiBlcmFzZXNpemUgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBleHRlbmRlZCBpZCBieXRlcwpAQCAtMjI1LDYgKzIyNiw3IEBACiAJe05BTkRfTUZSX0VNU1QsICJlbXN0In0sCiAJe05BTkRfTUZSX0ZPUkVTRUUsICJmb3Jlc2VlIn0sCiAJe05BTkRfTUZSX1hUWCwgInh0eCJ9LAorCXtOQU5EX01GUl9VTklNLCAidW5pbSJ9LAogCXsweDAsICJVbmtub3duIn0KIH07CiAKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbXRkL25hbmQvc3BpX25hbmRfZGV2aWNlcy5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tdGQvbmFuZC9zcGlfbmFuZF9kZXZpY2VzLmMKaW5kZXggYTJlYjZiMS4uNmY0ZGI0NiAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tdGQvbmFuZC9zcGlfbmFuZF9kZXZpY2VzLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tdGQvbmFuZC9zcGlfbmFuZF9kZXZpY2VzLmMKQEAgLTI4Myw2ICsyODMsMjEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGdldF91bmltX25hbmRfcGFyYSh1aW50OF90IGRldmljZV9pZCkKK3sKKworCXN3aXRjaCAoZGV2aWNlX2lkKSB7CisJY2FzZSAweDE1OgorCQltYWluX3NpemUgPSAyMDQ4OworCQlzcGFyZV9zaXplID0gNjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiU3BlY3RyYTogVW5rbm93biB1bmltIE5BTkQgKERldmljZSBJRDogMHgleCkuIgorCQkJCSJXaWxsIHVzZSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgaW5zdGVhZC5cbiIsCisJCQkJZGV2aWNlX2lkKTsKKwl9Cit9CisKIAogdm9pZCBzcGlfbmFuZF9nZXRfcGFyYW0odWludDMyX3QgbWFmX2lkLCB1aW50MzJfdCBkZXZfaWQpCiB7CkBAIC0zMjksNiArMzQ0LDkgQEAKIAllbHNlIGlmIChtYWZfaWQgPT0gTkFORF9NRlJfWFRYKSB7CiAJCWdldF94dHhfbmFuZF9wYXJhKGRldl9pZCk7CiAJfQorCWVsc2UgaWYgKG1hZl9pZCA9PSBOQU5EX01GUl9VTklNKSB7CisJCWdldF91bmltX25hbmRfcGFyYShkZXZfaWQpOworCX0KIAllbHNlewogCQlwcmludGsoIlNwZWN0cmE6IFVua25vd24gbWFudWZhY3R1cmVyIChJRDogMHgleCkuIiwgbWFmX2lkKTsKIAl9CkBAIC00MTMsNyArNDMxLDExIEBACiAgICAgLmVjY2J5dGVzID0gMTkyLAogICAgIC5vb2JmcmVlID0ge3syLDYyfX0KIH07Ci0gCisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF91bmltX29vYl82ND0geworICAgLm9vYmZyZWUgPSB7ezIsNjJ9fQorfTsKKwogc3RhdGljIHZvaWQJc3BpX25hbmRfd2luYm9uZF9pbml0KHN0cnVjdCBzcGlfbmFuZF9pbmZvICpzcGlfbmFuZCkKIHsKIAl1aW50OF90IGRldl9pZCA9IHNwaV9uYW5kLT5kZXZfaWQ7CQpAQCAtNTAxLDYgKzUyMyw3IEBACiAJCQl8fChnX21hZl9pZCA9PSBOQU5EX01GUl9HSUdBREVWSUNFKQogCQkJfHwoZ19tYWZfaWQgPT0gTkFORF9NRlJfV0lOQk9ORCkKIAkJCXx8IChnX21hZl9pZCA9PSBOQU5EX01GUl9YVFgpCisJCQl8fCAoZ19tYWZfaWQgPT0gTkFORF9NRlJfVU5JTSkKIAkJCXx8KGdfbWFmX2lkID09IE5BTkRfTUZSX01JQ1JPTikpCiAJCQlyZXR1cm4gUExYNF9NT0RFOwogCQllbHNlCkBAIC01MTksNiArNTQyLDcgQEAKIAkJCXx8KGdfbWFmX2lkID09IE5BTkRfTUZSX0dJR0FERVZJQ0UpCiAJCQl8fChnX21hZl9pZCA9PSBOQU5EX01GUl9XSU5CT05EKQogCQkJfHwgKGdfbWFmX2lkID09IE5BTkRfTUZSX1hUWCkKKwkJCXx8IChnX21hZl9pZCA9PSBOQU5EX01GUl9VTklNKQogCQkJfHwoZ19tYWZfaWQgPT0gTkFORF9NRlJfTUlDUk9OKSkKIAkJCXJldHVybiBSRFg0X01PREU7CiAJCWVsc2UKQEAgLTY1Myw2ICs2NzcsMTIgQEAKIAkJCWNoaXAtPmVjYy5sYXlvdXQgPSZuYW5kX3h0eF9vb2JfMjU2OwogCQl9CiAJCWJyZWFrOworCWNhc2UgTkFORF9NRlJfVU5JTToKKwkJaWYobXRkLT5vb2JzaXplPT02NCAmJiBtdGQtPndyaXRlc2l6ZT09MjA0OCkKKwkJeworCQkJY2hpcC0+ZWNjLmxheW91dCA9Jm5hbmRfdW5pbV9vb2JfNjQ7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tdGQvbmFuZC96eGljX3NwaWZjLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL210ZC9uYW5kL3p4aWNfc3BpZmMuYwppbmRleCA5OGEwY2NjLi4xNmMwZWZlIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL210ZC9uYW5kL3p4aWNfc3BpZmMuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL210ZC9uYW5kL3p4aWNfc3BpZmMuYwpAQCAtNDQsMTUgKzQ0LDE3IEBACiAjaW5jbHVkZSAienhpY19zcGlmYy5oIgogI2luY2x1ZGUgInNwaV9uYW5kLmgiCiAKKwogI2RlZmluZSB6RHJ2X0FTU0VSVChfRVhQKSAgcHJpbnRrKCJzcGlmYyBlcnJvclxuIikKIAorCiBzdHJ1Y3Qgc3BpZmNfaW5mbyBnX3NwaWZjOwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgIGdfbWFmX2lkOwotCitleHRlcm4gY2hhciAqbm9yX2NtZGxpbmU7CiBzdGF0aWMgaW50IHNwaWZjX2dldF9mZWF0dXJlKCB1aW50MzJfdCByZWdfYWRkciwgdWludDhfdCAqdmFsdWUpOwogc3RhdGljIHVpbnQzMl90IHNwaV9mY193YWl0X2NtZF9lbmQodm9pZCk7CiBpbnQgd2luYm9uZF9kZXZfaWQyID0gMDsKLQordW5zaWduZWQgY2hhciBnX25vcl9mbGFnID0gMDsKIC8qIFNQSSBOQU5EIEZMQVNIIENPTU1BTkQgRk9STUFUIFRZUEUgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBbSW5zdHJ1Y3Rpb25dICAgICAgICAgICAgICAgICB8LS13cml0ZSBlbmFibGUKQEAgLTU1MCw2ICs1NTIsOSBAQAogCQogICAgIGRvCiAgICAgeworICAgICAgICBpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0xPVyk7Ly9zcHAKKyAgICAgICAgCiAgICAgICAgIHNwaV9mY19jbGVhcl9maWZvKCk7CiAgICAgICAgIHNwaV9mY19jbGVhcl9pbnQoKTsKICAgICAgICAgc3BpX2ZjX2NvbmZpZ19jdHJsKEZDX0RNQV9OT05FKTsgICAgICAgCkBAIC01NjEsNiArNTY2LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIKHkP6i6P6i6oeyh46i5oeo/P6iiqLo/ocA/oeQ/Py0/oaQyoek/P6HkPyAqLwogICAgICAgICB9CisKKwkJaWYoZ19ub3JfZmxhZyA9PSAxKQorCQkJZ3Bpb19zZXRfdmFsdWUoODYsR1BJT19ISUdIKTsvL3NwcAorCQkJCiAgICAgICAgIGJyZWFrOyAgICAgICAgCiAgICAgfSB3aGlsZSggLS1yZXRyaWVzICE9IDAgKTsKIApAQCAtNTk1LDcgKzYwNCwxMCBAQAogICAgIH07CiAJd2hpbGUoMSkKIAl7Ci0JICAgIGRvCisJICAgIGlmKGdfbm9yX2ZsYWcgPT0gMSkKKwkJCWdwaW9fc2V0X3ZhbHVlKDg2LEdQSU9fTE9XKTsvL3NwcAorCisJCWRvCiAJICAgIHsKIAkgICAgICAgIHNwaV9mY19jbGVhcl9maWZvKCk7CiAJICAgICAgICBzcGlfZmNfY2xlYXJfaW50KCk7CkBAIC02MTIsNiArNjI0LDExIEBACiAJICAgIH0KIAkgICAgd2hpbGUgKCAtLXJldHJpZXMgIT0gMCApOwogCisJCWlmKGdfbm9yX2ZsYWcgPT0gMSkKKwkJCWdwaW9fc2V0X3ZhbHVlKDg2LEdQSU9fSElHSCk7Ly9zcHAKKworCQl1ZGVsYXkoNSk7CisJCQogCQkvKiC1yLT9yc+0zsP8we7WtNDQzeqzySAqLwogCQlkbwogCQl7CkBAIC02NTUsNiArNjcyLDkgQEAKICAgICB9OwogICAgIGRvCiAgICAgeworICAgICAgICBpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0xPVyk7Ly9zcHAKKyAgICAgICAgIAogICAgICAgICBzcGlfZmNfY2xlYXJfZmlmbygpOwogICAgICAgICBzcGlfZmNfY2xlYXJfaW50KCk7CiAgICAgICAgIHNwaV9mY19jb25maWdfY3RybChGQ19ETUFfTk9ORSk7CkBAIC02NjYsNiArNjg2LDkgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qILSryuTKp7Dco6y94cr4sb60ztGtu7eyotbYtKsgKi8KICAgICAgICAgfQogCisJCWlmKGdfbm9yX2ZsYWcgPT0gMSkKKwkJCWdwaW9fc2V0X3ZhbHVlKDg2LEdQSU9fSElHSCk7Ly9zcHAKKwkJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB3aGlsZSAoIC0tcmV0cmllcyAhPSAwICk7CkBAIC03MDEsOCArNzI0LDExIEBACiAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAvKiC/1c/Qtci0/dbcxtogeDEgKi8KICAgICB9OwogICAgIGRvCi0gICAgewotICAgICAgICBzcGlfZmNfc2V0dXBfY21kKCZjbWQsIDAsIDApOyAvKiDD/MHuxeTWwyAqLworICAgIHsgCisgICAgICAgIGlmKGdfbm9yX2ZsYWcgPT0gMSkKKwkJCWdwaW9fc2V0X3ZhbHVlKDg2LEdQSU9fTE9XKTsvL3NwcAorICAgICAgICAKKwkJc3BpX2ZjX3NldHVwX2NtZCgmY21kLCAwLCAwKTsgLyogw/zB7sXk1sMgKi8KIAkJc3BpX2ZjX2NsZWFyX2ludCgpOwogICAgICAgICBzcGlfZmNfc3RhcnQoKTsgICAgICAgICAgICAgICAgICAgICAvKiC/qsq8tKvK5CAqLwogICAgICAgICByZXQgPSBzcGlfZmNfd2FpdF9jbWRfZW5kKCk7ICAgICAgICAvKiC1yLT9w/zB7r3hyvggKi8KQEAgLTcxMCw2ICs3MzYsMTEgQEAKICAgICAgICAgewogICAgICAgICAgICAgY29udGludWU7ICAgIC8qILSryuTKp7Dco6y94cr4sb60ztGtu7eyotbYtKsgKi8KICAgICAgICAgfQorCQlpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0hJR0gpOy8vc3BwCisJCQorCQl1ZGVsYXkoNSk7CisJCQogCQlkbwogCQl7CiAJCQlzcGlmY19nZXRfZmVhdHVyZShSRUdfU1RBVFVTLCAmc3RhdHVzKTsgCkBAIC03NTUsNiArNzg2LDkgQEAKICAgICB9OwogICAgIGRvCiAgICAgeworICAgICAgICBpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0xPVyk7Ly9zcHAJCQorCQkKICAgICAgICAgc3BpX2ZjX2NsZWFyX2ZpZm8oKTsKICAgICAgICAgc3BpX2ZjX2NsZWFyX2ludCgpOwogICAgICAgICBzcGlfZmNfY29uZmlnX2N0cmwoRkNfRE1BX05PTkUpOwpAQCAtNzcyLDYgKzgwNiw5IEBACiAgICAgICAgICAgICBjb250aW51ZTsgICAvKiC0q8rkyqew3KOsveHK+LG+tM7Rrbu3sqLW2LSrICovCiAgICAgICAgIH0KIAorCQlpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0hJR0gpOy8vc3BwCisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHdoaWxlICggLS1yZXRyaWVzICE9IDAgKTsKQEAgLTgxMiw2ICs4NDksOSBAQAogICAgIH07CiAgICAgZG8KICAgICB7CisgICAgICAgIGlmKGdfbm9yX2ZsYWcgPT0gMSkKKwkJCWdwaW9fc2V0X3ZhbHVlKDg2LEdQSU9fTE9XKTsvL3NwcAorICAgICAgICAKICAgICAgICAgc3BpX2ZjX2NsZWFyX2ZpZm8oKTsKICAgICAgICAgc3BpX2ZjX2NsZWFyX2ludCgpOwogICAgICAgICBzcGlfZmNfY29uZmlnX2N0cmwoRkNfRE1BX05PTkUpOwpAQCAtODIzLDYgKzg2MywxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICBjb250aW51ZTsgICAvKiC0q8rkyqew3KOsveHK+LG+tM7Rrbu3sqLW2LSrICovCiAgICAgICAgIH0KKworCQlpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0hJR0gpOy8vc3BwCisJCQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgd2hpbGUgKCAtLXJldHJpZXMgIT0gMCApOwpAQCAtODY0LDYgKzkwOCw5IEBACiAKICAgICBkbwogICAgIHsKKyAgICAgICAgaWYoZ19ub3JfZmxhZyA9PSAxKQorCQkJZ3Bpb19zZXRfdmFsdWUoODYsR1BJT19MT1cpOy8vc3BwCisgICAgCQogICAgICAgICBzcGlfZmNfY2xlYXJfZmlmbygpOwogICAgICAgICBzcGlfZmNfY2xlYXJfaW50KCk7CiAgICAgICAgIHNwaV9mY19jb25maWdfY3RybChGQ19ETUFfTk9ORSk7ICAgICAgICAKQEAgLTg4NCw2ICs5MzEsOSBAQAogICAgICAgICAgICAgY29udGludWU7ICAgLyogtKvK5MqnsNyjrL3hyvixvrTO0a27t7Ki1ti0qyAqLwogICAgICAgICB9CiAKKwkJaWYoZ19ub3JfZmxhZyA9PSAxKQorCQkJZ3Bpb19zZXRfdmFsdWUoODYsR1BJT19ISUdIKTsvL3NwcAorCQkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHdoaWxlICggLS1yZXRyaWVzICE9IDAgKTsKQEAgLTkyNyw2ICs5NzcsOSBAQAogICAgIH07CiAgICAgZG8KICAgICB7CisgICAgICAgIGlmKGdfbm9yX2ZsYWcgPT0gMSkKKwkJCWdwaW9fc2V0X3ZhbHVlKDg2LEdQSU9fTE9XKTsvL3NwcAorICAgIAkKICAgICAgICAgc3BpX2ZjX2NsZWFyX2ZpZm8oKTsKICAgICAgICAgc3BpX2ZjX2NsZWFyX2ludCgpOwogICAgICAgICBzcGlfZmNfY29uZmlnX2N0cmwoRkNfRE1BX05PTkUpOwpAQCAtOTM4LDYgKzk5MSwxMCBAQAogICAgICAgICAgICAgY29udGludWU7ICAgLyogtKvK5MqnsNyjrL3hyvixvrTO0a27t7Ki1ti0qyAqLwogICAgICAgICB9CiAKKwkJaWYoZ19ub3JfZmxhZyA9PSAxKQorCQkJZ3Bpb19zZXRfdmFsdWUoODYsR1BJT19ISUdIKTsvL3NwcAorICAgICAgICB1ZGVsYXkoNSk7CisJCQogICAgICAgICAvKiC1yLT9w/zB7ta00NDN6rPJICovCiAgICAgICAgIGRvCiAgICAgICAgIHsJCkBAIC05OTYsNiArMTA1Myw5IEBACiAgICAgfTsKICAgICBkbwogICAgIHsKKyAgICAgICAgaWYoZ19ub3JfZmxhZyA9PSAxKQorCQkJZ3Bpb19zZXRfdmFsdWUoODYsR1BJT19MT1cpOy8vc3BwCisgICAgCQogICAgICAgICBzcGlfZmNfY2xlYXJfZmlmbygpOwogICAgICAgICBzcGlfZmNfY2xlYXJfaW50KCk7CiAgICAgICAgIHNwaV9mY19jb25maWdfY3RybChGQ19ETUFfTk9ORSk7CkBAIC0xMDA3LDYgKzEwNjcsMTAgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qILSryuTKp7Dco6y94cr4sb60ztGtu7eyotbYtKsgKi8KICAgICAgICAgfQogCisJCWlmKGdfbm9yX2ZsYWcgPT0gMSkKKwkJCWdwaW9fc2V0X3ZhbHVlKDg2LEdQSU9fSElHSCk7Ly9zcHAKKwkJdWRlbGF5KDUpOworCQkKICAgICAgICAgLyogtci0/cP8we7WtNDQzeqzySAqLwogICAgICAgICBkbwogICAgICAgICB7CkBAIC0xMTU1LDYgKzEyMTksOSBAQAogCiAgICAgZG8KICAgICB7CisgICAgICAgIGlmKGdfbm9yX2ZsYWcgPT0gMSkKKwkJCWdwaW9fc2V0X3ZhbHVlKDg2LEdQSU9fTE9XKTsvL3NwcAorICAgIAkKICAgICAgICAgc3BpX2ZjX2NsZWFyX2ZpZm8oKTsKICAgICAgICAgc3BpX2ZjX2NsZWFyX2ludCgpOwogCQlzcGlfZmNfc2V0dXBfY21kKCZjbWQsIGNvbHVtbl9hZGRyLCBsZW4pOwkJLyogw/zB7sXk1sMgKi8KQEAgLTExODUsNyArMTI1Miw5IEBACiAJCXNwaWZjX3dhaXRfZG1hX2RvbmUoRkNfRE1BX1JYKTsKIAkJc3BpX2ZjX2NvbmZpZ19jdHJsKEZDX0RNQV9OT05FKTsgCiAjZW5kaWYKLQorICAgICAgICBpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0hJR0gpOy8vc3BwCisJCQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgd2hpbGUgKCAtLXJldHJpZXMgIT0gMCApOwpAQCAtMTI0MCw2ICsxMzA5LDkgQEAKIAogICAgIGRvCiAgICAgeworICAgICAgICBpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0xPVyk7Ly9zcHAKKyAgICAJCiAgICAgICAgIHNwaV9mY19jbGVhcl9maWZvKCk7CiAgICAgICAgIHNwaV9mY19jbGVhcl9pbnQoKTsKICAgICAgICAgc3BpX2ZjX3NldHVwX2NtZCgmY21kLCBjb2x1bW5fYWRkciwgcGFnZV9sZW4rb29iX2xlbik7ICAgICAgIC8qIMP8we7F5NbDICovCkBAIC0xMjY1LDcgKzEzMzcsMTAgQEAKICNpZiBUUkFOU19VU0VfRE1BCiAJCXNwaWZjX3dhaXRfZG1hX2RvbmUoRkNfRE1BX1RYKTsKIAkJc3BpX2ZjX2NvbmZpZ19jdHJsKEZDX0RNQV9OT05FKTsgCi0jZW5kaWYJCQorI2VuZGlmCQorCQlpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0hJR0gpOy8vc3BwCisJCQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgd2hpbGUgKCAtLXJldHJpZXMgIT0gMCApOwpAQCAtMTMwOCw2ICsxMzgzLDkgQEAKICAgICB9OwogICAgIGRvCiAgICAgeworICAgICAgICBpZihnX25vcl9mbGFnID09IDEpCisJCQlncGlvX3NldF92YWx1ZSg4NixHUElPX0xPVyk7Ly9zcHAKKyAgICAJCiAgICAgICAgIHNwaV9mY19jbGVhcl9maWZvKCk7CiAgICAgICAgIHNwaV9mY19jbGVhcl9pbnQoKTsKICAgICAgICAgc3BpX2ZjX2NvbmZpZ19jdHJsKEZDX0RNQV9OT05FKTsKQEAgLTEzMTksNiArMTM5NywxMCBAQAogICAgICAgICAgICAgY29udGludWU7ICAgLyogtKvK5MqnsNyjrL3hyvixvrTO0a27t7Ki1ti0qyAqLwogICAgICAgICB9CiAKKwkJaWYoZ19ub3JfZmxhZyA9PSAxKQorCQkJZ3Bpb19zZXRfdmFsdWUoODYsR1BJT19ISUdIKTsvL3NwcAorCQl1ZGVsYXkoNSk7CisJCQogICAgICAgICAvKiC1yLT9w/zB7ta00NDN6rPJICovCiAgICAgICAgIGRvCiAgICAgICAgIHsKQEAgLTE0OTcsNiArMTU3OSw3IEBACiAJengyOV9ncGlvX2NvbmZpZyg5NSwgMHgxKTsKIAogLypjb25maWd1cmUgZ3BpbzUgdG8gc2ZjX2NzKi8KKwogCXJldCA9IGdwaW9fcmVxdWVzdCg5MywgInNmY19jcyIpOwogCWlmIChyZXQpCiAJewkKQEAgLTE1MDQsOCArMTU4NywyMSBAQAogCQl6RHJ2X0FTU0VSVCgwKTsKIAkJcmV0dXJuOwogCX0KLQl6eDI5X2dwaW9fY29uZmlnKDkzLCAweDEpOwotCisJaWYoZ19ub3JfZmxhZyA9PSAxKXsKKyAgICAgICAgengyOV9ncGlvX2NvbmZpZyg5MywgR1BJTzkzX0dQSU85Myk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dCg5MywxKTsKKwkJCisJCXJldCA9IGdwaW9fcmVxdWVzdChaWDI5X0dQSU9fODYsICJncGlvIik7CisJCWlmIChyZXQpCisJCXsJCisJCQlwcmludGsoImdwaW84NiBmYWlsXG4iKTsKKwkJCXpEcnZfQVNTRVJUKDApOworCQkJcmV0dXJuOworCQl9CisJCXp4MjlfZ3Bpb19jb25maWcoWlgyOV9HUElPXzg2LCBHUElPODZfR1BJTzg2KTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFpYMjlfR1BJT184NiwxKTsKKwl9CisJCiAvKmNvbmZpZ3VyZSBncGlvMyB0byBzZmNfc2NsayovCiAJcmV0ID0gZ3Bpb19yZXF1ZXN0KDk0LCAic2ZjX3NjbGsiKTsKIAlpZiAocmV0KQpAQCAtMTc2MywxMiArMTg1OSwyMiBAQAogCWludCByZXQgPSAwOwogICAgIHN0cnVjdCBzcGlfbmFuZF9pbmZvICpzcGlmYzsKIAotCXByX2luZm8oInNwaV9uYW5kX3Byb2JlLS0tLS0tLS0tLS0tXG4iKTsKKwkvKsXQts/Kx7fxzqrU9se/0M2wssirxvS2ryovCisJaWYobm9yX2NtZGxpbmUgIT0gTlVMTCkKKwl7CisJCWlmICghc3RyY21wKG5vcl9jbWRsaW5lLCAiMSIpKQorCQl7CisJCSAgICBnX25vcl9mbGFnID0gMTsKKwkJCS8vcHJpbnRrKCItLS0tLS0tLS0tRW5oYW5jZWRTZWN1cml0eS0tLS0tLS0tLVxuIik7CisJCX0KKwl9CisKKwlwcl9pbmZvKCItLS0tLS0tLS0tc3BpX25hbmRfcHJvYmUtLS0tLS0tLS0tLVxuIik7CiAKIAlzcGlmYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGlmYyksIEdGUF9LRVJORUwpOwogCWlmICghc3BpZmMpCiAJCXJldHVybiAtRU5PTUVNOwotCisJCiAJc29mdF9zcGluX2xvY2soTkFORF9TRkxPQ0spOwogCiAJcmV0ID0gc3BpZmNfaW5pdF9yZXNvdXJjZShwZGV2LCBzcGlmYyk7CkBAIC0xODAwLDEyICsxOTA2LDEyIEBACiAJCXNvZnRfc3Bpbl91bmxvY2soTkFORF9TRkxPQ0spOwogCQlyZXR1cm4gcmV0OwkKIAl9Ci0KLQlyZWFkX29ubHlfcGFydGl0b25zX3RhYmxlX2luaXQoKTsKIAkKKwlyZWFkX29ubHlfcGFydGl0b25zX3RhYmxlX2luaXQoKTsKICAgICBzb2Z0X3NwaW5fdW5sb2NrKE5BTkRfU0ZMT0NLKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNwaWZjKTsKKyAgICBwcmludGsoIi0tLS0tLS0tLS1zcGlfbmFuZF9wcm9iZSBlbmQhLS0tLS0tLS0tLS1cbiIpOwkKIAogCXJldHVybiAwOwogZmFpbGVkX2FsbG9jX21lbWVyeToKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tYWluLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfbWFpbi5jCmluZGV4IDA5NTg2ZDAuLmE0ZDkyNGEgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tYWluLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21haW4uYwpAQCAtNzIxMCw3ICs3MjEwLDcgQEAKICAgICAweDAwZmZjZDgwLAogICAgIDB4MDBmZmNlNzAsCiAgICAgMHgwMGZmY2U4MCwKLSAgICAweDAwZmZjZjdkLAorICAgIDB4MDBmZmNlOTMsCiAgICAgMHgwMGZmY2Y5MCwKICAgICAweDAwZmZjMDgwLAogICAgIDB4MDBmZmMwOTAsCkBAIC03MjQyLDcgKzcyNDIsNyBAQAogICAgIDB4MDBmZmNkODAsCiAgICAgMHgwMGZmY2U3MCwKICAgICAweDAwZmZjZTgwLAotICAgIDB4MDBmZmNmN2QsCisgICAgMHgwMGZmY2U5MywKICAgICAweDAwZmZjZjkwLAogICAgIDB4MDBmZmMwODAsCiAgICAgMHgwMGZmYzA5MCwKQEAgLTczMDEsMzggKzczMDEsMTA4IEBACiAKIHUzMiB3aWZpX3R4Z2Fpbl90YWJsZV8yNGdfMV84ODAwZGNkd1szMl0gPQogewotICAgIDB4MDkwRTIwMTEsIC8vaW5kZXggMAorICAgIDB4MDk2RTIwMTEsIC8vaW5kZXggMAogICAgIDB4MDAwMDQwMDEsCi0gICAgMHgwOTBFMjAxNSwgLy9pbmRleCAxCisgICAgMHgwOTZFMjAxNSwgLy9pbmRleCAxCiAgICAgMHgwMDAwNDAwMSwKLSAgICAweDA5MEUyMDFCLCAvL2luZGV4IDIKKyAgICAweDA5NkUyMDFCLCAvL2luZGV4IDIKICAgICAweDAwMDA0MDAxLAotICAgIDB4MTEwRTIwMTgsIC8vaW5kZXggMworICAgIDB4MTE2RTIwMTgsIC8vaW5kZXggMwogICAgIDB4MDAwMDQwMDEsCi0gICAgMHgxMTBFMjAxRSwgLy9pbmRleCA0CisgICAgMHgxMTZFMjAxRSwgLy9pbmRleCA0CiAgICAgMHgwMDAwNDAwMSwKLSAgICAweDExMEUyMDIzLCAvL2luZGV4IDUKKyAgICAweDExNkUyMDIzLCAvL2luZGV4IDUKICAgICAweDAwMDA0MDAxLAotICAgIDB4MTkwRTIwMjEsIC8vaW5kZXggNgorICAgIDB4MTk2RTIwMjEsIC8vaW5kZXggNgogICAgIDB4MDAwMDQwMDEsCi0gICAgMHgxOTBFMjAyQiwgLy9pbmRleCA3CisgICAgMHgxOTZFMjAyQiwgLy9pbmRleCA3CiAgICAgMHgwMDAwNDAwMSwKLSAgICAweDIxMEUyMDJCLCAvL2luZGV4IDgKKyAgICAweDIxNkUyMDJCLCAvL2luZGV4IDgKICAgICAweDAwMDA0MDAxLAotICAgIDB4MjMwRTIwMjcsIC8vaW5kZXggOQorICAgIDB4MjM2RTIwMjcsIC8vaW5kZXggOQogICAgIDB4MDAwMDQwMDEsCi0gICAgMHgyMzBFMjAzMSwgLy9pbmRleCAxMAorICAgIDB4MjM2RTIwMzEsIC8vaW5kZXggMTAKICAgICAweDAwMDA0MDAxLAotICAgIDB4MjQwRTIwMzksIC8vaW5kZXggMTEKKyAgICAweDI0NkUyMDM5LCAvL2luZGV4IDExCiAgICAgMHgwMDAwNDAwMSwKLSAgICAweDI2MEUyMDM5LCAvL2luZGV4IDEyCisgICAgMHgyNjkyMjAzOSwgLy9pbmRleCAxMgogICAgIDB4MDAwMDQwMDEsCi0gICAgMHgyRTBFMjAzRiwgLy9pbmRleCAxMworICAgIDB4MkU5MjIwM0YsIC8vaW5kZXggMTMKICAgICAweDAwMDA0MDAxLAotICAgIDB4MzY4RTIwM0YsIC8vaW5kZXggMTQKKyAgICAweDM2OTIyMDNGLCAvL2luZGV4IDE0CiAgICAgMHgwMDAwNDAwMSwKLSAgICAweDNFRjIyMDNGLCAvL2luZGV4IDE1Ci0gICAgMHgwMDAwNDAwMQorICAgIDB4M0ZGMjIwM0YsIC8vaW5kZXggMTUKKyAgICAweDAwMDA0MDAxLAorfTsKK3UzMiB3aWZpX3R4Z2Fpbl90YWJsZV8yNGdfODgwMGRjZHdfaFszMl0gPQoreworICAgIDB4QTU1NjI5QzksIC8vaW5kZXggMAorICAgIDB4MDAwMDU4MjUsCisgICAgMHhBRTU2MjlDOSwgLy9pbmRleCAxCisgICAgMHgwMDAwNTgyNSwKKyAgICAweEFENTYyOUNELCAvL2luZGV4IDIKKyAgICAweDAwMDA1ODI1LAorICAgIDB4QUQ1NjI5RDEsIC8vaW5kZXggMworICAgIDB4MDAwMDU4MjUsCisgICAgMHhBRDU2MjlENywgLy9pbmRleCA0CisgICAgMHgwMDAwNTgyNSwKKyAgICAweEFENTYyOURFLCAvL2luZGV4IDUKKyAgICAweDAwMDA1ODI1LAorICAgIDB4QUQ1NjI5RTYsIC8vaW5kZXggNgorICAgIDB4MDAwMDU4MjUsCisgICAgMHhCRDU2MjlFNiwgLy9pbmRleCA3CisgICAgMHgwMDAwNTgyNSwKKyAgICAweEJENTYyOUYwLCAvL2luZGV4IDgKKyAgICAweDAwMDA1ODI1LAorICAgIDB4Q0Q1NjI5RjAsIC8vaW5kZXggOQorICAgIDB4MDAwMDU4MjUsCisgICAgMHhFNTU2MjlGMCwgLy9pbmRleCAxMAorICAgIDB4MDAwMDU4MjUsCisgICAgMHhFNTU2MjlGRiwgLy9pbmRleCAxMQorICAgIDB4MDAwMDU4MjUsCisgICAgMHhFNTU2MjlGRiwgLy9pbmRleCAxMgorICAgIDB4MDAwMDI4MjUsCisgICAgMHhFNzU2MjlGRiwgLy9pbmRleCAxMworICAgIDB4MDAwMDI4MjUsCisgICAgMHhGRjU2MjlGRiwgLy9pbmRleCAxNAorICAgIDB4MDAwMDE4MjUsCisgICAgMHhGRjU2MjhGRiwgLy9pbmRleCAxNQorICAgIDB4MDAwMDEwMjUsCit9OwordTMyIHdpZmlfdHhnYWluX3RhYmxlXzI0Z18xXzg4MDBkY2R3X2hbMzJdID0KK3sKKyAgICAweDk0MUEyMDQ4LCAvL2luZGV4IDAKKyAgICAweDAwMDAxODI1LAorICAgIDB4OTYxQTIwNDgsIC8vaW5kZXggMQorICAgIDB4MDAwMDE4MjUsCisgICAgMHg5RDFBMjA0OCwgLy9pbmRleCAyCisgICAgMHgwMDAwMTgyNSwKKyAgICAweDlBMUEyMDRGLCAvL2luZGV4IDMKKyAgICAweDAwMDAxODI1LAorICAgIDB4OTYxQTIwNEYsIC8vaW5kZXggNAorICAgIDB4MDAwMDE4MjUsCisgICAgMHg5QTFBMjA1NywgLy9pbmRleCA1CisgICAgMHgwMDAwMTgyNSwKKyAgICAweDlDMUEyMDU3LCAvL2luZGV4IDYKKyAgICAweDAwMDAxODI1LAorICAgIDB4QTMxQTIwNUIsIC8vaW5kZXggNworICAgIDB4MDAwMDE4MjUsCisgICAgMHhBQjFBMjA1QiwgLy9pbmRleCA4CisgICAgMHgwMDAwMTgyNSwKKyAgICAweEFEMUEyMDVCLCAvL2luZGV4IDkKKyAgICAweDAwMDAxODI1LAorICAgIDB4QTcxQTIwNjQsIC8vaW5kZXggMTAKKyAgICAweDAwMDAxODI1LAorICAgIDB4QUQxQTIwNzAsIC8vaW5kZXggMTEKKyAgICAweDAwMDAxODI1LAorICAgIDB4QUQ3MjIwN0YsIC8vaW5kZXggMTIKKyAgICAweDAwMDAxODI1LAorICAgIDB4QkNBRTIwN0YsIC8vaW5kZXggMTMKKyAgICAweDAwMDAxODI1LAorICAgIDB4QkZCMjIwN0YsIC8vaW5kZXggMTQKKyAgICAweDAwMDAxODI1LAorICAgIDB4RDczQTIwN0YsIC8vaW5kZXggMTUKKyAgICAweDAwMDAxODI1LAogfTsKIHUzMiB3aWZpX3J4Z2Fpbl90YWJsZV8yNGdfMjBtXzg4MDBkY2R3WzY0XSA9IHsKICAgICAweDgyZjI4MmQxLApAQCAtNzM5Niw3ICs3NDY2LDcgQEAKICAgICAweDgwODA4NDE5LAogICAgIDB4MDAwMDAwZjAsCiAgICAgMHgwZWYyOWFlNiwKLSAgICAweDk1OWY1OTJjLC8vLy8vLzB4OTU5ZjU5MjQsICAgICAgICAgICAvL2xvZnQgWzM1OjM0XT0zCisgICAgMHg5NTlmNTkyNCwgICAgICAgICAgIC8vbG9mdCBbMzU6MzRdPTMKICAgICAweDgwODA4NDE5LAogICAgIDB4MDAwMDAwZjAKIH07CkBAIC03NTE5LDYgKzc1ODksMzAgQEAKICAgICB7MHgwMDExMGJmMCwgMHgwMDE4MTAwMX0sCiB9OwogCitpbnQgYWljd2ZfbWlzY19yYW1faW5pdF84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgY29uc3QgdWludDMyX3QgY2ZnX2Jhc2UgPSAweDEwMTY0OworICAgIHN0cnVjdCBkYmdfbWVtX3JlYWRfY2ZtIGNmbTsKKyAgICB1aW50MzJfdCBtaXNjX3JhbV9hZGRyOworICAgIHVpbnQzMl90IG1pc2NfcmFtX3NpemUgPSAxMjsKKyAgICBpbnQgaTsKKyAgICByZXQgPSByd254X3NlbmRfZGJnX21lbV9yZWFkX3JlcShyd254X2h3LCBjZmdfYmFzZSArIDB4MTQsICZjZm0pOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgcHJpbnRrKCJyZiBtaXNjIHJhbVsweCV4XSByZCBmYWlsOiAlZFxuIiwgY2ZnX2Jhc2UgKyAweDE0LCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBtaXNjX3JhbV9hZGRyID0gY2ZtLm1lbWRhdGE7CisgICAgcHJpbnRrKCJtaXNjX3JhbV9hZGRyPSV4XG4iLCBtaXNjX3JhbV9hZGRyKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgKG1pc2NfcmFtX3NpemUgLyA0KTsgaSsrKSB7CisgICAgICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX3dyaXRlX3JlcShyd254X2h3LCBtaXNjX3JhbV9hZGRyICsgaSAqIDQsIDApOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICBwcmludGsoInJmIG1pc2MgcmFtWzB4JXhdIHdyIGZhaWw6ICVkXG4iLCAgbWlzY19yYW1fYWRkciArIGkgKiA0LCByZXQpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQogc3RhdGljIHZvaWQgcGF0Y2hfY29uZmlnKHN0cnVjdCByd254X2h3ICpyd254X2h3KQogewogICAgICNpZmRlZiBDT05GSUdfUk9NX1BBVENIX0VOCkBAIC03NjkzLDE0ICs3Nzg3LDE1IEBACiAgICAgezB4NDAxMDAwMUMsIDB4MDAwMDAwMDB9LAogfTsKIAotdTMyIHN5c2NmZ190YmxfbWFza2VkW11bM10gPSB7Ci0gICAgI2lmZGVmIENPTkZJR19QTUlDX1NFVFRJTkcKK3UzMiBzeXNjZmdfdGJsX21hc2tlZF84ODAwZGNbXVszXSA9IHsKKyAgICAvLyNpZmRlZiBDT05GSUdfUE1JQ19TRVRUSU5HCiAgICAgI2lmIGRlZmluZWQoQ09ORklHX1ZSRl9EQ0RDX01PREUpCiAgICAgezB4NzAwMDIxNkMsICgweDMgPDwgMiksICgweDEgPDwgMil9LCAvLyB2cmYgc2VsZWN0IGRjZGMgbW9kZQogICAgIHsweDcwMDAyMUJDLCAoMHgzIDw8IDIpLCAoMHgxIDw8IDIpfSwKICAgICB7MHg3MDAwMjExOCwgKCgweDcgPDwgNCkgfCAoMHgxIDw8IDcpKSwgKCgweDIgPDwgNCkgfCAoMHgxIDw8IDcpKX0sCiAgICAgezB4NzAwMDIxMDQsICgoMHgzRiA8PCAwKSB8ICgweDEgPDwgNikpLCAoKDB4MiA8PCAwKSB8ICgweDEgPDwgNikpfSwKICAgICB7MHg3MDAwMjEwQywgKCgweDNGIDw8IDApIHwgKDB4MSA8PCA2KSksICgoMHgyIDw8IDApIHwgKDB4MSA8PCA2KSl9LAorICAgIHsweDcwMDAyMTcwLCAoMHhGIDw8IDApLCAoMHgxIDw8IDApfSwKICAgICB7MHg3MDAwMjE5MCwgKDB4M0YgPDwgMCksICgyNCA8PCAwKX0sCiAgICAgezB4NzAwMDIxQ0MsICgoMHg3IDw8IDQpIHwgKDB4MSA8PCA3KSksICgoMHgwIDw8IDQpIHwgKDB4MCA8PCA3KSl9LAogICAgIHsweDcwMDAxMEEwLCAoMHgxIDw8IDExKSwgKDB4MSA8PCAxMSl9LApAQCAtNzcwOCwxMSArNzgwMyw1MyBAQAogICAgIHsweDcwMDAxMDM4LCAoMHgxIDw8IDgpLCAoMHgxIDw8IDgpfSwKICAgICB7MHg3MDAwMTA5NCwgKDB4MyA8PCAyKSwgKDB4MCA8PCAyKX0sCiAgICAgezB4NzAwMDIxRDAsICgoMHgxIDw8IDUpIHwgKDB4MSA8PCA2KSksICgoMHgxIDw8IDUpIHwgKDB4MSA8PCA2KSl9LAotICAgIHsweDcwMDAxMDAwLCAoKDB4MSA8PCAwKSB8ICgweDEgPDwgOCkgfCAoMHgxIDw8IDE1KSB8ICgweDEgPDwgMjApIHwgKDB4MSA8PCAyMikpLAotICAgICAgICAgICAgICAgICAoKDB4MSA8PCAwKSB8ICgweDEgPDwgOCkgfCAoMHgxIDw8IDE1KSB8ICgweDEgPDwgMjApIHwgKDB4MCA8PCAyMikpfSwKKyAgICB7MHg3MDAwMTAwMCwgKCgweDEgPDwgMCkgfCAoMHgxIDw8IDIwKSB8ICgweDEgPDwgMjIpKSwKKyAgICAgICAgICAgICAgICAgKCgweDEgPDwgMCkgfCAoMHgxIDw8IDIwKSB8ICgweDAgPDwgMjIpKX0sCisgICAgezB4NzAwMDEwMjgsICgweGYgPDwgMiksICgweDEgPDwgMil9LAorICAgICNlbHNlCisgICAgezB4NzAwMDIxNkMsICgweDMgPDwgMiksICgweDEgPDwgMil9LCAvLyBwbWljX3BtdV9pbml0CisgICAgezB4NzAwMDIxQkMsICgweDMgPDwgMiksICgweDEgPDwgMil9LAorICAgIHsweDcwMDAyMTE4LCAoKDB4NyA8PCA0KSB8ICgweDEgPDwgNykpLCAoKDB4MiA8PCA0KSB8ICgweDEgPDwgNykpfSwKKyAgICB7MHg3MDAwMjEwNCwgKCgweDNGIDw8IDApIHwgKDB4MSA8PCA2KSksICgoMHgyIDw8IDApIHwgKDB4MSA8PCA2KSl9LAorICAgIHsweDcwMDAyMTBDLCAoKDB4M0YgPDwgMCkgfCAoMHgxIDw8IDYpKSwgKCgweDIgPDwgMCkgfCAoMHgxIDw8IDYpKX0sCisgICAgezB4NzAwMDIxNzAsICgweEYgPDwgMCksICgweDEgPDwgMCl9LAorICAgIHsweDcwMDAyMTkwLCAoMHgzRiA8PCAwKSwgKDI0IDw8IDApfSwKKyAgICB7MHg3MDAwMjFDQywgKCgweDcgPDwgNCkgfCAoMHgxIDw8IDcpKSwgKCgweDAgPDwgNCkgfCAoMHgwIDw8IDcpKX0sCisgICAgezB4NzAwMDEwQTAsICgweDEgPDwgMTEpLCAoMHgxIDw8IDExKX0sCisgICAgezB4NzAwMDEwMzQsICgoMHgxIDw8IDIwKSB8ICgweDcgPDwgMjYpKSwgKCgweDAgPDwgMjApIHwgKDB4MiA8PCAyNikpfSwKKyAgICB7MHg3MDAwMTAzOCwgKDB4MSA8PCA4KSwgKDB4MSA8PCA4KX0sCisgICAgezB4NzAwMDEwOTQsICgweDMgPDwgMiksICgweDAgPDwgMil9LAorICAgIHsweDcwMDAyMUQwLCAoKDB4MSA8PCA1KSB8ICgweDEgPDwgNikpLCAoKDB4MSA8PCA1KSB8ICgweDEgPDwgNikpfSwKKyAgICB7MHg3MDAwMTAwMCwgKCgweDEgPDwgMCkgfCAoMHgxIDw8IDIwKSB8ICgweDEgPDwgMjIpKSwKKyAgICAgICAgICAgICAgICAgKCgweDAgPDwgMCkgfCAoMHgxIDw8IDIwKSB8ICgweDAgPDwgMjIpKX0sCiAgICAgezB4NzAwMDEwMjgsICgweGYgPDwgMiksICgweDEgPDwgMil9LAogICAgICNlbmRpZgorICAgIHsweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwgLy8gbGFzdCBvbmUKK307Cit1MzIgc3lzY2ZnX3RibF9tYXNrZWRfODgwMGRjX2hbXVszXSA9IHsKKyAgICB7MHg3MDAwMjE2QywgKCgweDMgPDwgMikgfCAoMHgzIDw8IDQpKSwgKCgweDIgPDwgMikgfCAoMHgyIDw8IDQpKX0sIC8vIHBtaWNfcG11X2luaXQKKyAgICB7MHg3MDAwMjEzOCwgKDB4RkYgPDwgMCksICgweEZGIDw8IDApfSwKKyAgICB7MHg3MDAwMjEzQywgKDB4RkYgPDwgMCksICgweEZGIDw8IDApfSwKKyAgICB7MHg3MDAwMjE0NCwgKDB4RkYgPDwgMCksICgweEZGIDw8IDApfSwKKyAgICB7MHg3MDAwMjFCQywgKDB4MyA8PCAyKSwgKDB4MSA8PCAyKX0sCisgICAgezB4NzAwMDIxMTgsICgoMHg3IDw8IDQpIHwgKDB4MSA8PCA3KSksICgoMHgyIDw8IDQpIHwgKDB4MSA8PCA3KSl9LAorICAgIHsweDcwMDAyMTA0LCAoKDB4M0YgPDwgMCkgfCAoMHgxIDw8IDYpKSwgKCgweDIgPDwgMCkgfCAoMHgxIDw8IDYpKX0sCisgICAgezB4NzAwMDIxMEMsICgoMHgzRiA8PCAwKSB8ICgweDEgPDwgNikpLCAoKDB4MiA8PCAwKSB8ICgweDEgPDwgNikpfSwKKyAgICB7MHg3MDAwMjE3MCwgKDB4RiA8PCAwKSwgKDB4MSA8PCAwKX0sCisgICAgezB4NzAwMDIxOTAsICgweDNGIDw8IDApLCAoMjQgPDwgMCl9LAorICAgIHsweDcwMDAyMUNDLCAoKDB4NyA8PCA0KSB8ICgweDEgPDwgNykpLCAoKDB4MCA8PCA0KSB8ICgweDAgPDwgNykpfSwKKyAgICB7MHg3MDAwMTBBMCwgKDB4MSA8PCAxMSksICgweDEgPDwgMTEpfSwKKyAgICB7MHg3MDAwMTAzOCwgKDB4MSA8PCA4KSwgKDB4MSA8PCA4KX0sCisgICAgezB4NzAwMDEwOTQsICgweDMgPDwgMiksICgweDAgPDwgMil9LAorICAgIHsweDcwMDAyMUQwLCAoKDB4MSA8PCA1KSB8ICgweDEgPDwgNikpLCAoKDB4MSA8PCA1KSB8ICgweDEgPDwgNikpfSwKKyAgICAjaWYgZGVmaW5lZChDT05GSUdfVlJGX0RDRENfTU9ERSkKKyAgICB7MHg3MDAwMTAwMCwgKCgweDEgPDwgMCkgfCAoMHgxIDw8IDIwKSB8ICgweDEgPDwgMjIpKSwKKyAgICAgICAgICAgICAgICAgKCgweDEgPDwgMCkgfCAoMHgxIDw8IDIwKSB8ICgweDAgPDwgMjIpKX0sCisgICAgI2Vsc2UKKyAgICB7MHg3MDAwMTAwMCwgKCgweDEgPDwgMCkgfCAoMHgxIDw8IDIwKSB8ICgweDEgPDwgMjIpKSwKKyAgICAgICAgICAgICAgICAgKCgweDAgPDwgMCkgfCAoMHgxIDw8IDIwKSB8ICgweDAgPDwgMjIpKX0sCiAgICAgI2VuZGlmIC8qIENPTkZJR19QTUlDX1NFVFRJTkcgKi8KKyAgICB7MHg3MDAwMTAyOCwgKDB4ZiA8PCAyKSwgKDB4MSA8PCAyKX0sCiAgICAgezB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LCAvLyBsYXN0IG9uZQogfTsKIApAQCAtNzcyMyw2ICs3ODYwLDcgQEAKIHN0YXRpYyB2b2lkIHN5c3RlbV9jb25maWcoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpCiB7CiAgICAgaW50IHN5c2NmZ19udW07CisgICAgYXJyYXkzX3RibF90IHBfc3lzY2ZnX21za190Ymw7CiAgICAgaW50IHJldCwgY250OwogICAgIGNvbnN0IHUzMiBtZW1fYWRkciA9IDB4NDA1MDAwMDA7CiAgICAgc3RydWN0IGRiZ19tZW1fcmVhZF9jZm0gcmRfbWVtX2FkZHJfY2ZtOwpAQCAtNzc0NSw2ICs3ODgzLDggQEAKICAgICBjaGlwX3N1Yl9pZCA9ICh1OCkocmRfbWVtX2FkZHJfY2ZtLm1lbWRhdGEpOwogICAgIC8vcHJpbnRrKCIleD0leFxuIiwgcmRfbWVtX2FkZHJfY2ZtLm1lbWFkZHIsIHJkX21lbV9hZGRyX2NmbS5tZW1kYXRhKTsKICAgICBwcmludGsoImNoaXBfaWQ9JXgsIGNoaXBfc3ViX2lkPSV4XG4iLCBjaGlwX2lkLCBjaGlwX3N1Yl9pZCk7CisgICAgaWYgKElTX0NISVBfSURfSCgpKQorCXByaW50aygiSVNfQ0hJUF9JRF9IXG4iKTsKIAogICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX3JlYWRfcmVxKHJ3bnhfaHcsIDB4NDA1MDAwMTAsICZyZF9tZW1fYWRkcl9jZm0pOwogCXByaW50aygiWzB4NDA1MDAwMTBdPSV4XG4iLCByZF9tZW1fYWRkcl9jZm0ubWVtZGF0YSk7CkBAIC03NzkxLDE1ICs3OTMxLDI2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzeXNjZmdfbnVtID0gc2l6ZW9mKHN5c2NmZ190YmxfbWFza2VkKSAvIHNpemVvZih1MzIpIC8gMzsKKyAgICBpZiAoSVNfQ0hJUF9JRF9IKCkpIHsKKyAgICAgICAgc3lzY2ZnX251bSA9IHNpemVvZihzeXNjZmdfdGJsX21hc2tlZF84ODAwZGNfaCkgLyBzaXplb2YodTMyKSAvIDM7CisgICAgICAgIHBfc3lzY2ZnX21za190YmwgPSBzeXNjZmdfdGJsX21hc2tlZF84ODAwZGNfaDsKKyAgICB9IGVsc2UgeworICAgICAgICBzeXNjZmdfbnVtID0gc2l6ZW9mKHN5c2NmZ190YmxfbWFza2VkXzg4MDBkYykgLyBzaXplb2YodTMyKSAvIDM7CisgICAgICAgIHBfc3lzY2ZnX21za190YmwgPSBzeXNjZmdfdGJsX21hc2tlZF84ODAwZGM7CisgICAgfQogICAgIGZvciAoY250ID0gMDsgY250IDwgc3lzY2ZnX251bTsgY250KyspIHsKLSAgICAgICAgaWYgKHN5c2NmZ190YmxfbWFza2VkW2NudF1bMF0gPT0gMHgwMDAwMDAwMCkgeworICAgICAgICBpZiAocF9zeXNjZmdfbXNrX3RibFtjbnRdWzBdID09IDB4MDAwMDAwMDApIHsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKHBfc3lzY2ZnX21za190YmxbY250XVswXSA9PSAweDcwMDAxMDAwKSB7CisgICAgICAgICAgICBpZiAoY2hpcF9tY3VfaWQgPT0gMCkgeworICAgICAgICAgICAgICAgIHBfc3lzY2ZnX21za190YmxbY250XVsxXSB8PSAoKDB4MSA8PCA4KSB8ICgweDEgPDwgMTUpKTsgLy8gbWFzaworICAgICAgICAgICAgICAgIHBfc3lzY2ZnX21za190YmxbY250XVsyXSB8PSAoKDB4MSA8PCA4KSB8ICgweDEgPDwgMTUpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXQgPSByd254X3NlbmRfZGJnX21lbV9tYXNrX3dyaXRlX3JlcShyd254X2h3LAotICAgICAgICAgICAgc3lzY2ZnX3RibF9tYXNrZWRbY250XVswXSwgc3lzY2ZnX3RibF9tYXNrZWRbY250XVsxXSwgc3lzY2ZnX3RibF9tYXNrZWRbY250XVsyXSk7CisgICAgICAgICAgICBwX3N5c2NmZ19tc2tfdGJsW2NudF1bMF0sIHBfc3lzY2ZnX21za190YmxbY250XVsxXSwgcF9zeXNjZmdfbXNrX3RibFtjbnRdWzJdKTsKICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgcHJpbnRrKCIleCBtYXNrIHdyaXRlIGZhaWw6ICVkXG4iLCBzeXNjZmdfdGJsX21hc2tlZFtjbnRdWzBdLCByZXQpOworICAgICAgICAgICAgcHJpbnRrKCIleCBtYXNrIHdyaXRlIGZhaWw6ICVkXG4iLCBwX3N5c2NmZ19tc2tfdGJsW2NudF1bMF0sIHJldCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC03OTc1LDYgKzgxMjYsOSBAQAogCiAgICAgaWYgKChyZXQgPSByd254X3BsYXRmb3JtX29uKHJ3bnhfaHcsIE5VTEwpKSkKICAgICAgICAgZ290byBlcnJfcGxhdG9uOworI2lmIDAvLyFkZWZpbmVkKENPTkZJR19EUEQpCisJYWljd2ZfbWlzY19yYW1faW5pdF84ODAwZGMocndueF9odyk7CisjZW5kaWYKIAogICAgIHBhdGNoX2NvbmZpZyhyd254X2h3KTsKIApAQCAtODA4MywyMCArODIzNywyNyBAQAogCiAKICAgICBpZiAodGVzdG1vZGUgPT0gMCkgeworCQlpZiAoSVNfQ0hJUF9JRF9IKCkpIHsKKwkJCWlmICgocmV0ID0gcndueF9zZW5kX3JmX2NvbmZpZ19yZXEocndueF9odywgMCwgICAgMSwgKHU4X2wgKil3aWZpX3R4Z2Fpbl90YWJsZV8yNGdfODgwMGRjZHdfaCwgMTI4KSkpCisJCQkJZ290byBlcnJfbG1hY19yZXFzOworCQkJaWYgKChyZXQgPSByd254X3NlbmRfcmZfY29uZmlnX3JlcShyd254X2h3LCAxNiwgICAgMSwgKHU4X2wgKil3aWZpX3R4Z2Fpbl90YWJsZV8yNGdfMV84ODAwZGNkd19oLCAxMjgpKSkKKwkJCQlnb3RvIGVycl9sbWFjX3JlcXM7CisJCX0gZWxzZSB7CiAJCWlmICgocmV0ID0gcndueF9zZW5kX3JmX2NvbmZpZ19yZXEocndueF9odywgMCwJMSwgKHU4X2wgKil3aWZpX3R4Z2Fpbl90YWJsZV8yNGdfODgwMGRjZHcsIDEyOCkpKQogICAgICAgICAgICAgZ290byBlcnJfbG1hY19yZXFzOwogCiAgICAgICAgIGlmICgocmV0ID0gcndueF9zZW5kX3JmX2NvbmZpZ19yZXEocndueF9odywgMTYsCTEsICh1OF9sICopd2lmaV90eGdhaW5fdGFibGVfMjRnXzFfODgwMGRjZHcsIDEyOCkpKQogCQkJZ290byBlcnJfbG1hY19yZXFzOworCQl9CiAJCWlmICgocmV0ID0gcndueF9zZW5kX3JmX2NvbmZpZ19yZXEocndueF9odywgMCwJMCwgKHU4X2wgKil3aWZpX3J4Z2Fpbl90YWJsZV8yNGdfMjBtXzg4MDBkY2R3LCAyNTYpKSkKICAgICAgICAgICAgIGdvdG8gZXJyX2xtYWNfcmVxczsKIAogCQlpZiAoKHJldCA9IHJ3bnhfc2VuZF9yZl9jb25maWdfcmVxKHJ3bnhfaHcsIDMyLCAgMCwgKHU4X2wgKil3aWZpX3J4Z2Fpbl90YWJsZV8yNGdfNDBtXzg4MDBkY2R3LCAyNTYpKSkKICAgICAgICAgICAgIGdvdG8gZXJyX2xtYWNfcmVxczsKIAorCX0KICAgICAgICAgaWYgKChyZXQgPSByd254X3NlbmRfcmZfY2FsaWJfcmVxKHJ3bnhfaHcsICZjZm0pKSkgewogICAgICAgICAgICAgZ290byBlcnJfbG1hY19yZXFzOwotICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKChyZXQgPSByd254X3NlbmRfZ2V0X21hY2FkZHJfcmVxKHJ3bnhfaHcsIChzdHJ1Y3QgbW1fZ2V0X21hY19hZGRyX2NmbSAqKW1hY19hZGRyX2VmdXNlKSkpCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfbWFpbi5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21haW4uaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDVlODI5NTYuLjdhOGYxNjYKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21haW4uaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfbWFpbi5oCkBAIC0yOCw2ICsyOCw5IEBACiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCiBleHRlcm4gaW50IHRlc3Rtb2RlOwordHlwZWRlZiB1MzIgKCphcnJheTNfdGJsX3QpWzNdOworI2RlZmluZSBDSElQX0lEX0hfTUFTSyAgMHhDMAorI2RlZmluZSBJU19DSElQX0lEX0goKSAgKChjaGlwX2lkICYgQ0hJUF9JRF9IX01BU0spID09IENISVBfSURfSF9NQVNLKQogCiBpbnQgcndueF9jZmc4MDIxMV9pbml0KHN0cnVjdCByd254X3BsYXQgKnJ3bnhfcGxhdCwgdm9pZCAqKnBsYXRmb3JtX2RhdGEpOwogdm9pZCByd254X2NmZzgwMjExX2RlaW5pdChzdHJ1Y3QgcndueF9odyAqcndueF9odyk7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfbW9kX3BhcmFtcy5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21vZF9wYXJhbXMuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDZlOTRkOGQuLjFiZDM2OWIKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21vZF9wYXJhbXMuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfbW9kX3BhcmFtcy5jCkBAIC0zMyw3ICszMyw3IEBACiAJQ09NTU9OX1BBUkFNKHZodF9vbiwgdHJ1ZSwgdHJ1ZSkKIAlDT01NT05fUEFSQU0oaGVfb24sIHRydWUsIHRydWUpCiAJQ09NTU9OX1BBUkFNKG1jc19tYXAsIElFRUU4MDIxMV9WSFRfTUNTX1NVUFBPUlRfMF85LCBJRUVFODAyMTFfVkhUX01DU19TVVBQT1JUXzBfOSkKLQlDT01NT05fUEFSQU0oaGVfbWNzX21hcCwgSUVFRTgwMjExX0hFX01DU19TVVBQT1JUXzBfOSwgSUVFRTgwMjExX0hFX01DU19TVVBQT1JUXzBfOSkKKwlDT01NT05fUEFSQU0oaGVfbWNzX21hcCwgSUVFRTgwMjExX0hFX01DU19TVVBQT1JUXzBfMTEsIElFRUU4MDIxMV9IRV9NQ1NfU1VQUE9SVF8wXzExKQogCUNPTU1PTl9QQVJBTShoZV91bF9vbiwgZmFsc2UsIGZhbHNlKQogCUNPTU1PTl9QQVJBTShsZHBjX29uLCB0cnVlLCB0cnVlKQogCUNPTU1PTl9QQVJBTShzdGJjX29uLCB0cnVlLCB0cnVlKQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvenZuZXQvenZuZXRfZGV2LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC96dm5ldC96dm5ldF9kZXYuYwppbmRleCA2ZTIyNzc5Li40ZGQyYTlkIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC96dm5ldC96dm5ldF9kZXYuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC96dm5ldC96dm5ldF9kZXYuYwpAQCAtMTA2LDE0ICsxMDYsMTQgQEAKIA0KIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzX2NhcCh1bnNpZ25lZCBsb25nIHZpcnQpDQogew0KLQlpZih2aXJ0ID49ICh1bnNpZ25lZCBsb25nKXZpcl9hZGRyX2NhcCAmJiB2aXJ0IDw9ICgodW5zaWduZWQgbG9uZyl2aXJfYWRkcl9jYXArRERSX0JBU0VfTEVOX0NBUCkpIA0KKwlpZih2aXJ0ID49ICh1bnNpZ25lZCBsb25nKXZpcl9hZGRyX2NhcCkvLyAmJiB2aXJ0IDw9ICgodW5zaWduZWQgbG9uZyl2aXJfYWRkcl9jYXArRERSX0JBU0VfTEVOX0NBUCkNCiAJCXJldHVybiBERFJfQkFTRV9DQVBfQUREUl9QQSArICh2aXJ0IC0gKHVuc2lnbmVkIGxvbmcpdmlyX2FkZHJfY2FwKTsNCiAJcmV0dXJuIE5VTEw7DQogfQ0KIA0KIHVuc2lnbmVkIGxvbmcgcGh5c190b192aXJ0X2NhcCh1bnNpZ25lZCBsb25nIHBoeXMpDQogew0KLQlpZihwaHlzID49IEREUl9CQVNFX0NBUF9BRERSX1BBICYmIHBoeXMgPD0gKEREUl9CQVNFX0NBUF9BRERSX1BBICsgRERSX0JBU0VfTEVOX0NBUCkpIA0KKwlpZihwaHlzID49IEREUl9CQVNFX0NBUF9BRERSX1BBKS8vICYmIHBoeXMgPD0gKEREUl9CQVNFX0NBUF9BRERSX1BBICsgRERSX0JBU0VfTEVOX0NBUCkNCiAJCXJldHVybiAodW5zaWduZWQgbG9uZyl2aXJfYWRkcl9jYXAgKyAocGh5cyAtIEREUl9CQVNFX0NBUF9BRERSX1BBKTsNCiAJcmV0dXJuIE5VTEw7DQogfQ0KQEAgLTI0Myw3ICsyNDMsNyBAQAogCXVuc2lnbmVkIGludCBzaXplOw0KIAlpbnQgICAgICAgICAgbGVuOw0KIAl6dl9pbmZvKCJidWlsZCAweCV4IDB4JXggJWQgJWQiLCBwYnVmX3RlbXAtPmJ1ZmYsIHBidWZfdGVtcC0+aGVhZCwgcGJ1Zl90ZW1wLT5kYXRhX29mZiwgcGJ1Zl90ZW1wLT5sZW4pOw0KLQlpZigodW5zaWduZWQgbG9uZyApcGJ1Zl90ZW1wLT5oZWFkIDwgRERSX0JBU0VfQ0FQX0FERFJfUEEgfHwgKHVuc2lnbmVkIGxvbmcgKXBidWZfdGVtcC0+aGVhZCA+IChERFJfQkFTRV9DQVBfQUREUl9QQSArIEREUl9CQVNFX0xFTl9DQVApKXsNCisJaWYoKHVuc2lnbmVkIGxvbmcgKXBidWZfdGVtcC0+aGVhZCA8IEREUl9CQVNFX0NBUF9BRERSX1BBKXsvLyB8fCAodW5zaWduZWQgbG9uZyApcGJ1Zl90ZW1wLT5oZWFkID4gKEREUl9CQVNFX0NBUF9BRERSX1BBICsgRERSX0JBU0VfTEVOX0NBUCkNCiAJCXp2X2VycigiZXJyIDB4JXggMHgleCAlZCAlZCIsIHBidWZfdGVtcC0+YnVmZiwgcGJ1Zl90ZW1wLT5oZWFkLCBwYnVmX3RlbXAtPmRhdGFfb2ZmLCBwYnVmX3RlbXAtPmxlbik7DQogCQlwYW5pYygiYWRkciBpcyBub3QgQ0FQQlVGIG1lbSEhISIpOw0KIAkJcmV0dXJuIE5VTEw7DQpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQkJaWYocGN1X0NvcmVJc0FjdGl2ZSgyKSA9PSAwKXsNCiAJCQkJCW5ldC0+c3RhdHMudHhfZXJyb3JzKys7DQogCQkJCQluZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsNCi0JCQkJCXp2X2VycigiY2FwIHBzbSB6dm5ldCBkcm9wIHY0ISIpOw0KKwkJCQkJLy96dl9lcnIoImNhcCBwc20genZuZXQgZHJvcCB2NCEiKTsNCiAJCQkJCWtmcmVlX3NrYihza2IpOw0KIAkJCQkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7DQogCQkJCX0NCkBAIC00NDksNyArNDQ5LDcgQEAKIAkJCQlpZihwY3VfQ29yZUlzQWN0aXZlKDIpID09IDApew0KIAkJCQkJbmV0LT5zdGF0cy50eF9lcnJvcnMrKzsNCiAJCQkJCW5ldC0+c3RhdHMudHhfZHJvcHBlZCsrOw0KLQkJCQkJenZfZXJyKCJjYXAgcHNtIHp2bmV0IGRyb3AgdjYhIik7DQorCQkJCQkvL3p2X2VycigiY2FwIHBzbSB6dm5ldCBkcm9wIHY2ISIpOw0KIAkJCQkJa2ZyZWVfc2tiKHNrYik7DQogCQkJCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsNCiAJCQkJfQ0KQEAgLTExODMsOCArMTE4Myw4IEBACiAJICAgICAgICByZXR1cm4gUFRSX0VSUih0aCk7DQogCSAgICB9DQogI2VuZGlmDQotCQl2aXJfYWRkcl9jYXAgPSBpb3JlbWFwX2NhY2hlZChERFJfQkFTRV9DQVBfQUREUl9QQSwgRERSX0JBU0VfTEVOX0NBUCk7DQotCQl6dl93YXJuKCJ2aXJfYWRkcl9jYXAgdmlyPTB4JXggcGh5PTB4JXggbGVuPTB4JXgiLCB2aXJfYWRkcl9jYXAsIEREUl9CQVNFX0NBUF9BRERSX1BBLCBERFJfQkFTRV9MRU5fQ0FQKTsNCisJCXZpcl9hZGRyX2NhcCA9IGlvcmVtYXBfY2FjaGVkKEREUl9CQVNFX0NBUF9BRERSX1BBLCAweDIwMDAwMDAwKTsvL9OzyeSzpLbIyrnTw8nPz941MTJNIEREUl9CQVNFX0xFTl9DQVANCisJCXp2X3dhcm4oInZpcl9hZGRyX2NhcCB2aXI9MHgleCBwaHk9MHgleCBsZW49MHgleCIsIHZpcl9hZGRyX2NhcCwgRERSX0JBU0VfQ0FQX0FERFJfUEEsIDB4MjAwMDAwMDApOw0KIAkJaWYodmlyX2FkZHJfY2FwID09IE5VTEwpDQogCQl7DQogCQkJenZfZXJyKCJDQVAgbW1hcCBmYWlsZWQuXG4iKTsNCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3BzYWRhcHRlci9wc2FkYXB0ZXIuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvcHNhZGFwdGVyL3BzYWRhcHRlci5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNjZhZjcwZS4uZWY4NzQ0ZgotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3BzYWRhcHRlci9wc2FkYXB0ZXIuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3BzYWRhcHRlci9wc2FkYXB0ZXIuYwpAQCAtMTU5LDYgKzE1OSwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChrZXJuZWxfc3lzX29wZW4pOwogCitsb25nIGtlcm5lbF9zeXNfaW9jdGwoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworICAgICAgIHJldHVybiBzeXNfaW9jdGwoZmlsZW5hbWUsY21kLGFyZyk7Cit9CitFWFBPUlRfU1lNQk9MKGtlcm5lbF9zeXNfaW9jdGwpOworCiBsb25nIGtlcm5lbF9zeXNfYWNjZXNzKGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50IG1vZGUpCiB7CiAJcmV0dXJuIHN5c19hY2Nlc3MoZmlsZW5hbWUsIG1vZGUpOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL01ha2VmaWxlIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL01ha2VmaWxlCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMjdjMWEwMS4uNDkxYzAwNwotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvTWFrZWZpbGUKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL01ha2VmaWxlCkBAIC04LDYgKzgsOSBAQAogaWZuZGVmIENPTkZJR19TWVNURU1fQ0FQCiBvYmoteQkrPSBlZnVzZS8KIGVuZGlmCitpZm5kZWYgQ09ORklHX1NQSV9aWElDX05PUgorb2JqLXkJKz0gb3RwLworZW5kaWYKIGVuZGlmCiBvYmoteQkrPSB0c2MvCiBvYmoteQkrPSBkZHIvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL290cC9NYWtlZmlsZSBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9vdHAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2NhZTI1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9vdHAvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciBycG0gZHJpdmVyLgorIworCitvYmoteQkrPSBvdHBfengubworCisjY2NmbGFncy15ICs9IC1JJChUT1BESVIpL2NwL3BzL21vZGVtL2NvbS9pbmMKKwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL290cC9ub3IuaCBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9vdHAvbm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGJiY2FlYQotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9vdHAvbm9yLmgKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBGcmVlc2NhbGUgUXVhZFNQSSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisKKyNkZWZpbmUgU0ZfREFUQQkgIAkJKFpYMjlfU1BJRkMwX1BIWVMrMHgzOCkKKworI2RlZmluZSBBTElHTjY0KHgpIAkJCQkJKCgoeCkgKyA2MykgJiAweEZGRkZGRkMwKQorCisgCitzdHJ1Y3Qgc3BpZmNfbm9yX3JlZ190Cit7CisgICAgdWludDMyX3QgICAgIFZFUl9SRUc7CQkJCQkvLzB4MDAKKyAgICB1aW50MzJfdCAgICAgU0ZDX1NUQVJUOyAgICAgICAgICAgICAgICAgLy8weDA0CisgICAgdWludDMyX3QgICAgIFNGQ19FTjsgICAgICAgICAgICAgICAgICAgIC8vMHgwOAorCXVpbnQzMl90CSBTRkNfQ1RSTDA7CQkJCQkvLzB4MGMgCisJdWludDMyX3QJIFNGQ19DVFJMMTsJCQkJCS8vMHgxMAorCXVpbnQzMl90CSBTRkNfQ1RSTDI7CQkJCQkvLzB4MTQgCisJdWludDMyX3QJIFNGQ19CWVRFX05VTTsJCQkJLy8weDE4CisJdWludDMyX3QJIFNGQ19BRERSOwkJCQkJLy8weDFjCisJdWludDMyX3QJIFNGQ19JTlM7CQkJCQkvLzB4MjAKKwl1aW50MzJfdAkgU0ZDX1RJTUlORzsJCQkJLy8weDI0CisJdWludDMyX3QJIFNGQ19JTlRfRU47CQkJCS8vMHgyOAorICAgIHVpbnQzMl90ICAgICBTRkNfSU5UX1JBVzsgICAgICAgICAgICAgICAvLzB4MmMKKyAgICB1aW50MzJfdCAgICAgU0ZDX0lOVF9TV19DTFI7ICAgICAgICAgICAgLy8weDMwCisgICAgdWludDMyX3QgICAgIFNGQ19TVzsgICAgICAgICAgICAgICAgICAgIC8vMHgzNAorICAgIHVpbnQzMl90ICAgICBTRkNfREFUQTsgICAgICAgICAgICAgICAgICAvLzB4MzgKK307CisKKy8qc3BpZmMgc3RhcnQgMHg0Ki8KKyNkZWZpbmUgICAgIEZDX1NUQVJUICAgICAgKDE8PDApCisjZGVmaW5lICAgICBGQ19CVVNZICAgICAgICgxPDwwKQorCisvKnNwaWZjIGVuYWJsZSAweDgqLworI2RlZmluZSAgICAgRkNfRU5fQkFDSyAgICAgICAgICAoMSkKKyNkZWZpbmUgICAgIEZDX0VOICAgICAgICAgICAgICAgKDApCisKKy8qc3BpZmMgbWFpbiBjdHIwIDB4YyovCisjZGVmaW5lICAgICBGQ19TQ0xLX1BBVVNFX0NMUl9BTExPVyAgICAgKDE3KQorI2RlZmluZSAgICAgRkNfU0NMS19QQVVTRV9FTiAgICAgICAgICAgICgxNikKKyNkZWZpbmUgICAgIEZDX1RYRklGT19DTFIgICAgICAgICAgICAgICAoMTUpCisjZGVmaW5lICAgICBGQ19SWEZJRk9fQ0xSICAgICAgICAgICAgICAgKDE0KQorI2RlZmluZSAgICAgRkNfVFhGSUZPX1RIUkVTICAgICAgICAgICAgICgxMCkKKyNkZWZpbmUgICAgIEZDX1JYRklGT19USFJFUyAgICAgICAgICAgICAoNikKKyNkZWZpbmUgICAgIEZDX1RYX0RNQV9FTiAgICAgICAgICAgICAgICAoNSkKKyNkZWZpbmUgICAgIEZDX1JYX0RNQV9FTiAgICAgICAgICAgICAgICAoNCkKKyNkZWZpbmUgICAgIEZDX1dET0dfRU4gICAgICAgICAgICAgICAgICAoMykKKyNkZWZpbmUgICAgIEZDX1NQSV9NT0RFICAgICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgICAgIEZDX1dSX1BST1RFQ1QgICAgICAgICAgICAgICAoMCkKKworLypzcGlmYyBjdHJsMSAweDEwICBpbiB0aGUgY29uZGl0aW9uIDogU0ZDX0VOID0gMSBTRkNfQlVTWSA9IDAqLworI2RlZmluZSAgICAgRkNfQUREUl9UWF9FTiAgICAgICAgICAgKDQpCisjZGVmaW5lICAgICBGQ19EVU1NWV9UWF9FTiAgICAgICAgICAoMikKKyNkZWZpbmUgICAgIEZDX1JFQURfREFUX0VOICAgICAgICAgICgxKQorI2RlZmluZSAgICAgRkNfV1JJVEVfREFUX0VOICAgICAgICAgKDApCisKKy8qc3BpZmMgY3RybDIgMHgxNCovCisjZGVmaW5lICAgICBGQ19EVU1NWV9CWVRFX05VTSAgICAgICAgICAgKDEyKSAgLyogWzEyOjE1fSAqLworI2RlZmluZSAgICAgRkNfRFVNTVlfQklUX05VTSAgICAgICAgICAgICg4KSAgIC8qIFs4OjEwXSAqLworI2RlZmluZSAgICAgRkNfQUREUl9CWVRFX05VTSAgICAgICAgICAgICg1KSAgIC8qIFs1OjZdICovIAorI2RlZmluZSAgICAgRkNfQUREUl9NVUxUSV9MSU5FX0VOICAgICAgICg0KQorI2RlZmluZSAgICAgRkNfREFUX01VTFRJX0xJTkVfRU4gICAgICAgICgyKQorI2RlZmluZSAgICAgRkNfVFJBTlNfTU9EICAgICAgICAgICAgICAgICgwKQorCisjZGVmaW5lICAgICBGQ19BRERSX0JZVEVfTlVNXzggICAgICAgICAgICAgKDApIAorI2RlZmluZSAgICAgRkNfQUREUl9CWVRFX05VTV8xNiAgICAgICAgICAgICgxKSAKKyNkZWZpbmUgICAgIEZDX0FERFJfQllURV9OVU1fMjQgICAgICAgICAgICAoMikgIAorI2RlZmluZSAgICAgRkNfQUREUl9CWVRFX05VTV8zMiAgICAgICAgICAgICgzKSAgCisKKworLypzcGlmYyB0aW1pbmcgMHgyNCovCisjZGVmaW5lICAgICBGQ19SRUFEX0RFTEFZICAgICAgICAgICAoMTw8MTYpICAgLyogWzE3OjE2fSAqLworI2RlZmluZSAgICAgRkNfVF9DU19TRVRVUCAgICAgICAgICAgKDE8PDExKSAgIC8qIFsxMToxM30gKi8KKyNkZWZpbmUgICAgIEZDX1RfQ1NfSE9MRCAgICAgICAgICAgICgxPDw2KSAgICAvKiBbODo2fSAqLworI2RlZmluZSAgICAgRkNfVF9DU19ERVNFTCAgICAgICAgICAgKDE8PDApICAgIC8qIFswOjN9ICovCisKKworLypzcGlmYyBpbnQgZW5hYmxlIDB4MjgqLworI2RlZmluZSAgICAgRkNfSU5UX0VOX1RYX0JZRF9USEVTICAgICAgICAgICAoMTw8NykKKyNkZWZpbmUgICAgIEZDX0lOVF9FTl9SWF9CWURfVEhFUyAgICAgICAgICAgKDE8PDYpCisjZGVmaW5lICAgICBGQ19JTlRfRU5fVFhfVU5ERVJSVU4gICAgICAgICAgICgxPDw1KQorI2RlZmluZSAgICAgRkNfSU5UX0VOX1JYX09WRVJSVU4gICAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgICAgIEZDX0lOVF9FTl9XRE9HX09WRVJSVU4gICAgICAgICAgKDE8PDIpCisjZGVmaW5lICAgICBGQ19JTlRfRU5fRk1UX0VSUiAgICAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSAgICAgRkNfSU5UX0VOX0NNRF9FTkQgICAgICAgICAgICAgICAoMTw8MCkKKworLypzcGlmYyByYXcgaW50ZXJydXB0IDB4MmMqLworI2RlZmluZSAgICAgRkNfSU5UX1JBV19UWF9CWURfVEhFUyAgICAgICAgICAgKDE8PDcpCisjZGVmaW5lICAgICBGQ19JTlRfUkFXX1JYX0JZRF9USEVTICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgICAgIEZDX0lOVF9SQVdfVFhfVU5ERVJSVU4gICAgICAgICAgICgxPDw1KQorI2RlZmluZSAgICAgRkNfSU5UX1JBV19SWF9PVkVSUlVOICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lICAgICBGQ19JTlRfUkFXX1dET0dfT1ZFUlJVTiAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgICAgIEZDX0lOVF9SQVdfRk1UX0VSUiAgICAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSAgICAgRkNfSU5UX1JBV19DTURfRU5EICAgICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lICAgICBGQ19JTlRfUkFXX0VSUl9NQVNLICAgICAgICAgICAgICAoRkNfSU5UX1JBV19UWF9VTkRFUlJVTnxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNfSU5UX1JBV19SWF9PVkVSUlVOfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQ19JTlRfUkFXX1dET0dfT1ZFUlJVTnxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNfSU5UX1JBV19GTVRfRVJSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSAgICAgRkNfSU5UX1JBV19NQVNLICAgICAgICAgICAgICAJIChGQ19JTlRfUkFXX1RYX1VOREVSUlVOfAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNfSU5UX1JBV19SWF9PVkVSUlVOfAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNfSU5UX1JBV19XRE9HX09WRVJSVU58CVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQ19JTlRfUkFXX0ZNVF9FUlJ8CQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkNfSU5UX1JBV19DTURfRU5EKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKy8qc3BpZmMgaW50IHN0YXJ0dXMgYW5kIGNsciAweDMwKi8KKyNkZWZpbmUgICAgIEZDX0lOVF9DTFJfVFhfQllEX1RIRVMgICAgICAgICAgICgxPDw3KQorI2RlZmluZSAgICAgRkNfSU5UX0NMUl9SWF9CWURfVEhFUyAgICAgICAgICAgKDE8PDYpCisjZGVmaW5lICAgICBGQ19JTlRfQ0xSX1RYX1VOREVSUlVOICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgICAgIEZDX0lOVF9DTFJfUlhfT1ZFUlJVTiAgICAgICAgICAgICgxPDw0KQorI2RlZmluZSAgICAgRkNfSU5UX0NMUl9XRE9HX09WRVJSVU4gICAgICAgICAgKDE8PDIpCisjZGVmaW5lICAgICBGQ19JTlRfQ0xSX0ZNVF9FUlIgICAgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgICAgIEZDX0lOVF9DTFJfQ01EX0VORCAgICAgICAgICAgICAgICgxPDwwKQorCisvKnNwaWZjIHN3IDB4MzQqLworI2RlZmluZSAgICAgRkNfVFhfRklGT19DTlQgICAgICAgICAgICAgICgxNikgICAgICAgICAvKiBbMTY6MjB9ICovCisjZGVmaW5lICAgICBGQ19UWF9GSUZPX0NOVF9NQVNLICAgICAgICAgKDB4MUYpICAgICAgLyogWzg6MTJ9ICovCisjZGVmaW5lICAgICBGQ19SWF9GSUZPX0NOVCAgICAgICAgICAgICAgKDgpICAgICAgICAgICAgIC8qIFs4OjEyfSAqLworI2RlZmluZSAgICAgRkNfUlhfRklGT19DTlRfTUFTSyAgICAgICAgICgweDFGKSAgICAgIC8qIFs4OjEyfSAqLworI2RlZmluZSAgICAgRkNfVFhfQllEX1RIUkVTICAgICAgICAgICAgICgxPDw1KSAgCisjZGVmaW5lICAgICBGQ19SWF9CWURfVEhSRVMgICAgICAgICAgICAgKDE8PDQpICAKKyNkZWZpbmUgICAgIEZDX1NDTEtfUEFVU0VfRkxBRyAgICAgICAgICAoMTw8MykgIAorI2RlZmluZSAgICAgRkNfV0FJVF9GTEFHICAgICAgICAgICAgICAgICgxPDwyKSAKKyNkZWZpbmUgICAgIEZDX0ZPUk1BVF9FUlIgICAgICAgICAgICAgICAoMTw8MSkgIAorCisKKyNkZWZpbmUgICAgIEZDX0RNQV9OT05FICAgICAgICAgICAJCTAKKyNkZWZpbmUgICAgIEZDX0RNQV9UWCAgICAgICAgICAgICAJCTEKKyNkZWZpbmUgICAgIEZDX0RNQV9SWCAgICAgICAgICAgICAJCTIKKworI2RlZmluZSAJU1BJRkNfSVJRX0FMTAkJCQkoRkNfSU5UX0VOX0NNRF9FTkR8XAorCSAgICAgICAgICAgICAgICAgICAgIAkJCQlGQ19JTlRfRU5fRk1UX0VSUnxcCisJICAgICAgICAgICAgICAgICAgICAgCQkJCUZDX0lOVF9FTl9SWF9PVkVSUlVOfFwKKwkgICAgICAgICAgICAgICAgICAgICAJCQkJRkNfSU5UX0VOX1RYX1VOREVSUlVOfFwKKwkgICAgICAgICAgICAgICAgICAgICAJCQkJRkNfSU5UX0VOX0ZNVF9FUlIpCisKKworCisjZGVmaW5lIFRYX0RNQV9FTgkJMSAKKyNkZWZpbmUgVFhfRE1BX0RJUyAgICAgIDAgCisjZGVmaW5lIFJYX0RNQV9FTgkJMSAKKyNkZWZpbmUgUlhfRE1BX0RJUyAgICAgIDAKKyNkZWZpbmUgQUREUl9UWF9FTiAgICAgIDEgICAKKyNkZWZpbmUgQUREUl9UWF9ESVMgICAgIDAKKyNkZWZpbmUgREFUQV9UWF9FTiAgICAgIDEKKyNkZWZpbmUgREFUQV9UWF9ESVMgICAgIDAKKyNkZWZpbmUgREFUQV9SWF9FTiAgICAgIDEKKyNkZWZpbmUgREFUQV9SWF9ESVMgICAgIDAKKyNkZWZpbmUgRFVNWV9UWF9FTiAgICAgIDEKKyNkZWZpbmUgRFVNWV9UWF9ESVMgICAgIDAKKyNkZWZpbmUgQUREUl9NVUxUSV9MSU5FX0VOCQkxIAorI2RlZmluZSBBRERSX01VTFRJX0xJTkVfRElTICAgICAgMAorI2RlZmluZSBEQVRBX01VTFRJX0xJTkVfRU4JCTEgCisjZGVmaW5lIERBVEFfTVVMVElfTElORV9ESVMgICAgICAwCisjZGVmaW5lIFRSQU5TX01PRF9RVUFECQkxIAorI2RlZmluZSBUUkFOU19NT0RfRFVBTCAgICAgIDAKKyNkZWZpbmUgVFJBTlNfTU9EX1NJTkdMRQkyCisKKworI2RlZmluZSBBRERSX1dJRFRIXzggICAgMAorI2RlZmluZSBBRERSX1dJRFRIXzE2ICAgMQorI2RlZmluZSBBRERSX1dJRFRIXzI0ICAgMgorI2RlZmluZSBBRERSX1dJRFRIXzMyICAgMworCisKKwordHlwZWRlZiBzdHJ1Y3Qgc3Bpbm9yX2NtZAoreworICAgIHU4IGNtZDsKKwl1OCB0eF9kbWFfZW47CisJdTggcnhfZG1hX2VuOworICAgIHU4IGFkZHJfdHhfZW47CisgICAgdTggYWRkcl9ieXRlX251bTsKKyAgICB1OCBkYXRhX3R4X2VuOworICAgIHU4IGRhdGFfcnhfZW47CisgICAgdTggZHVteV90eF9lbjsKKyAgICB1OCBkdW15X2J5dGVfbnVtOworCXU4IGR1bXlfYml0X251bTsKKwl1OCBhZGRyX211bHRpX2xpbmVfZW47CisJdTggZGF0YV9tdWx0aV9saW5lX2VuOworCXU4IHRyYW5zX21vZDsKKwl1OCByZXNlcnZlZFszXTsKKyAgICB1OCAqaW5mbzsKK31zcGlub3JfY21kX3Q7CisKKworI2RlZmluZSBDTURfV1JFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQ01EX1dSREkgICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIENNRF9XUkVOVlNSICAgICAgICAgICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDTURfUkRTUjAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQ01EX1JEU1IxICAgICAgICAgICAgICAgICAgICAgICAweDM1CisjZGVmaW5lIENNRF9XUlNSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBDTURfUkRCCQkJICAgICAgICAgICAgCTB4MDMKKyNkZWZpbmUgQ01EX1JERlQgICAgICAgICAgICAgICAgICAgCQkweDBCCisjZGVmaW5lIENNRF9SRERGVCAgICAgICAgICAgICAgICAgICAgICAgMHgzQgorI2RlZmluZSBDTURfUkRRRlQgICAgICAgICAgICAgICAgICAgICAgIDB4NkIKKyNkZWZpbmUgQ01EX1BQICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyIAorI2RlZmluZSBDTURfUVBQICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgQ01EX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIENNRF8zMktCRSAgICAgICAgICAgICAgICAgICAgICAgMHg1MgorI2RlZmluZSBDTURfNjRLQkUgICAgICAgICAgICAgICAgICAgICAgIDB4RDgKKyNkZWZpbmUgQ01EX0NFICAgICAgICAgICAgICAgICAgICAgICAgICAweDYwCisjZGVmaW5lIENNRF9EUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCOQorI2RlZmluZSBDTURfUkRQUkRJICAgICAgICAgICAgICAgICAgICAgIDB4QUIKKyNkZWZpbmUgQ01EX1JFTVMgICAgICAgICAgICAgICAgICAgICAJMHg5MAorI2RlZmluZSBDTURfUkRJRCAgICAgICAgICAgICAgICAgICAgCTB4OUYKKyNkZWZpbmUgQ01EX1BFUyAgICAgICAgICAgICAgICAgICAgCQkweDc1CisjZGVmaW5lIENNRF9QRVIgICAgICAgICAgICAgICAgICAgIAkJMHg3QQorI2RlZmluZSBDTURfRVNSICAgICAgICAgICAgICAgICAgICAJCTB4NDQKKyNkZWZpbmUgQ01EX1BTUiAgICAgICAgICAgICAgICAgICAgCQkweDQyCisjZGVmaW5lIENNRF9SU1IgICAgICAgICAgICAgICAgICAgIAkJMHg0OAorI2RlZmluZSBDTURfRU5SRVNFVCAgICAgICAgICAgICAgICAgICAgCTB4NjYKKyNkZWZpbmUgQ01EX1JFU0VUICAgICAgICAgICAgICAgICAgICAJMHg5OQorCisKKyNkZWZpbmUgTk9SX01BWF9QQUdFX1NJWkUJMjA0OAorI2RlZmluZSBTUElfTk9SX0JVRl9TSVpFCU5PUl9NQVhfUEFHRV9TSVpFCisKKworI2RlZmluZSBGU0xfUVNQSV9NQVhfQ0hJUAkxCisKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9vdHAvb3RwX3p4LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvb3RwL290cF96eC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjOTNkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvb3RwL290cF96eC5jCkBAIC0wLDAgKzEsODcwIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9tbS5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPg0KKyNpbmNsdWRlIDxtYWNoL2lvbWFwLmg+DQorI2luY2x1ZGUgPG1hY2gvZGVidWcuaD4NCisjaW5jbHVkZSA8bGludXgvaW8uaD4NCisjaW5jbHVkZSA8bWFjaC9zcGlubG9jay5oPg0KKyNpbmNsdWRlIDxtYWNoL3BjdS5oPg0KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4NCisjaW5jbHVkZSA8bGludXgvZnMuaD4NCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9zb2MvenRlL290cC9vdHBfenguaD4NCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+DQorI2luY2x1ZGUgPGFzbS9pby5oPg0KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPg0KKyNpbmNsdWRlICJub3IuaCINCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPg0KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4NCisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPg0KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4NCisNCitzdHJ1Y3QgbXV0ZXggb3RwTXV0ZXg7DQorZXh0ZXJuIGNoYXIgKm5vcl9jbWRsaW5lOw0KKw0KK3R5cGVkZWYgdm9sYXRpbGUgc3RydWN0DQorew0KKwl1MzIgc2VjdXJlX2ZsYWc7DQorCXUzMiBwdWtfaGFzaFs4XTsNCisJdTMyIHNlY3VyZURldklkWzNdOw0KK30gc19PdHBTdHJ1Y3Q7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorCXUzMiB1aVB1YktleVs5NV07DQorfSBzX0ltYWdlSGVhZGVyOw0KKw0KK3NfT3RwU3RydWN0IG90cF9kYXRhOw0KKw0KKyNkZWZpbmUgU0VDVVJFX0VOX09GRlNFVCAgICAgMHgxMDAwDQorI2RlZmluZSBQVUJfS0VZX0hBU0hfT0ZGU0VUICAweDEwMDQNCisjZGVmaW5lIERFVklDRV9JRF9PRkZTRVQgICAgIDB4MTAyNA0KKw0KKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiovDQorc3RydWN0IG5vcl9pbmZvICpzcGlfbm9yX2ZsYXNoID0gTlVMTDsNCit2b2lkICBfX2lvbWVtICogbm9yX2Jhc2VfYWRkcjsNCisNCisvKiBVc2VkIHdoZW4gdGhlICJfZXh0X2lkIiBpcyB0d28gYnl0ZXMgYXQgbW9zdCAqLw0KKyNkZWZpbmUgSU5GTyhfamVkZWNfaWQsIF9leHRfaWQsIF9zZWN0b3Jfc2l6ZSwgX25fc2VjdG9ycywgX2ZsYWdzKQlcDQorCQkuaWQgPSB7CQkJCQkJCVwNCisJCQkoKF9qZWRlY19pZCkgPj4gMTYpICYgMHhmZiwJCQlcDQorCQkJKChfamVkZWNfaWQpID4+IDgpICYgMHhmZiwJCQlcDQorCQkJKF9qZWRlY19pZCkgJiAweGZmLAkJCQlcDQorCQkJKChfZXh0X2lkKSA+PiA4KSAmIDB4ZmYsCQkJXA0KKwkJCShfZXh0X2lkKSAmIDB4ZmYsCQkJCVwNCisJCQl9LAkJCQkJCVwNCisJCS5pZF9sZW4gPSAoIShfamVkZWNfaWQpID8gMCA6ICgzICsgKChfZXh0X2lkKSA/IDIgOiAwKSkpLAlcDQorCQkuc2VjdG9yX3NpemUgPSAoX3NlY3Rvcl9zaXplKSwJCQkJXA0KKwkJLm5fc2VjdG9ycyA9IChfbl9zZWN0b3JzKSwJCQkJXA0KKwkJLnBhZ2Vfc2l6ZSA9IDI1NiwJCQkJCVwNCisJCS5mbGFncyA9IChfZmxhZ3MpLA0KKw0KKw0KK3NwaW5vcl9jbWRfdCBub3JfY21kX3RhYmxlW109DQorewkNCisJe0NNRF9XUkVOLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0RJUywgQUREUl9XSURUSF8yNCwgREFUQV9UWF9ESVMsIERBVEFfUlhfRElTLCBEVU1ZX1RYX0RJUywgMCwgMCwgQUREUl9NVUxUSV9MSU5FX0RJUywgREFUQV9NVUxUSV9MSU5FX0RJUywgVFJBTlNfTU9EX1NJTkdMRSwgIndyaXRlIGVuYWJsZSJ9LA0KKwl7Q01EX1dSREksIFRYX0RNQV9ESVMsIFJYX0RNQV9ESVMsIEFERFJfVFhfRElTLCBBRERSX1dJRFRIXzI0LCBEQVRBX1RYX0RJUywgREFUQV9SWF9ESVMsIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAid3JpdGUgZGlzYWJsZSJ9LA0KKwl7Q01EX1dSRU5WU1IsIFRYX0RNQV9ESVMsIFJYX0RNQV9ESVMsIEFERFJfVFhfRElTLCBBRERSX1dJRFRIXzI0LCBEQVRBX1RYX0RJUywgREFUQV9SWF9ESVMsIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAid3JpdGUgZW5zYWJsZSB2c3IifSwJCQ0KKwl7Q01EX1JEU1IwLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0RJUywgQUREUl9XSURUSF8yNCwgREFUQV9UWF9ESVMsIERBVEFfUlhfRU4sIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAicmVhZCBTUiBTNy1TMCJ9LA0KKwl7Q01EX1JEU1IxLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0RJUywgQUREUl9XSURUSF8yNCwgREFUQV9UWF9ESVMsIERBVEFfUlhfRU4sIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAicmVhZCBTUiBTMTUtUzgifSwNCisJe0NNRF9XUlNSLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0RJUywgQUREUl9XSURUSF8yNCwgREFUQV9UWF9FTiwgREFUQV9SWF9ESVMsIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAid3JpdGUgU1IgUzE1LVMwIn0sDQorCXtDTURfUkRCLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0VOLCBBRERSX1dJRFRIXzI0LCBEQVRBX1RYX0RJUywgREFUQV9SWF9FTiwgRFVNWV9UWF9ESVMsIDAsIDAsIEFERFJfTVVMVElfTElORV9ESVMsIERBVEFfTVVMVElfTElORV9ESVMsIFRSQU5TX01PRF9TSU5HTEUsICJyZWFkIGRhdGEgYnl0ZXMifSwNCisJe0NNRF9SREZULCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0VOLCBBRERSX1dJRFRIXzI0LCBEQVRBX1RYX0RJUywgREFUQV9SWF9FTiwgRFVNWV9UWF9FTiwgMSwgMCwgQUREUl9NVUxUSV9MSU5FX0RJUywgREFUQV9NVUxUSV9MSU5FX0RJUywgVFJBTlNfTU9EX1NJTkdMRSwgInJlYWQgZmFzdCJ9LA0KKwl7Q01EX1JEREZULCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0VOLCBBRERSX1dJRFRIXzI0LCBEQVRBX1RYX0RJUywgREFUQV9SWF9FTiwgRFVNWV9UWF9FTiwgMSwgMCwgQUREUl9NVUxUSV9MSU5FX0RJUywgREFUQV9NVUxUSV9MSU5FX0VOLCBUUkFOU19NT0RfRFVBTCwgInJlYWQgZHVhbCBmYXN0In0sDQorCXtDTURfUkRRRlQsIFRYX0RNQV9ESVMsIFJYX0RNQV9ESVMsIEFERFJfVFhfRU4sIEFERFJfV0lEVEhfMjQsIERBVEFfVFhfRElTLCBEQVRBX1JYX0VOLCBEVU1ZX1RYX0VOLCAxLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRU4sIFRSQU5TX01PRF9RVUFELCAicmVhZCBxdWFkIGZhc3QifSwNCisJe0NNRF9QUCwgVFhfRE1BX0RJUywgUlhfRE1BX0RJUywgQUREUl9UWF9FTiwgQUREUl9XSURUSF8yNCwgREFUQV9UWF9FTiwgREFUQV9SWF9ESVMsIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAicGFnZSBwcm9ncmFtIn0sDQorCXtDTURfUVBQLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0VOLCBBRERSX1dJRFRIXzI0LCBEQVRBX1RYX0VOLCBEQVRBX1JYX0RJUywgRFVNWV9UWF9ESVMsIDAsIDAsIEFERFJfTVVMVElfTElORV9ESVMsIERBVEFfTVVMVElfTElORV9FTiwgVFJBTlNfTU9EX1FVQUQsICJxdWFkIHBhZ2UgcHJvZ3JhbSJ9LA0KKwl7Q01EX1NFLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0VOLCBBRERSX1dJRFRIXzI0LCBEQVRBX1RYX0RJUywgREFUQV9SWF9ESVMsIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAic2VjdG9yIGVyYXNlIn0sDQorCXtDTURfMzJLQkUsIFRYX0RNQV9ESVMsIFJYX0RNQV9ESVMsIEFERFJfVFhfRU4sIEFERFJfV0lEVEhfMjQsIERBVEFfVFhfRElTLCBEQVRBX1JYX0RJUywgRFVNWV9UWF9ESVMsIDAsIDAsIEFERFJfTVVMVElfTElORV9ESVMsIERBVEFfTVVMVElfTElORV9ESVMsIFRSQU5TX01PRF9TSU5HTEUsICIzMksgYmxvY2sgZXJhc2UifSwNCisJe0NNRF82NEtCRSwgVFhfRE1BX0RJUywgUlhfRE1BX0RJUywgQUREUl9UWF9FTiwgQUREUl9XSURUSF8yNCwgREFUQV9UWF9ESVMsIERBVEFfUlhfRElTLCBEVU1ZX1RYX0RJUywgMCwgMCwgQUREUl9NVUxUSV9MSU5FX0RJUywgREFUQV9NVUxUSV9MSU5FX0RJUywgVFJBTlNfTU9EX1NJTkdMRSwgIjY0SyBibG9jayBlcmFzZSJ9LA0KKwl7Q01EX0NFLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0RJUywgQUREUl9XSURUSF8yNCwgREFUQV9UWF9ESVMsIERBVEFfUlhfRElTLCBEVU1ZX1RYX0RJUywgMCwgMCwgQUREUl9NVUxUSV9MSU5FX0RJUywgREFUQV9NVUxUSV9MSU5FX0RJUywgVFJBTlNfTU9EX1NJTkdMRSwgImNoaXAgZXJhc2UifSwNCisJe0NNRF9EUCwgVFhfRE1BX0RJUywgUlhfRE1BX0RJUywgQUREUl9UWF9ESVMsIEFERFJfV0lEVEhfMjQsIERBVEFfVFhfRElTLCBEQVRBX1JYX0RJUywgRFVNWV9UWF9ESVMsIDAsIDAsIEFERFJfTVVMVElfTElORV9ESVMsIERBVEFfTVVMVElfTElORV9ESVMsIFRSQU5TX01PRF9TSU5HTEUsICJkZWVwIHBvd2VyLWRvd24ifSwNCisJe0NNRF9SRFBSREksIFRYX0RNQV9ESVMsIFJYX0RNQV9ESVMsIEFERFJfVFhfRElTLCBBRERSX1dJRFRIXzI0LCBEQVRBX1RYX0RJUywgREFUQV9SWF9ESVMsIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAicmVsZWFlIERQIGFkbiBSREkifSwNCisJe0NNRF9SRU1TLCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0RJUywgQUREUl9XSURUSF8yNCwgREFUQV9UWF9ESVMsIERBVEFfUlhfRU4sIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAicmVhZCBtYW51ZmFjdHVyZSBkZXZpY2UgaWQifSwJDQorCXtDTURfUkRJRCwgVFhfRE1BX0RJUywgUlhfRE1BX0RJUywgQUREUl9UWF9ESVMsIEFERFJfV0lEVEhfMjQsIERBVEFfVFhfRElTLCBEQVRBX1JYX0VOLCBEVU1ZX1RYX0RJUywgMCwgMCwgQUREUl9NVUxUSV9MSU5FX0RJUywgREFUQV9NVUxUSV9MSU5FX0RJUywgVFJBTlNfTU9EX1NJTkdMRSwgInJlYWQgaWRlbnRpZmljYXRpb24ifSwNCisJe0NNRF9FTlJFU0VULCBUWF9ETUFfRElTLCBSWF9ETUFfRElTLCBBRERSX1RYX0RJUywgQUREUl9XSURUSF8yNCwgREFUQV9UWF9ESVMsIERBVEFfUlhfRElTLCBEVU1ZX1RYX0RJUywgMCwgMCwgQUREUl9NVUxUSV9MSU5FX0RJUywgREFUQV9NVUxUSV9MSU5FX0RJUywgVFJBTlNfTU9EX1NJTkdMRSwgInJlc2V0IGVuYWJsZSJ9LAkNCisJe0NNRF9SRVNFVCwgVFhfRE1BX0RJUywgUlhfRE1BX0RJUywgQUREUl9UWF9ESVMsIEFERFJfV0lEVEhfMjQsIERBVEFfVFhfRElTLCBEQVRBX1JYX0RJUywgRFVNWV9UWF9ESVMsIDAsIDAsIEFERFJfTVVMVElfTElORV9ESVMsIERBVEFfTVVMVElfTElORV9ESVMsIFRSQU5TX01PRF9TSU5HTEUsICJyZXNldCJ9LA0KKwl7Q01EX0VTUiwgVFhfRE1BX0RJUywgUlhfRE1BX0RJUywgQUREUl9UWF9FTiwgQUREUl9XSURUSF8yNCwgREFUQV9UWF9ESVMsIERBVEFfUlhfRElTLCBEVU1ZX1RYX0RJUywgMCwgMCwgQUREUl9NVUxUSV9MSU5FX0RJUywgREFUQV9NVUxUSV9MSU5FX0RJUywgVFJBTlNfTU9EX1NJTkdMRSwgImVyYXNlIHNlY3VyaXR5IHJlZ2lzdGVycyJ9LA0KKwl7Q01EX1BTUiwgVFhfRE1BX0RJUywgUlhfRE1BX0RJUywgQUREUl9UWF9FTiwgQUREUl9XSURUSF8yNCwgREFUQV9UWF9FTiwgREFUQV9SWF9ESVMsIERVTVlfVFhfRElTLCAwLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAicHJvZ3JhbSBzZWN1cml0eSByZWdpc3RlcnMifSwNCisJe0NNRF9SU1IsIFRYX0RNQV9ESVMsIFJYX0RNQV9ESVMsIEFERFJfVFhfRU4sIEFERFJfV0lEVEhfMjQsIERBVEFfVFhfRElTLCBEQVRBX1JYX0VOLCBEVU1ZX1RYX0VOLCAxLCAwLCBBRERSX01VTFRJX0xJTkVfRElTLCBEQVRBX01VTFRJX0xJTkVfRElTLCBUUkFOU19NT0RfU0lOR0xFLCAicmVhZCBzZWN1cml0eSByZWdpc3RlcnMifSwNCit9Ow0KKw0KKyNpZmRlZiBDT05GSUdfWlgyOTc1MjBWM19VRklfTUlOSV8zMktfTk9SDQorIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgbm9yX2luZm8gc3BpX25vcl9pZHNbXSA9IHsNCisJIC8qIEdpZ2FEZXZpY2UgKi8NCisJIHsgImdkMjVxMTI4IiwgSU5GTygweGM4NjAxOCwgMCwgMzIgKiAxMDI0LCA1MTIsIDApIH0sDQorCSB7ICJnZDI1bGQxMGMiLCBJTkZPKDB4Yzg2MDExLCAwLCAzMiAqIDEwMjQsIDQsIDApIH0sDQorCSB7ICJnZDI1bGQyMGUiLCBJTkZPKDB4Yzg2MDEyLCAwLCAzMiAqIDEwMjQsIDgsIDApIH0sDQorCSAvKiB3aW5ib25kICovCSANCisJIHsgIncyNXExMjhmdyIsIElORk8oMHhlZjYwMTgsIDAsIDMyICogMTAyNCwgNTEyLCAwKSB9LA0KKwkgLyogZG9zaWxpY29uICovDQorCSB7ICJmbTI1bTRhYSIsIElORk8oMHhmODQyMTgsIDAsIDMyICogMTAyNCwgNTEyLCAwKSB9LA0KKwkgLyogZnVkYW53ZWkgKi8NCisJIHsgImZtMjV3MTI4IiwgSU5GTygweEExMjgxOCwgMCwgMzIgKiAxMDI0LCA1MTIsIDApIH0sDQorCSAvKiBYTUMgKi8NCisJIHsgIlhNMjVRVTY0QyIsIElORk8oMHgyMDQxMTcsIDAsIDMyICogMTAyNCwgMjU2LCAwKSB9LA0KKwkgeyAiWE0yNVFVMTI4IiwgSU5GTygweDIwNTAxOCwgMCwgMzIgKiAxMDI0LCA1MTIsIDApIH0sDQorCSB7ICJYTTI1UVUxMjhDIiwgSU5GTygweDIwNDExOCwgMCwgMzIgKiAxMDI0LCA1MTIsIDApIH0sDQorCSAvKiBEUTI1UTEyOEFMICovDQorCSB7ICJEUTI1UTEyOEFMIiwgSU5GTygweDU0NjAxOCwgMCwgMzIgKiAxMDI0LCA1MTIsIDApIH0sDQorCSAvKiBkb3NpbGljb24gKi8NCisJIHsgIkRTMjVNNEFCIiwgSU5GTygweEU1NDIxOCwgMCwgMzIgKiAxMDI0LCA1MTIsIDApIH0sDQorCSAvKiBlc210KGVvbikgKi8NCisJIHsgIkVOMjVTWDEyOEEiLCBJTkZPKDB4MUM3ODE4LCAwLCAzMiAqIDEwMjQsIDUxMiwgMCkgfSwNCisJIC8qIGRvc2lsaWNvbiAqLw0KKwkgeyAiRk0yNU00QUEiLCBJTkZPKDB4Rjg0MjE4LCAwLCAzMiAqIDEwMjQsIDUxMiwgMCkgfSwNCisJIHsgfSwNCisgfTsNCisjZWxzZQ0KKyBzdGF0aWMgY29uc3Qgc3RydWN0IG5vcl9pbmZvIHNwaV9ub3JfaWRzW10gPSB7DQorCSAvKiBHaWdhRGV2aWNlICovDQorCSB7ICJnZDI1cTEyOCIsIElORk8oMHhjODYwMTgsIDAsIDY0ICogMTAyNCwgMjU2LCAwKSB9LA0KKwkgeyAiZ2QyNWxkMTBjIiwgSU5GTygweGM4NjAxMSwgMCwgNjQgKiAxMDI0LCAyLCAwKSB9LA0KKwkgeyAiZ2QyNWxkMjBlIiwgSU5GTygweGM4NjAxMiwgMCwgNjQgKiAxMDI0LCA0LCAwKSB9LA0KKwkgLyogd2luYm9uZCAqLwkgDQorCSB7ICJ3MjVxMTI4ZnciLCBJTkZPKDB4ZWY2MDE4LCAwLCA2NCAqIDEwMjQsIDI1NiwgMCkgfSwNCisJIC8qIGRvc2lsaWNvbiAqLw0KKwkgeyAiZm0yNW00YWEiLCBJTkZPKDB4Zjg0MjE4LCAwLCA2NCAqIDEwMjQsIDI1NiwgMCkgfSwNCisJIC8qIGZ1ZGFud2VpICovDQorCSB7ICJmbTI1dzEyOCIsIElORk8oMHhBMTI4MTgsIDAsIDY0ICogMTAyNCwgMjU2LCAwKSB9LA0KKwkgLyogeG1jICovDQorCSB7ICJYTTI1UVUxMjgiLCBJTkZPKDB4MjA1MDE4LCAwLCA2NCAqIDEwMjQsIDI1NiwgMCkgfSwNCisJIHsgIlhNMjVRVTEyOEMiLCBJTkZPKDB4MjA0MTE4LCAwLCA2NCAqIDEwMjQsIDI1NiwgMCkgfSwNCisJIC8qIERRMjVRMTI4QUwgKi8NCisJIHsgIkRRMjVRMTI4QUwiLCBJTkZPKDB4NTQ2MDE4LCAwLCA2NCAqIDEwMjQsIDI1NiwgMCkgfSwNCisJIC8qIGRvc2lsaWNvbiAqLw0KKwkgeyAiRFMyNU00QUIiLCBJTkZPKDB4RTU0MjE4LCAwLCA2NCAqIDEwMjQsIDI1NiwgMCkgfSwNCisJIC8qIGVzbXQoZW9uKSAqLw0KKwkgeyAiRU4yNVNYMTI4QSIsIElORk8oMHgxQzc4MTgsIDAsIDY0ICogMTAyNCwgMjU2LCAwKSB9LA0KKwkgLyogZG9zaWxpY29uICovDQorCSB7ICJGTTI1TTRBQSIsIElORk8oMHhGODQyMTgsIDAsIDY0ICogMTAyNCwgMjU2LCAwKSB9LA0KKwkgeyB9LA0KKyB9Ow0KKyNlbmRpZg0KKw0KKyBzdGF0aWMgdm9pZCBjc19vcGVuKHZvaWQpDQorIHsNCisgICAgIHp4MjlfZ3Bpb19jb25maWcoOTMsR1BJTzkzX1NQSUZDX0NTKTsgICAgDQorIH0NCisNCisgc3RhdGljIHZvaWQgY3NfY2xvc2Uodm9pZCkNCisgew0KKyAgICB6eDI5X2dwaW9fY29uZmlnKDkzLEdQSU85M19HUElPOTMpOw0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoOTMsMSk7DQorIH0NCisNCisgdm9pZCBzcGlmY19lbmFibGUodm9pZCkNCit7DQorICAgdm9sYXRpbGUgc3RydWN0IHNwaWZjX25vcl9yZWdfdCogc3BpZmMgPSAoc3RydWN0IHNwaWZjX25vcl9yZWdfdCopKFpYX1NQSUZDMF9CQVNFKTsNCisgICAgDQorICAgIGlmKHNwaWZjLT5TRkNfRU4gJiBGQ19FTl9CQUNLKQ0KKyAgICB7DQorCQlwcmludGsoInNwaWZjIGVuIGVyci5cbiIpOw0KKwkJcmV0dXJuOw0KKwl9ICAgDQorICAgIHNwaWZjLT5TRkNfRU4gfD0gKDEgPDwgRkNfRU4pOyAgDQorICAgIHNwaWZjLT5TRkNfQ1RSTDAgfD0gKDEgPDwgRkNfU0NMS19QQVVTRV9FTik7DQorfQ0KKw0KKyB2b2lkIHNwaWZjX2Rpc2FibGUodm9pZCkNCit7DQorICAgIHZvbGF0aWxlIHN0cnVjdCBzcGlmY19ub3JfcmVnX3QqIHNwaWZjID0gKHN0cnVjdCBzcGlmY19ub3JfcmVnX3QqKShaWF9TUElGQzBfQkFTRSk7DQorICAgIA0KKyAgICBpZighKHNwaWZjLT5TRkNfRU4gJiBGQ19FTl9CQUNLKSkNCisgICAgew0KKwkJcHJpbnRrKCJzcGlmYyBkaXMgZXJyLlxuIik7DQorCQlyZXR1cm47DQorCX0gICAgIA0KKyAgICBzcGlmYy0+U0ZDX0VOICY9ICh+KDEgPDxGQ19FTikpOyAgICANCit9DQorDQorIHZvaWQgc3BpZmNfc2V0dXBfY21kKHNwaW5vcl9jbWRfdCAqY21kLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCBsZW4pDQorIHsJIA0KKwkgdm9sYXRpbGUgc3RydWN0IHNwaWZjX25vcl9yZWdfdCogc3BpZmMgPSAoc3RydWN0IHNwaWZjX25vcl9yZWdfdCopKFpYX1NQSUZDMF9CQVNFKTsNCisgDQorCSAvKiBjbGVhciBkbWEgY29uZmlnICovDQorCSBzcGlmYy0+U0ZDX0NUUkwwICY9IH4oKDEgPDwgRkNfUlhfRE1BX0VOKXwoMSA8PCBGQ19UWF9ETUFfRU4pKTsNCisJIC8qIGNsZWFyIGZpZm8gKi8NCisJIHNwaWZjLT5TRkNfQ1RSTDAgfD0gKDEgPDwgRkNfUlhGSUZPX0NMUil8KDEgPDwgRkNfVFhGSUZPX0NMUik7DQorIA0KKwkgLyogY2xlYXIgaW50ZXJydXB0IHJlZ2lzdGVyICovDQorCSBzcGlmYy0+U0ZDX0lOVF9TV19DTFIgPSAweEZGOwkNCisJIA0KKwkgLyogZG1hICsgZmlmbyBjb25maWcgKi8NCisJIHNwaWZjLT5TRkNfQ1RSTDAgfD0gKChjbWQtPnR4X2RtYV9lbiA8PCBGQ19UWF9ETUFfRU4pIA0KKwkJCQkJCSAgIHwgKGNtZC0+cnhfZG1hX2VuIDw8IEZDX1JYX0RNQV9FTikNCisJCQkJCQkgICB8ICgxIDw8IEZDX1JYRklGT19USFJFUykNCisJCQkJCQkgICB8ICgxIDw8IEZDX1RYRklGT19USFJFUykpOw0KKyANCisJIC8qIGFkZHIgZHVteSBkYXRhIGNvZGUgY29uZmlnICovDQorCSBzcGlmYy0+U0ZDX0NUUkwxID0gMDsNCisJIHNwaWZjLT5TRkNfQ1RSTDEgPSAoKGNtZC0+YWRkcl90eF9lbiA8PCBGQ19BRERSX1RYX0VOKSANCisJCQkJCQkgfCAoY21kLT5kdW15X3R4X2VuIDw8IEZDX0RVTU1ZX1RYX0VOKSANCisJCQkJCQkgfCAoY21kLT5kYXRhX3J4X2VuIDw8IEZDX1JFQURfREFUX0VOKSANCisJCQkJCQkgfCAoY21kLT5kYXRhX3R4X2VuIDw8IEZDX1dSSVRFX0RBVF9FTikpOw0KKyANCisJIHNwaWZjLT5TRkNfQ1RSTDIgPSAwOw0KKwkgc3BpZmMtPlNGQ19DVFJMMiA9ICgoY21kLT5kdW15X2J5dGVfbnVtIDw8IEZDX0RVTU1ZX0JZVEVfTlVNKSANCisJCQkJCQkgfCAoY21kLT5kdW15X2JpdF9udW0gPDwgRkNfRFVNTVlfQklUX05VTSkgDQorCQkJCQkJIHwgKGNtZC0+YWRkcl9ieXRlX251bSA8PCBGQ19BRERSX0JZVEVfTlVNKQ0KKwkJCQkJCSB8IChjbWQtPmFkZHJfbXVsdGlfbGluZV9lbiA8PCBGQ19BRERSX01VTFRJX0xJTkVfRU4pDQorCQkJCQkJIHwgKGNtZC0+ZGF0YV9tdWx0aV9saW5lX2VuIDw8IEZDX0RBVF9NVUxUSV9MSU5FX0VOKQ0KKwkJCQkJCSB8IChjbWQtPnRyYW5zX21vZCA8PCBGQ19UUkFOU19NT0QpKTsNCisgDQorCSBpZihsZW4pDQorCQkgc3BpZmMtPlNGQ19CWVRFX05VTSA9IGxlbiAtIDE7DQorCSBlbHNlDQorCQkgc3BpZmMtPlNGQ19CWVRFX05VTSA9IDA7IA0KKwkgDQorCSBzcGlmYy0+U0ZDX0FERFIgPSBhZGRyOyANCisJIHNwaWZjLT5TRkNfSU5TID0gY21kLT5jbWQ7IAkJIA0KKyB9DQorIA0KKyAgaW50IHNwaWZjX3dhaXRfY21kX2VuZCh2b2lkKQ0KKyB7DQorCSB2b2xhdGlsZSBzdHJ1Y3Qgc3BpZmNfbm9yX3JlZ190KiBzcGlmYyA9IChzdHJ1Y3Qgc3BpZmNfbm9yX3JlZ190KikoWlhfU1BJRkMwX0JBU0UpOw0KKwkgdWludDMyX3QgaW50cl9zdGF0dXMgPSAwOw0KKwkgDQorICAgICB3aGlsZSggc3BpZmMtPlNGQ19TVEFSVCAmIEZDX0JVU1kgKTsNCisJIA0KKwkgd2hpbGUoIShzcGlmYy0+U0ZDX0lOVF9SQVcgJiBGQ19JTlRfUkFXX01BU0spKTsNCisJIA0KKwkgaW50cl9zdGF0dXMgPSBzcGlmYy0+U0ZDX0lOVF9SQVc7DQorCSBzcGlmYy0+U0ZDX0lOVF9TV19DTFIgPSBpbnRyX3N0YXR1czsJCQ0KKyANCisJIGlmKGludHJfc3RhdHVzICYgRkNfSU5UX1JBV19DTURfRU5EKQ0KKwkgewkgDQorCQkgcmV0dXJuIDA7DQorCSB9DQorCSBlbHNlDQorCSB7DQorCQkgcHJpbnRrKCJpbnRyIHN0YXR1cyBlcnIuXG4iKTsNCisJCSByZXR1cm4gLTE7DQorCSB9CSANCisgfQ0KKw0KKyAgIHNwaW5vcl9jbWRfdCAqY21kX3NlZWsodTggb3Bjb2RlKQ0KKyB7DQorCSBpbnQgaTsNCisgDQorCSBmb3IoaSA9IDA7ICgmbm9yX2NtZF90YWJsZVtpXSkgIT0gTlVMTDsgaSsrKQ0KKwkgew0KKwkJIGlmKG9wY29kZSA9PSBub3JfY21kX3RhYmxlW2ldLmNtZCkNCisJCSB7DQorCQkJIHJldHVybiAoJm5vcl9jbWRfdGFibGVbaV0pOw0KKwkJIH0NCisJIH0NCisgDQorCSByZXR1cm4gTlVMTDsJIA0KKyB9DQorICAgDQorIHVpbnQzMl90IHNwaWZjX3JlYWRfZmlmbyh1aW50OF90ICpidWYsIHVpbnQzMl90IGxlbikNCisgew0KKwkgdm9sYXRpbGUgc3RydWN0IHNwaWZjX25vcl9yZWdfdCogc3BpZmMgPSAoc3RydWN0IHNwaWZjX25vcl9yZWdfdCopKFpYX1NQSUZDMF9CQVNFKTsNCisJIHVpbnQzMl90ICpwID0gKHVpbnQzMl90ICopYnVmOw0KKwkgdWludDMyX3QgY250ID0gMDsNCisgDQorCSBpbnQgcmVtYWluZGVyX2NudCA9IGxlbiAlIDQ7DQorIA0KKwkgaWYocmVtYWluZGVyX2NudCAhPSAwKQ0KKwkgew0KKwkJIGxlbiA9IGxlbiArICg0IC0gcmVtYWluZGVyX2NudCk7DQorCSB9DQorCSBlbHNlDQorCSB7DQorCQkgcmVtYWluZGVyX2NudCA9IDQ7DQorCSB9DQorCQ0KKwkgd2hpbGUoY250IDwgKGxlbj4+MikpCQ0KKwkgew0KKwkJIGlmKHNwaWZjLT5TRkNfU1cgJiAoRkNfUlhfRklGT19DTlRfTUFTSzw8RkNfUlhfRklGT19DTlQpKS8vcnggZmlmbyBub3QgZW1wdHkNCisJCSB7CQkJIA0KKwkJCSBwW2NudCsrXT0gc3BpZmMtPlNGQ19EQVRBOw0KKwkJIH0NCisJIH0NCisgDQorCSByZXR1cm4gKChjbnQ8PDIpIC0gKDQgLSByZW1haW5kZXJfY250KSk7DQorIH0NCisNCisgaW50IHNwaWZjX3dyaXRlX2RhdGEodWludDhfdCAqYnVmLCB1aW50MzJfdCBsZW4pDQorew0KKyAgICB1aW50MzJfdCAqcCA9ICh1aW50MzJfdCAqKWJ1ZjsNCisgICAgdWludDMyX3QgY250ID0gMDsNCisgICAgdm9sYXRpbGUgc3RydWN0IHNwaWZjX25vcl9yZWdfdCogc3BpZmMgPSAoc3RydWN0IHNwaWZjX25vcl9yZWdfdCopKFpYX1NQSUZDMF9CQVNFKTsNCisJaW50IHJlbWFpbmRlcl9jbnQgPSBsZW4gJSA0Ow0KKwkNCisJaWYocmVtYWluZGVyX2NudCAhPSAwKQ0KKwl7DQorCQlsZW4gPSBsZW4gKyAoNCAtIHJlbWFpbmRlcl9jbnQpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJcmVtYWluZGVyX2NudCA9IDQ7DQorCX0NCisJDQorICAgIHdoaWxlKGNudCA8IChsZW4gPj4gMikpICANCisgICAgew0KKyAgICAgICAgaWYoc3BpZmMtPlNGQ19TVyAmIChGQ19UWF9GSUZPX0NOVF9NQVNLPDxGQ19UWF9GSUZPX0NOVCkpLy90eCBmaWZvIG5vdCBmdWxsDQorICAgICAgICB7ICAgICAgIA0KKyAgICAgICAgICAgIHNwaWZjLT5TRkNfREFUQSA9IHBbY250KytdOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHJldHVybiAoKGNudDw8MikgLSAoNCAtIHJlbWFpbmRlcl9jbnQpKTsNCit9DQorIA0KKyAgdm9pZCBzcGlmY19zdGFydCh2b2lkKQ0KKyB7DQorCSB2b2xhdGlsZSBzdHJ1Y3Qgc3BpZmNfbm9yX3JlZ190KiBzcGlmYyA9IChzdHJ1Y3Qgc3BpZmNfbm9yX3JlZ190KikoWlhfU1BJRkMwX0JBU0UpOw0KKwkgDQorCSBzcGlmYy0+U0ZDX1NUQVJUIHw9IEZDX1NUQVJUOw0KKyB9DQorIA0KKw0KKyBpbnQgbm9yX3JlYWRfcmVnKHU4IG9wY29kZSwgaW50IGxlbiwgdTggKmJ1ZikNCit7DQorCWludCByZXQgPSAwOw0KKwlzcGlub3JfY21kX3QgKmNtZCA9IE5VTEw7DQorCQ0KKwljc19vcGVuKCk7Ly9zcHANCisJY21kID0gY21kX3NlZWsob3Bjb2RlKTsNCisJaWYoY21kID09IE5VTEwpDQorCXsNCisJCXByaW50aygiY21kX3NlZWsgdW5rb3duIGNtZCBlcnJvci5cbiIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorCQ0KKwlzcGlmY19zZXR1cF9jbWQoY21kLCAweDAsIGxlbik7ICAgICAgICAgICAgDQorICAgIHNwaWZjX3N0YXJ0KCk7IA0KKw0KKyAgICByZXQgPSBzcGlmY193YWl0X2NtZF9lbmQoKTsgICAgICAgICAgICAgDQorICAgIGlmKHJldCAhPSAwKQ0KKyAgICB7DQorCQlwcmludGsoInNwaWZjX3dhaXRfY21kX2VuZCBlcnJvci5cbiIpOw0KKwkgICAJcmV0dXJuIHJldDsNCisgICAgfQ0KKw0KKwlyZXQgPSBzcGlmY19yZWFkX2ZpZm8oYnVmLCBsZW4pOw0KKwljc19jbG9zZSgpOy8vc3BwDQorCWlmKHJldCA8IDApDQorCXsNCisJCXByaW50aygic3BpZmNfcmVhZF9maWZvIGVycm9yLlxuIik7DQorCSAgICByZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldHVybiAwOwkNCit9DQorDQorIGludCBub3Jfd3JpdGVfcmVnKHU4IG9wY29kZSwgdTggKmJ1ZiwgaW50IGxlbikNCit7DQorCSBpbnQgcmV0Ow0KKwkgc3Bpbm9yX2NtZF90ICpjbWQgPSBOVUxMOw0KKwkgaW50IG5vcl9zdGF0dXMgPSAwOw0KKwkgDQorCSBjc19vcGVuKCk7Ly9zcHANCisJIA0KKwkgY21kID0gY21kX3NlZWsob3Bjb2RlKTsNCisJIGlmKGNtZCA9PSBOVUxMKQ0KKwkgew0KKwkJIHByaW50aygiY21kX3NlZWsgdW5rb3duIGNtZCA9IDB4JXggZXJyb3IuXG4iLCBvcGNvZGUpOw0KKwkJIHJldHVybiAtMTsNCisJIH0NCisJIA0KKwkgc3BpZmNfc2V0dXBfY21kKGNtZCwgMHgwLCBsZW4pOyAJIA0KKw0KKwkgaWYobGVuID4gMCkNCisJIHsNCisJCSByZXQgPSBzcGlmY193cml0ZV9kYXRhKGJ1ZiwgbGVuKTsNCisJCSBpZihyZXQgIT0gbGVuKQ0KKwkJIHsNCisJCQkgcHJpbnRrKCJzcGlmY193cml0ZV9kYXRhIGVycm9yLlxuIik7DQorCQkJIHJldHVybiByZXQ7DQorCQkgfQ0KKwkgfQ0KKw0KKwkgc3BpZmNfc3RhcnQoKTsNCisNCisJIHJldCA9IHNwaWZjX3dhaXRfY21kX2VuZCgpOwkJCSAgDQorCSBpZihyZXQgIT0gMCkNCisJIHsNCisJCSBwcmludGsoInNwaWZjX3dhaXRfY21kX2VuZCBlcnJvci5cbiIpOw0KKwkJIHJldHVybiByZXQ7DQorCSB9DQorDQorCSBkb3sNCisJCSByZXQgPSBub3JfcmVhZF9yZWcoQ01EX1JEU1IwLCAxLCAmbm9yX3N0YXR1cyk7DQorCQkgaWYocmV0ICE9IDApDQorCQkgew0KKwkJCSBwcmludGsoInJlYWQgV0lQIGZhaWwuXG4iKTsNCisJCSB9DQorCSB9d2hpbGUobm9yX3N0YXR1cyAmIDB4MSk7DQorICAgIGNzX2Nsb3NlKCk7Ly9zcHANCisNCisgcmV0dXJuIDA7DQorfQ0KKw0KKyBpbnQgbm9yX3JlYWRfaWQodm9pZCkNCisgew0KKwkgaW50IHRtcDsNCisJIHU4ICBpZFtTUElfTk9SX01BWF9JRF9MRU5dOw0KKwkgY29uc3Qgc3RydWN0IG5vcl9pbmZvCSAqaW5mbzsNCisJIHRtcCA9IG5vcl9yZWFkX3JlZyhDTURfUkRJRCwgU1BJX05PUl9NQVhfSURfTEVOLCBpZCk7DQorCSBpZih0bXAgPCAwKSANCisJIHsNCisJCSBwcmludGsoImVycm9yIHJlYWRpbmcgSkVERUMgSURcbiIpOw0KKwkJIHJldHVybiB0bXA7DQorCSB9DQorIA0KKwkgZm9yICh0bXAgPSAwOyB0bXAgPCBBUlJBWV9TSVpFKHNwaV9ub3JfaWRzKSAtIDE7IHRtcCsrKSANCisJIHsNCisJCSBpbmZvID0gJnNwaV9ub3JfaWRzW3RtcF07DQorCQkgaWYoaW5mby0+aWRfbGVuKSANCisJCSB7DQorCQkJIGlmKCFtZW1jbXAoaW5mby0+aWQsIGlkLCBpbmZvLT5pZF9sZW4pKQ0KKwkJCSB7DQorCQkJCSBzcGlfbm9yX2ZsYXNoID0gaW5mbzsNCisJCQkJIHByaW50aygibm9yIGlkIGlzIDB4JXgsMHgleCwweCV4LlxuIixzcGlfbm9yX2ZsYXNoLT5pZFswXSxzcGlfbm9yX2ZsYXNoLT5pZFsxXSxzcGlfbm9yX2ZsYXNoLT5pZFsyXSk7DQorCQkJCSByZXR1cm4gMDsNCisJCQkgfQ0KKwkJIH0NCisJIH0NCisJIHByaW50aygidW5yZWNvZ25pemVkIEpFREVDIGlkXG4iKTsNCisJIHJldHVybiAtMTsNCisJIA0KKyB9DQorDQorICBpbnQgc3BpX25vcl93cml0ZV9zZWN1cml0eV9yZWdpc3Rlcih1aW50MzJfdCB0bywgc2l6ZV90IGxlbiwgdV9jaGFyICpidWYpDQorICB7DQorCSBpbnQgcmV0Ow0KKwkgaW50IG5vcl9zdGF0dXMgPSAwOw0KKwkgc3Bpbm9yX2NtZF90ICpjbWQgPSBOVUxMOw0KKw0KKwkgY21kID0gY21kX3NlZWsoQ01EX1BTUik7DQorCSANCisJIGlmKGNtZCA9PSBOVUxMKQ0KKwkgew0KKwkJIHByaW50aygiY21kX3NlZWsgdW5rb3duIGNtZCA9IDB4JXggZXJyb3IuXG4iLCBDTURfUFNSKTsNCisJCSByZXR1cm4gLTE7DQorCSB9DQorIA0KKwkgY21kLT50eF9kbWFfZW4gPSBUWF9ETUFfRElTOw0KKyAgICAgY3Nfb3BlbigpOy8vc3BwDQorCSBzcGlmY19zZXR1cF9jbWQoY21kLCB0bywgbGVuKTsJDQorDQorCSBzcGlmY19zdGFydCgpOw0KKw0KKwkgcmV0ID0gc3BpZmNfd3JpdGVfZGF0YShidWYsIGxlbik7DQorCSBpZihyZXQgPCAwKQ0KKwkgew0KKwkJIHByaW50aygic3BpZmNfd3JpdGVfZmlmbyBlcnJvci5cbiIpOw0KKwkJIHJldHVybiByZXQ7DQorCSB9DQorDQorCSByZXQgPSBzcGlmY193YWl0X2NtZF9lbmQoKTsJCQkgIA0KKwkgaWYocmV0ICE9IDApDQorCSB7DQorCQkgcHJpbnRrKCJzcGlmY193YWl0X2NtZF9lbmQgZXJyb3IuXG4iKTsNCisJCSByZXR1cm4gcmV0Ow0KKwkgfQ0KKyAgICAgY3NfY2xvc2UoKTsvL3NwcA0KKyAgICAgdWRlbGF5KDUpOw0KKwkgDQorCSBkb3sNCisJCSByZXQgPSBub3JfcmVhZF9yZWcoQ01EX1JEU1IwLCAxLCAmbm9yX3N0YXR1cyk7DQorCQkgaWYocmV0ICE9IDApDQorCQkgew0KKwkJCSBwcmludGsoInJlYWQgV0lQIGZhaWwuXG4iKTsNCisJCSB9DQorCSB9d2hpbGUobm9yX3N0YXR1cyAmIDB4MSk7DQorCSANCisJIHJldHVybiAwOw0KKyAgfQ0KKyAgDQorICBpbnQgbm9yX3dyaXRlX3NlY3VyaXR5X3JlZ2lzdGVyKHVpbnQzMl90IHRvLCB1aW50MzJfdCBsZW4sIHVpbnQzMl90IGJ1ZikNCisgew0KKwkgaW50IHJldDsNCisJIHUzMiBwYWdlX29mZnNldCwgcGFnZV9zaXplLCBpOw0KKwkgc3RydWN0IG5vcl9pbmZvICppbmZvID0gc3BpX25vcl9mbGFzaDsNCisNCisJIG5vcl93cml0ZV9yZWcoQ01EX1dSRU4sIE5VTEwsIDApOw0KKwkgDQorCSBwYWdlX29mZnNldCA9IHRvICYgKGluZm8tPnBhZ2Vfc2l6ZSAtIDEpOw0KKyANCisJIC8qIGRvIGFsbCB0aGUgYnl0ZXMgZml0IG9udG8gb25lIHBhZ2U/ICovDQorCSBpZiAocGFnZV9vZmZzZXQgKyBsZW4gPD0gaW5mby0+cGFnZV9zaXplKSB7DQorCQkgcmV0ID0gc3BpX25vcl93cml0ZV9zZWN1cml0eV9yZWdpc3Rlcih0bywgbGVuLCAodWludDhfdCAqKWJ1Zik7DQorCSB9IGVsc2Ugew0KKwkJIC8qIHRoZSBzaXplIG9mIGRhdGEgcmVtYWluaW5nIG9uIHRoZSBmaXJzdCBwYWdlICovDQorCQkgcGFnZV9zaXplID0gaW5mby0+cGFnZV9zaXplIC0gcGFnZV9vZmZzZXQ7DQorCQkgcmV0ID0gc3BpX25vcl93cml0ZV9zZWN1cml0eV9yZWdpc3Rlcih0bywgcGFnZV9zaXplLCAodWludDhfdCAqKWJ1Zik7DQorIA0KKwkJIC8qIHJlYWQgZXZlcnl0aGluZyBpbiBub3ItPnBhZ2Vfc2l6ZSBjaHVua3MgKi8NCisJCSBmb3IgKGkgPSBwYWdlX3NpemU7IGkgPCBsZW47IGkgKz0gcGFnZV9zaXplKSB7DQorCQkJIHBhZ2Vfc2l6ZSA9IGxlbiAtIGk7DQorCQkJIGlmIChwYWdlX3NpemUgPiBpbmZvLT5wYWdlX3NpemUpDQorCQkJCSBwYWdlX3NpemUgPSBpbmZvLT5wYWdlX3NpemU7DQorDQorCQkJIG5vcl93cml0ZV9yZWcoQ01EX1dSRU4sIE5VTEwsIDApOw0KKwkJCSByZXQgPSBzcGlfbm9yX3dyaXRlX3NlY3VyaXR5X3JlZ2lzdGVyKHRvICsgaSwgcGFnZV9zaXplLCAoKHVpbnQ4X3QgKilidWYgKyBpKSk7DQorCQkgfQ0KKwkgfQ0KKyANCisJIHJldHVybiByZXQ7DQorIH0NCisgaW50IHNwaV9ub3JfcmVhZF9zZWN1cml0eV9yZWdpc3Rlcih1aW50MzJfdCBmcm9tLCBzaXplX3QgbGVuLCB1X2NoYXIgKmJ1ZikNCisgew0KKwkgaW50IHJldDsNCisJIHNwaW5vcl9jbWRfdCAqY21kID0gTlVMTDsNCisgDQorCSBjbWQgPSBjbWRfc2VlayhDTURfUlNSKTsNCisNCisJIGlmKGNtZCA9PSBOVUxMKQ0KKwkgew0KKwkJIHByaW50aygiY21kX3NlZWsgdW5rb3duIGVycm9yLlxuIik7DQorCQkgcmV0dXJuIC0xOw0KKwkgfQ0KKw0KKwkgY21kLT5yeF9kbWFfZW4gPSBSWF9ETUFfRElTOw0KKyAgICAgY3Nfb3BlbigpOy8vc3BwDQorCSBzcGlmY19zZXR1cF9jbWQoY21kLCBmcm9tLCBsZW4pOwkJCQkgDQorCSBzcGlmY19zdGFydCgpOw0KKwkgcmV0ID0gc3BpZmNfcmVhZF9maWZvKGJ1ZiwgbGVuKTsNCisJIGlmKHJldCA8IDApDQorCSB7DQorCQkgcHJpbnRrKCJzcGlmY19yZWFkX2ZpZm8gZXJyb3IuXG4iKTsNCisJCSByZXR1cm4gcmV0Ow0KKwkgfQ0KKyANCisJIHJldCA9IHNwaWZjX3dhaXRfY21kX2VuZCgpOwkJCSANCisJIGlmKHJldCAhPSAwKQ0KKwkgew0KKwkJIHByaW50aygic3BpZmNfd2FpdF9jbWRfZW5kIGVycm9yLlxuIik7DQorCQkgY3NfY2xvc2UoKTsvL3NwcA0KKwkJIHJldHVybiByZXQ7DQorCSB9DQorCSBjc19jbG9zZSgpOy8vc3BwDQorCSByZXR1cm4gMDsNCisgfQ0KKyANCisgaW50IG5vcl9yZWFkX3NlY3VyaXR5X3JlZ2lzdGVyKHVpbnQzMl90IGZyb20sIHVpbnQzMl90IGxlbiwgdWludDMyX3QgdG8pDQorIHsNCisJIGludCByZXQ7DQorCSB1MzIgcGFnZV9vZmZzZXQsIHBhZ2Vfc2l6ZSwgaTsNCisJIHN0cnVjdCBub3JfaW5mbyAqaW5mbyA9IHNwaV9ub3JfZmxhc2g7DQorCSANCisJIHBhZ2Vfb2Zmc2V0ID0gZnJvbSAmIChpbmZvLT5wYWdlX3NpemUgLSAxKTsNCisgDQorCSAvKiBkbyBhbGwgdGhlIGJ5dGVzIGZpdCBvbnRvIG9uZSBwYWdlPyAqLw0KKwkgaWYgKHBhZ2Vfb2Zmc2V0ICsgbGVuIDw9IGluZm8tPnBhZ2Vfc2l6ZSkgew0KKwkJIHJldCA9IHNwaV9ub3JfcmVhZF9zZWN1cml0eV9yZWdpc3Rlcihmcm9tLCBsZW4sICh1aW50OF90ICopdG8pOw0KKwkgfSBlbHNlIHsNCisJCSAvKiB0aGUgc2l6ZSBvZiBkYXRhIHJlbWFpbmluZyBvbiB0aGUgZmlyc3QgcGFnZSAqLw0KKwkJIHBhZ2Vfc2l6ZSA9IGluZm8tPnBhZ2Vfc2l6ZSAtIHBhZ2Vfb2Zmc2V0Ow0KKwkJIHJldCA9IHNwaV9ub3JfcmVhZF9zZWN1cml0eV9yZWdpc3Rlcihmcm9tLCBwYWdlX3NpemUsICh1aW50OF90ICopdG8pOw0KKyANCisJCSAvKiByZWFkIGV2ZXJ5dGhpbmcgaW4gbm9yLT5wYWdlX3NpemUgY2h1bmtzICovDQorCQkgZm9yIChpID0gcGFnZV9zaXplOyBpIDwgbGVuOyBpICs9IHBhZ2Vfc2l6ZSkgew0KKwkJCSBwYWdlX3NpemUgPSBsZW4gLSBpOw0KKwkJCSBpZiAocGFnZV9zaXplID4gaW5mby0+cGFnZV9zaXplKQ0KKwkJCQkgcGFnZV9zaXplID0gaW5mby0+cGFnZV9zaXplOw0KKyANCisJCQkgcmV0ID0gc3BpX25vcl9yZWFkX3NlY3VyaXR5X3JlZ2lzdGVyKGZyb20gKyBpLCBwYWdlX3NpemUsICgodWludDhfdCAqKXRvICsgaSkpOw0KKwkJIH0NCisJIH0NCisgDQorCSByZXR1cm4gcmV0Ow0KKyB9DQorDQoraW50IG5vcl9pbml0KHZvaWQpDQorew0KKwlpbnQgcmV0ID0gMDsNCisJcHJpbnRrKCJub3IgaW5pdCAuLi4gXG4iKTsNCisJc29mdF9zcGluX2xvY2soTkFORF9TRkxPQ0spOw0KKyAgICANCisJLy9zcGlmY19kaXNhYmxlKCk7DQorCQ0KKwkvL3NwaWZjX2VuYWJsZSgpOw0KKw0KKwlyZXQgPSBub3JfcmVhZF9pZCgpOw0KKwlpZihyZXQgIT0gMCkNCisJew0KKwkgICAgc29mdF9zcGluX3VubG9jayhOQU5EX1NGTE9DSyk7DQorCQlyZXR1cm4gLTE7DQorCX0NCisJDQorCXNvZnRfc3Bpbl91bmxvY2soTkFORF9TRkxPQ0spOw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIEZ1bmN0aW9uOiAgICAgekRydk90cF9HZXRTZWN1cmVNc2cNCisqIERlc2NyaXB0aW9uOiAgZ2V0IHB1YiBrZXkgZnJvbSBpcmFtLCBsb2FkIGJ5IHVib290DQorKiBQYXJhbWV0ZXJzOg0KKyogICBJbnB1dDoNCisqICAgICAgIE5vbmUNCisqICAgT3V0cHV0Og0KKyogICAgICAgTm9uZQ0KKyogUmV0dXJuczoNCisqICAgICAgIE5vbmUNCisqIE90aGVyczoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgekRydk90cF9HZXRTZWN1cmVNc2coVF9aRHJ2T3RwX1NlY3VyZSAqc2VjdXJlKQ0KK3sNCisJdTMyIGkgPSAwOw0KKwl1MzIgcmV0ID0gMDsNCisJaW50MzJfdCBvZmZzZXQgPSAweDEwMDA7DQorCQ0KKwl1aW50MzJfdCBsZW4gPSBzaXplb2Yoc19PdHBTdHJ1Y3QpOw0KKwkNCisJc19JbWFnZUhlYWRlciAqc19oZWFkZXIgPSAoc19JbWFnZUhlYWRlciAqKShaWF9JUkFNMF9CQVNFICsgNCk7DQorCXNfT3RwU3RydWN0ICpzX290cCAgPSBOVUxMOw0KKwkNCisgICAgc29mdF9zcGluX2xvY2soTkFORF9TRkxPQ0spOw0KKwltdXRleF9sb2NrKCZvdHBNdXRleCk7DQorCQ0KKwlyZXQgPSBub3JfcmVhZF9zZWN1cml0eV9yZWdpc3RlcihvZmZzZXQsIGxlbiwgJm90cF9kYXRhKTsNCisJaWYocmV0ICE9MCl7DQorICAgICAgICBwcmludGsoInJlYWQgb3RwIGRhdGEgZXJyb3IuXG4iKTsNCisJfQ0KKwkNCisJc19vdHAgID0gKHNfT3RwU3RydWN0ICopKCZvdHBfZGF0YSk7DQorCQ0KKwlmb3IoaSA9IDA7IGkgPCA5NTsgaSArKykNCisJew0KKwkJc2VjdXJlLT5wdWJLZXlbaV0gPSBzX2hlYWRlci0+dWlQdWJLZXlbaV07DQorCQkvL3ByaW50aygidWlQdWJLZXlbJWRdIGlzIDB4JXhcbiIsaSxzX2hlYWRlci0+dWlQdWJLZXlbaV0pOw0KKwl9DQorDQorCXNlY3VyZS0+c2VjdXJlRmxhZyA9IHNfb3RwLT5zZWN1cmVfZmxhZzsNCisNCisJZm9yKGkgPSAwOyBpIDwgODsgaSArKykNCisJew0KKwkJc2VjdXJlLT5wdWJLZXlIYXNoW2ldID0gc19vdHAtPnB1a19oYXNoW2ldOw0KKwkJcHJpbnRrKCJwdWtfaGFzaFslZF0gaXMgMHgleFxuIixpLHNfb3RwLT5wdWtfaGFzaFtpXSk7DQorCX0NCisNCisJZm9yKGkgPSAwOyBpIDwgMzsgaSArKykNCisJew0KKwkJc2VjdXJlLT5zZWN1cmVEZXZJZFtpXSA9IHNfb3RwLT5zZWN1cmVEZXZJZFtpXTsNCisJCXByaW50aygic2VjdXJlRGV2SWRbJWRdIGlzIDB4JXhcbiIsaSxzX290cC0+c2VjdXJlRGV2SWRbaV0pOw0KKwl9DQorDQorCW11dGV4X3VubG9jaygmb3RwTXV0ZXgpOw0KKwlzb2Z0X3NwaW5fdW5sb2NrKE5BTkRfU0ZMT0NLKTsNCit9DQorRVhQT1JUX1NZTUJPTCh6RHJ2T3RwX0dldFNlY3VyZU1zZyk7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIEZ1bmN0aW9uOiAgICAgekRydk90cF9TZXRTZWN1cmVNc2cNCisqIERlc2NyaXB0aW9uOiAgc2V0IG90cCB2YWx1ZQ0KKyogUGFyYW1ldGVyczoNCisqICAgSW5wdXQ6DQorKiAgICAgICBOb25lDQorKiAgIE91dHB1dDoNCisqICAgICAgIE5vbmUNCisqIFJldHVybnM6DQorKiAgICAgICBOb25lDQorKiBPdGhlcnM6DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitpbnQgekRydk90cF9TZXRTZWN1cmVNc2coRV9aRHJ2T3RwX1NlY3VyZU1zZyBzZWN1cmVfbXNnLCB1MzIgKnNlY3VyZV9idWYpDQorew0KKwl1MzIgaSA9IDA7DQorCVRfWkRydk90cF9TZWN1cmUgc2VjdXJlID0gezB9Ow0KKwl1MzIgdG1wYnVmWzhdID0gezB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsDQorCQkgICAgICAgICAgICAgMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZn07DQorCWludCByZXQgPSAwOw0KKwkNCisJaWYoc2VjdXJlX21zZyA+PSBPVFBfTUFYX0VOVU0pDQorCXsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXpEcnZPdHBfR2V0U2VjdXJlTXNnKCZzZWN1cmUpOw0KKw0KKwlpZigoKHNlY3VyZV9tc2cgPT0gT1RQX1NFQ1VSRV9FTikmJihzZWN1cmUuc2VjdXJlRmxhZyAhPSAweGZmZmZmZmZmKSl8fA0KKwkgICgoc2VjdXJlX21zZyA9PSBPVFBfUFVCX0tFWV9IQVNIKSYmKG1lbWNtcChzZWN1cmUucHViS2V5SGFzaCx0bXBidWYsc2l6ZW9mKHNlY3VyZS5wdWJLZXlIYXNoKSkgIT0gMCkpfHwNCisJICAoKHNlY3VyZV9tc2cgPT0gT1RQX0RFVklDRV9JRCkmJihtZW1jbXAoc2VjdXJlLnNlY3VyZURldklkLHRtcGJ1ZixzaXplb2Yoc2VjdXJlLnNlY3VyZURldklkKSkgIT0gMCkpKQ0KKwkJcmV0dXJuIC0xOw0KKwkNCisgICAgc29mdF9zcGluX2xvY2soTkFORF9TRkxPQ0spOw0KKwltdXRleF9sb2NrKCZvdHBNdXRleCk7DQorDQorCXN3aXRjaChzZWN1cmVfbXNnKQ0KKwl7DQorCQljYXNlIE9UUF9TRUNVUkVfRU46DQorCQl7DQorCQkgICAgcmV0ID0gbm9yX3dyaXRlX3NlY3VyaXR5X3JlZ2lzdGVyKFNFQ1VSRV9FTl9PRkZTRVQsIDQsIHNlY3VyZV9idWYpOw0KKwkJCWlmKHJldCA8IDApew0KKwkJCQltdXRleF91bmxvY2soJm90cE11dGV4KTsNCisJCQkJY3NfY2xvc2UoKTsvL3NwcA0KKwkJCQlyZXR1cm4gcmV0Ow0KKwkJCX0NCisJCQlicmVhazsNCisJCX0NCisJCWNhc2UgT1RQX1BVQl9LRVlfSEFTSDoNCisJCXsgICAgDQorCQkgICAgLy9wcmludGsoInB1YiBrZXkgaGFzaCBpcyAweCV4LlxuIiwqKHUzMiAqKXNlY3VyZV9idWYpOw0KKwkJICAgIHJldCA9IG5vcl93cml0ZV9zZWN1cml0eV9yZWdpc3RlcihQVUJfS0VZX0hBU0hfT0ZGU0VULCAzMiwgc2VjdXJlX2J1Zik7DQorCQkJaWYocmV0IDwgMCl7DQorCQkJCW11dGV4X3VubG9jaygmb3RwTXV0ZXgpOw0KKwkJCQljc19jbG9zZSgpOy8vc3BwDQorCQkJCXJldHVybiAtcmV0Ow0KKwkJCX0NCisJCQlicmVhazsNCisJCX0NCisJCWNhc2UgT1RQX0RFVklDRV9JRDoNCisJCXsNCisJCQlyZXQgPSBub3Jfd3JpdGVfc2VjdXJpdHlfcmVnaXN0ZXIoREVWSUNFX0lEX09GRlNFVCwgMTIsIHNlY3VyZV9idWYpOw0KKwkJCWlmKHJldCA8IDApew0KKwkJCQltdXRleF91bmxvY2soJm90cE11dGV4KTsNCisJCQkJY3NfY2xvc2UoKTsvL3NwcA0KKwkJCQlyZXR1cm4gcmV0Ow0KKwkJCX0NCisJCQlicmVhazsNCisJCX0NCisJCWRlZmF1bHQ6DQorCQkJYnJlYWs7DQorCX0NCisNCisJbXV0ZXhfdW5sb2NrKCZvdHBNdXRleCk7DQorICAgIHNvZnRfc3Bpbl91bmxvY2soTkFORF9TRkxPQ0spOw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IHp4Mjlfb3RwX3NldF9zZWN1cmUoRV9aRHJ2T3RwX1NlY3VyZU1zZyBzZWN1cmVfbXNnLCB1MzIgKnNlY3VyZV9idWYpDQorew0KKwlpbnQgcmV0ID0gMDsNCisJaW50CWxlbiA9IDA7DQorCXZvaWQgKmJ1Zj1OVUxMOw0KKw0KKwlzd2l0Y2goc2VjdXJlX21zZykNCisJew0KKwkJY2FzZSBPVFBfU0VDVVJFX0VOOg0KKwkJCWxlbiA9IHNpemVvZih1MzIpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBPVFBfUFVCX0tFWV9IQVNIOg0KKwkJCWxlbiA9IDggKiBzaXplb2YodTMyKTsNCisJCQlicmVhazsNCisJCWNhc2UgT1RQX0RFVklDRV9JRDoNCisJCQlsZW4gPSAzICogc2l6ZW9mKHUzMik7DQorCQkJYnJlYWs7DQorDQorCQlkZWZhdWx0Og0KKwkJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsNCisJaWYoTlVMTCA9PSBidWYpDQorCQlyZXR1cm4gLUVOT1NQQzsNCisJDQorCXJldCA9IGNvcHlfZnJvbV91c2VyKGJ1Ziwgc2VjdXJlX2J1ZiwgbGVuKTsNCisJaWYocmV0KQ0KKwkJcHJpbnRrKCIlczogY29weSB1c2VyIGZhaWxlZFxuIixfX2Z1bmNfXyk7DQorCQ0KKwlyZXQgPSB6RHJ2T3RwX1NldFNlY3VyZU1zZyhzZWN1cmVfbXNnLCBidWYpOw0KKwlrZnJlZShidWYpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCisNCitzdGF0aWMgbG9uZyB6eF9vdHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQ0KK3sNCisJaW50IHJldCA9IDA7DQorCVRfWkRydk90cF9TZWN1cmUgc2VjdXJlOw0KKw0KKwlpZiAoYXJnID09IE5VTEwpDQorCQlyZXR1cm4gLUVGQVVMVDsNCisJDQorCXN3aXRjaChjbWQpDQorCXsNCisJCWNhc2UgT1RQX0dFVF9EQVRBOg0KKwkJCXByaW50aygic3RhcnQgZ2V0IG90cCBkYXRhLi4uXG4iKTsNCisJCQl6RHJ2T3RwX0dldFNlY3VyZU1zZygmc2VjdXJlKTsJCSAgICANCisJCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHZvaWQgKilhcmcsICZzZWN1cmUsIHNpemVvZihUX1pEcnZPdHBfU2VjdXJlKSk7DQorCQkJaWYocmV0KXsNCisgICAgICAgICAgICAgICAgcHJpbnRrKCIlczogY29weSB1c2VyIGZhaWxlZFxuIixfX2Z1bmNfXyk7DQorCQkJCXByaW50aygid3JpdGUgZ2V0IG90cCBkYXRhIGZhaWwuLi5cbiIpOw0KKwkJCX1lbHNlew0KKwkJCQlwcmludGsoImFscmVhZHkgZ2V0IG90cCBkYXRhLi4uXG4iKTsNCisJCQl9DQorCQkJCQ0KKwkJCWJyZWFrOw0KKwkJY2FzZSBPVFBfU0VUX1NFQ1VSRV9FTjoNCisJCQlwcmludGsoInN0YXJ0IHNldCBzZWN1cmUgZW4uLi5cbiIpOw0KKwkJCXJldCA9IHp4Mjlfb3RwX3NldF9zZWN1cmUoT1RQX1NFQ1VSRV9FTiwgKHUzMiAqKWFyZyk7DQorCQkgICAgaWYocmV0KQ0KKwkJCQlwcmludGsoInNldCBzZWN1cmUgZW4gZmFpbC4uLixyZXQgaXMgMHgleFxuIixyZXQpOw0KKwkJCWVsc2UNCisJCQkJcHJpbnRrKCJhbHJlYWR5IHNldCBzZWN1cmUgZW4uLi5cbiIpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBPVFBfU0VUX1BVQl9LRVlfSEFTSDoNCisJCQlwcmludGsoInN0YXJ0IHNldCBwdWIga2V5IGhhc2guLi5cbiIpOw0KKwkJCXJldCA9IHp4Mjlfb3RwX3NldF9zZWN1cmUoT1RQX1BVQl9LRVlfSEFTSCwgKHUzMiAqKWFyZyk7DQorCQkgICAgaWYocmV0KQ0KKwkJCQlwcmludGsoInNldCBwdWIga2V5IGhhc2ggZmFpbC4uLixyZXQgaXMgMHgleFxuIixyZXQpOw0KKwkJCWVsc2UNCisJCQkJcHJpbnRrKCJhbHJlYWR5IHNldCBwdWIga2V5IGhhc2guLi5cbiIpOw0KKwkJCWJyZWFrOyANCisJCWNhc2UgT1RQX1NFVF9ERVZJQ0VfSUQ6DQorCQkJcmV0ID0gengyOV9vdHBfc2V0X3NlY3VyZShPVFBfREVWSUNFX0lELCAodTMyICopYXJnKTsNCisJCQlicmVhazsgDQorCQlkZWZhdWx0Og0KKwkJCXJldHVybiAtRVBFUk07DQorCQl9DQorCQ0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwl6eF9vdHBfb3BzID0gew0KKwkub3duZXIgCQk9IFRISVNfTU9EVUxFLA0KKwkudW5sb2NrZWRfaW9jdGwgPSB6eF9vdHBfaW9jdGwsDQorfTsNCisNCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugenhfb3RwX21pc2NkZXYgPSB7DQorCS5taW5vcgkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsDQorCS5uYW1lCQk9ICJvdHAiLA0KKwkuZm9wcwkJPSAmenhfb3RwX29wcywNCit9Ow0KKw0KKw0KK3N0YXRpYyBpbnQgX19pbml0IHp4X290cF9pbml0KHZvaWQpDQorew0KKwlpbnQgcmV0ID0gMDsNCisNCisJbXV0ZXhfaW5pdCgmb3RwTXV0ZXgpOw0KKwkNCisJcmV0ID0gbWlzY19yZWdpc3Rlcigmenhfb3RwX21pc2NkZXYpOw0KKwlpZiAocmV0KSB7DQorCQlwcmludGsoS0VSTl9FUlIiJXM6IG90cCBmYWlsZWQgdG8gcmVnaXN0ZXIgbWlzY2RldiAocmV0ID0gJWQpXG4iLCBfX0ZJTEVfXywgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcHJpbnRrKCJbeHh4XSBvdHAgZGV2IGluaXRlZCEgXG4iKTsJDQorDQorCWlmKG5vcl9jbWRsaW5lICE9IE5VTEwpDQorCXsNCisJICAgIGlmICghc3RyY21wKG5vcl9jbWRsaW5lLCAiMSIpKQ0KKwkJew0KKwkJCXJldCA9IG5vcl9pbml0KCk7DQorCQkJaWYocmV0KXsNCisJCSAgICAgICAgcHJpbnRrKCJub3IgaW5pdCBlcnIuXG4iKTsNCisJCQkJcmV0dXJuIHJldDsNCisJCQl9CSAgICANCisJCX0NCisJfQ0KKwkNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorbW9kdWxlX2luaXQoenhfb3RwX2luaXQpOw0KKw0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9wb3dlci96eC1jcHVpZGxlLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcG93ZXIvengtY3B1aWRsZS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNmI1ZjNjZi4uYTJhMzE1NAotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcG93ZXIvengtY3B1aWRsZS5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9wb3dlci96eC1jcHVpZGxlLmMKQEAgLTYwNyw3ICs2MDcsNyBAQAogCXNsZWVwX2NvdW50Kys7CiAJcG1fcmFtX2xvZygiIEBAc2xlZXAgZW50ZXIsZXhwZWN0X3RpbWU6JXUsamlmZmllczoldVxuIiwgZXhwZWN0X3RpbWUsIGppZmZpZXMpOwogCi0JcG1fcmFtX2xvZygiIGZyZXFfc2VsPTB4JXggXG4iLCAgcG1fcmVhZF9yZWcoWlhfTUFUUklYX0NSTV9CQVNFKzB4MTU4KSApOworCS8vcG1fcmFtX2xvZygiIGZyZXFfc2VsPTB4JXggXG4iLCAgcG1fcmVhZF9yZWcoWlhfTUFUUklYX0NSTV9CQVNFKzB4MTU4KSApOwogCQogCSNpZmRlZiBDT05GSUdfWlhfUE1fREVCVUcKIAlwbV93cml0ZV9yZWcoQVBfSURMRV9TTEVFUF9TVEFUVVNfRkxBRywweGZmMDIpOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3Bvd2VyL3p4LXBtLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcG93ZXIvengtcG0uYwppbmRleCBmNzQ5ZjdjLi44YTczMWYxIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcG93ZXIvengtcG0uYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcG93ZXIvengtcG0uYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAjaWZkZWYgQ09ORklHX1pYX1JBTV9DT05TT0xFCiAJaW50IGk7CiAKLQlpZigocHJpbnRfY250KyspICUgMTAwID09IDApIHsKKwlpZigocHJpbnRfY250KyspICUgMSA9PSAwKSB7CiAJCWZvcihpPTA7IGk8cG1faWRsZV9zcmFtX2N1cl9pdGVtOyBpKyspCiAJCXsKIAkJCXByaW50aygiJXMiLCBwbV9pZGxlX3NyYW1fYnVmW2ldLmJ1Zik7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcnBtL2F0X2lvLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcnBtL2F0X2lvLmMKaW5kZXggODY3OGE2YS4uNWI3Njc2MiAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3JwbS9hdF9pby5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9ycG0vYXRfaW8uYwpAQCAtMzg0LDYgKzM4NCwzMCBAQAogZXh0ZXJuIGludCB6RHJ2WHAyeHBfQ3AyQXBXYWtldXBBcCh2b2lkKTsKICNlbmRpZgogCisjaWZkZWYgX1VTRV9WRUhJQ0xFX0RDCitjaGFyICphdF9wc21fZmlsdGVyOy8vPSIrQ1JFRzorQ0dSRUc6K0NFUkVHOl5NT0RFOiI7Cittb2R1bGVfcGFyYW0oYXRfcHNtX2ZpbHRlciwgY2hhcnAsIDA2NDQpOworZXh0ZXJuIGludCBwY3VfQ29yZUlzQWN0aXZlKGludCBjb3JlKTsKK2ludCBhdGlvX3BzbV9jaGVjayhjb25zdCBjaGFyICpidWZmZXIpCit7CisJaWYoYXRfcHNtX2ZpbHRlciAmJiBwY3VfQ29yZUlzQWN0aXZlKDIpID09IDAgJiYgYnVmZmVyKXsKKwkJY2hhciBwcmVmaXhbMTI4XSA9IHswfTsKKwkJY2hhciAqaW5mb3JtID0gc3Ryc3RyKGJ1ZmZlciwgIjogIik7CisJCWNoYXIgKnJzcF9vayA9IHN0cnN0cihidWZmZXIsICJcclxuT0tcclxuIik7CisJCWNoYXIgKnJzcF9lcnIgPSBzdHJzdHIoYnVmZmVyLCAiRVJST1IiKTsKKwkJCisJCWlmKGluZm9ybSAmJiByc3Bfb2sgPT0gTlVMTCAmJiByc3BfZXJyID09IE5VTEwpeworCQkJaWYoaW5mb3JtIC0gYnVmZmVyIC0gMSA8IHNpemVvZihwcmVmaXgpKXsKKwkJCQlzdHJuY3B5KHByZWZpeCwgYnVmZmVyICsgMiwgaW5mb3JtIC0gYnVmZmVyIC0gMSk7CisJCQkJaWYoc3Ryc3RyKGF0X3BzbV9maWx0ZXIsIHByZWZpeCkpCisJCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKIGludCBQU0NhbGxCYWNrRW50cnkodW5zaWduZWQgY2hhciBjaF9JRCwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgc2hvcnQgZGF0YUxlbiwgVF96QXRpMl9DdHJtQ2hJbmQgY2hJbmQpCiB7CiAJaW50IHJldCA9IEFUSU9fU1VDQ0VTUzsKQEAgLTQ0NSw2ICs0NjksMTIgQEAKIAkJLy9wcmludGsoImVyciBjaGlkPSVkIGNtZD0lcyFcbiIsY2hfSUQsIGRhdGEpOwogCQlyZXR1cm4gQVRJT19TVUNDRVNTOwogCX0KKyNpZmRlZiBfVVNFX1ZFSElDTEVfREMKKwlpZihhdGlvX3BzbV9jaGVjayhkYXRhKSl7CisJCS8vcHJpbnRrKCJwc20gZHJvcCBjaGlkPSVkIGNtZD0lcyFcbiIsY2hfSUQsIGRhdGEpOworCQlyZXR1cm4gQVRJT19TVUNDRVNTOworCX0KKyNlbmRpZgogCS8vtbHHsM6qQVTNqLXAtcTK/b7dCiAJaWYoIChaQVRJMl9DSElORF9BVCA9PSBjaEluZCkgJiYgKChycG1zZ19jaGFubmVsID0gJnJwbXNnX3NpbV96eDI5LnJwbXNnX2NoYW5uZWxbY2hJRC0xXSkgIT0gTlVMTCkgKQogCXsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS90c2MvengtdHNjLXN0cmF0ZWd5LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy1zdHJhdGVneS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZTQ0NTc4YS4uNWIwNTY4ZgotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy1zdHJhdGVneS5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS90c2MvengtdHNjLXN0cmF0ZWd5LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcF90eXBlcy5oPg0KICNpbmNsdWRlICJOdlBhcmFtX2Rydi5oIg0KICNpbmNsdWRlICJwdWJfZGVidWdfaW5mby5oIg0KKyNpbmNsdWRlIDxtYWNoL3NwaW5sb2NrLmg+DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzDQpAQCAtODAsNiArODEsMTYgQEAKIAl7IncgdXBfdGFuc21pdGVwb3dlcjIiLCAgMH0sDQogfTsNCiANCisNCit1OCBnX2JpdF9wcm9iZVtQUk9CRV9NQVhdPXsNCisJQklUX1BST0JFX0FEQzEsDQorCUJJVF9QUk9CRV9BREMyLA0KKwlCSVRfUFJPQkVfQURDUkYsDQorCUJJVF9QUk9CRV9BRENSRmQsDQorCUJJVF9QUk9CRV9SRVNFVjMsDQorCUJJVF9QUk9CRV9SRVNFVjQJDQorfTsNCisNCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDS/dPDzeKyv7Hkwb8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KQEAgLTEwMyw4ICsxMTQsMTAgQEAKIHsNCiAJdTMyIHRlbXA7DQogCQ0KKwlod19zcGluX2xvY2soUkVHTE9DS19IV0xPQ0spOw0KIAl0ZW1wPSAodHNjX3JlYWRfcmVnKHJlZ05hbWUpJih+KCgoMHgxPDxiaXRzTGVuKS0weDEpPDxiaXRzQWRkcikpKXwoYml0c1ZhbHVlPDxiaXRzQWRkcik7DQogCXRzY193cml0ZV9yZWcocmVnTmFtZSx0ZW1wKTsNCisJaHdfc3Bpbl91bmxvY2soUkVHTE9DS19IV0xPQ0spOwkNCiB9DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkBAIC0xMjYsNiArMTM5LDE4MSBAQAogfQ0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogRnVuY3Rpb246IHRzY19Qcm9iZVN0cmF0ZWd5DQorICogRGVzY3JpcHRpb246IA0KKyAqIFBhcmFtZXRlcnM6DQorICogICBJbnB1dDogDQorICoJCQkNCisNCisgKiAgIE91dHB1dDogTi9BDQorICogUmV0dXJuczogTi9BDQorDQorICogT3RoZXJzOgkvL25vdCB1c2UNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIHRzY3RybF9wcm9iZV9zdHJhdGVneSh1MzIgcHJvYmVfbnVtLGludCB0ZW1wZXJhdHVyZSApIA0KK3sNCisNCisJaW50ICB0ZW1wMT0odGVtcGVyYXR1cmUtVHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzMpOw0KKwlpbnQgIHRlbXAyPShUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNi1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMyk7DQorDQorCWlmKHRlbXBlcmF0dXJlPD1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMyl7DQorCQl0ZW1wX3BlcmNlbnQ9MDsJDQorCX1lbHNlIGlmKCh0ZW1wZXJhdHVyZTw9VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzYpKXsNCisJCXRlbXBfcGVyY2VudD0oKDEwMCp0ZW1wMS90ZW1wMikvVEVNUF9QRVJDRU5UX0lOVEVSVkFMKSpURU1QX1BFUkNFTlRfSU5URVJWQUw7DQorCX1lbHNlew0KKwkJdGVtcF9wZXJjZW50PTEwMDsNCisJfQ0KKwkNCisJaWYoVHNOdkRhdGEuQWRjUkZkX0VuPT0weEIyKXsNCisJCS8qKi8NCisJCWlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfOSkNCisJCXsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dICxTVFJURUdZX1NUQVJUKTsNCisJCX0JDQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNykNCisJCXsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX0FOWVJFU0lERU5ULCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dICxTVFJURUdZX1NUQVJUKTsNCisJCX0NCisJCWVsc2UgaWYodGVtcGVyYXR1cmU+PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF81KQ0KKwkJew0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX1VQVFJBTlNJTUlUUE9XRVIyLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dICxTVFJURUdZX1NUQVJUKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOw0KKwkJfQ0KKwkJZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzMpDQorCQl7ICAgDQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfRE9XTlJBVEUyLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUQVJUKTsNCisJCX0NCisJCWVsc2UgaWYodGVtcGVyYXR1cmU+PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8xKQ0KKwkJewkNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOw0KKwkJfSAgIA0KKwkJZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzApDQorCQl7DQorCQl9DQorCQllbHNlDQorCQl7CQ0KKw0KKwkJfQ0KKw0KKwkJLyoqLw0KKwkJaWYodGVtcGVyYXR1cmU8VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzApDQorCQl7DQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9TSFVURE9XTixnX2JpdF9wcm9iZVtwcm9iZV9udW1dLFNUUlRFR1lfU1RPUCk7DQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMiwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RPUCk7DQorCQl9DQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8yKQ0KKwkJew0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSxTVFJURUdZX1NUT1ApOw0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfQU5ZUkVTSURFTlQsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RPUCk7DQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfVVBUUkFOU0lNSVRQT1dFUjIgLGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RPUCk7DQorCQl9DQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF80KQ0KKwkJew0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSxTVFJURUdZX1NUT1ApOyANCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX0FOWVJFU0lERU5ULGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMixnX2JpdF9wcm9iZVtwcm9iZV9udW1dLFNUUlRFR1lfU1RPUCk7DQorCQl9DQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF82KQ0KKwkJew0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSxTVFJURUdZX1NUT1ApOw0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfQU5ZUkVTSURFTlQsZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSxTVFJURUdZX1NUT1ApOw0KKwkJfSAgIA0KKwkJZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfOCkNCisJCXsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCisJCX0gDQorCQllbHNlDQorCQl7DQorDQorCQl9DQorCX1lbHNlew0KKwkJLyoqLw0KKwkJaWYodGVtcGVyYXR1cmU+PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF85KQ0KKwkJew0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sIGdfYml0X3Byb2JlW3Byb2JlX251bV0gLFNUUlRFR1lfU1RBUlQpOw0KKwkJfQ0KKwkJZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzcpDQorCQl7DQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSAsU1RSVEVHWV9TVEFSVCk7DQorCQl9DQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNSkNCisJCXsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMiwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSAsU1RSVEVHWV9TVEFSVCk7DQorCQkJLy8JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX1VQVFJBTlNJTUlUUE9XRVIyLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dICxTVFJURUdZX1NUQVJUKTsJICAgDQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUQVJUKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOw0KKwkJCS8vCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19ET1dOUkFURTIsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOw0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfREZTLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUQVJUKTsvL3pEcnZQb3dfU2V0QXJtUHNDb3JlRnJlcShDTEszMTJNKTsJICAgDQorCQl9DQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMykNCisJCXsgICANCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX1JBVEUsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOw0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX0RPV05SQVRFMiwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVEFSVCk7DQorCQkJLy8JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX0RPV05SQVRFMiwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVEFSVCk7CSAgIA0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfREZTLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUQVJUKTsvL3pEcnZQb3dfU2V0QXJtUHNDb3JlRnJlcShDTEszMTJNKTsJICAgDQorCQl9DQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMSkNCisJCXsJDQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUQVJUKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOw0KKwkJCS8vCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19ET1dOUkFURTIsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOwkgIAkJDQorCQl9ICAgDQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMCkNCisJCXsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX1JBVEUsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfSE9MRCk7DQorCQl9DQorCQllbHNlDQorCQl7CQ0KKw0KKwkJfQ0KKwkJLyoqLw0KKwkJaWYodGVtcGVyYXR1cmU8VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzApDQorCQl7DQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9TSFVURE9XTixnX2JpdF9wcm9iZVtwcm9iZV9udW1dLFNUUlRFR1lfU1RPUCk7DQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMiwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsNCisJCQkvLwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfVVBUUkFOU0lNSVRQT1dFUjIsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RPUCk7CSAgIAkgICAJICAgDQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUT1ApOw0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX0RPV05SQVRFMiwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsNCisJCQkvLwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfRE9XTlJBVEUyLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUT1ApOwkgICANCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0RGUywgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsvLyB6RHJ2UG93X1NldEFybVBzQ29yZUZyZXEoQ0xLNjI0TSk7DQorCQl9DQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8yKQ0KKwkJew0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSxTVFJURUdZX1NUT1ApOw0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfQU5ZUkVTSURFTlQsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RPUCk7DQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfVVBUUkFOU0lNSVRQT1dFUjIgLGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RPUCk7DQorCQkJLy8JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX1VQVFJBTlNJTUlUUE9XRVIyICxnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUT1ApOwkgICAJICAgDQorCQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9ERlMsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RPUCk7Ly8gekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzYyNE0pOw0KKwkJfQ0KKwkJZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNCkNCisJCXsNCisNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX0FOWVJFU0lERU5ULGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMixnX2JpdF9wcm9iZVtwcm9iZV9udW1dLFNUUlRFR1lfU1RPUCk7DQorCQkJLy8JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX1VQVFJBTlNJTUlUUE9XRVIyLGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsJICAgDQorCQl9DQorCQllbHNlIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF82KQ0KKwkJew0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSxTVFJURUdZX1NUT1ApOw0KKwkJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfQU5ZUkVTSURFTlQsZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSxTVFJURUdZX1NUT1ApOw0KKwkJfSAgIA0KKwkJZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfOCkNCisJCXsNCisJCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCisJCX0gIA0KKwkJZWxzZQ0KKwkJew0KKw0KKwkJfQ0KKwl9DQorIA0KK30NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEZ1bmN0aW9uOiB0c2NfUHJvYmVBZGMxU3RyYXRlZ3kNCiAgKiBEZXNjcmlwdGlvbjogYWRjMcy91eu1xM7Cv9iy38LUDQogICogUGFyYW1ldGVyczoNCkBAIC0xMzksOTkgKzMyNyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiB2b2lkIHRzY3RybF9wcm9iZV9hZGMxX3N0cmF0ZWd5KHUzMiBwcm9iZV9udW0saW50IHRlbXBlcmF0dXJlICkgDQogewkNCi0jaWYgMQ0KLQlpbnQgIHRlbXAxPSh0ZW1wZXJhdHVyZS1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMyk7DQotCWludCAgdGVtcDI9KFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF82LVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8zKTsNCi0NCi0JaWYodGVtcGVyYXR1cmU8PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8zKXsNCi0JCXRlbXBfcGVyY2VudD0wOwkNCi0JfSBlbHNlIGlmKCh0ZW1wZXJhdHVyZTw9VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzYpKSB7DQotCQl0ZW1wX3BlcmNlbnQ9KCgxMDAqdGVtcDEvdGVtcDIpL1RFTVBfUEVSQ0VOVF9JTlRFUlZBTCkqVEVNUF9QRVJDRU5UX0lOVEVSVkFMOw0KLQl9IGVsc2Ugew0KLQkJdGVtcF9wZXJjZW50PTEwMDsNCi0JfQ0KLQ0KLQkvKiovDQotICAgaWYodGVtcGVyYXR1cmU+PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF85KQ0KLSAgIHsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9TSFVURE9XTiwgQklUX1BST0JFX0FEQzEgLFNUUlRFR1lfU1RBUlQpOw0KLSAgIH0NCi0gICBlbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNykNCi0gICB7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfQU5ZUkVTSURFTlQsIEJJVF9QUk9CRV9BREMxICxTVFJURUdZX1NUQVJUKTsNCi0gICB9DQotICAgZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzUpDQotICAgew0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMiwgQklUX1BST0JFX0FEQzEgLFNUUlRFR1lfU1RBUlQpOw0KLS8vCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19VUFRSQU5TSU1JVFBPV0VSMiwgQklUX1BST0JFX0FEQzEgLFNUUlRFR1lfU1RBUlQpOwkgICANCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBCSVRfUFJPQkVfQURDMSwgU1RSVEVHWV9TVEFSVCk7DQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX0RPV05SQVRFMiwgQklUX1BST0JFX0FEQzEsIFNUUlRFR1lfU1RBUlQpOw0KLS8vCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19ET1dOUkFURTIsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUQVJUKTsNCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9ERlMsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUQVJUKTsvL3pEcnZQb3dfU2V0QXJtUHNDb3JlRnJlcShDTEszMTJNKTsJICAgDQotICAgfQ0KLSAgIGVsc2UgaWYodGVtcGVyYXR1cmU+PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8zKQ0KLSAgIHsgICANCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBCSVRfUFJPQkVfQURDMSwgU1RSVEVHWV9TVEFSVCk7DQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX0RPV05SQVRFMiwgQklUX1BST0JFX0FEQzEsIFNUUlRFR1lfU1RBUlQpOw0KLS8vCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19ET1dOUkFURTIsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUQVJUKTsJICAgDQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfREZTLCBCSVRfUFJPQkVfQURDMSwgU1RSVEVHWV9TVEFSVCk7Ly96RHJ2UG93X1NldEFybVBzQ29yZUZyZXEoQ0xLMzEyTSk7CSAgIA0KLSAgIH0NCi0JZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzEpDQotCXsJDQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfUkFURSwgQklUX1BST0JFX0FEQzEsIFNUUlRFR1lfU1RBUlQpOw0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUQVJUKTsNCi0vLwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfRE9XTlJBVEUyLCBCSVRfUFJPQkVfQURDMSwgU1RSVEVHWV9TVEFSVCk7CSAgCQkNCi0JfSAgIA0KLQllbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMCkNCi0gICB7DQotCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX1JBVEUsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX0hPTEQpOw0KLSAgIH0NCi0gICBlbHNlDQotICAgewkNCi0gICANCi0gICB9DQotCS8qKi8NCi0gICBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMCkNCi0gICB7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sQklUX1BST0JFX0FEQzEsU1RSVEVHWV9TVE9QKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgQklUX1BST0JFX0FEQzEsIFNUUlRFR1lfU1RPUCk7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX1VQVFJBTlNJTUlUUE9XRVIyLCBCSVRfUFJPQkVfQURDMSwgU1RSVEVHWV9TVE9QKTsNCi0vLwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfVVBUUkFOU0lNSVRQT1dFUjIsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUT1ApOwkgICAJICAgCSAgIA0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX1JBVEUsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUT1ApOw0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUT1ApOw0KLS8vCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19ET1dOUkFURTIsIEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUT1ApOwkgICANCi0JICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0RGUywgQklUX1BST0JFX0FEQzEsIFNUUlRFR1lfU1RPUCk7Ly8gekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzYyNE0pOw0KLSAgIH0NCi0gICBlbHNlIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8yKQ0KLSAgIHsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9TSFVURE9XTixCSVRfUFJPQkVfQURDMSxTVFJURUdZX1NUT1ApOw0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX0FOWVJFU0lERU5ULCBCSVRfUFJPQkVfQURDMSwgU1RSVEVHWV9TVE9QKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfVVBUUkFOU0lNSVRQT1dFUjIgLEJJVF9QUk9CRV9BREMxLCBTVFJURUdZX1NUT1ApOw0KLS8vCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19VUFRSQU5TSU1JVFBPV0VSMiAsQklUX1BST0JFX0FEQzEsIFNUUlRFR1lfU1RPUCk7CSAgIAkgICANCi0JICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0RGUywgQklUX1BST0JFX0FEQzEsIFNUUlRFR1lfU1RPUCk7Ly8gekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzYyNE0pOw0KLQl9DQotICAgZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNCkNCi0gICB7DQotICAgDQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sQklUX1BST0JFX0FEQzEsU1RSVEVHWV9TVE9QKTsNCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCxCSVRfUFJPQkVfQURDMSxTVFJURUdZX1NUT1ApOw0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMixCSVRfUFJPQkVfQURDMSxTVFJURUdZX1NUT1ApOw0KLS8vCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19VUFRSQU5TSU1JVFBPV0VSMixCSVRfUFJPQkVfQURDMSxTVFJURUdZX1NUT1ApOwkgICANCi0gICB9DQotICAgZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNikNCi0gICB7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sQklUX1BST0JFX0FEQzEsU1RSVEVHWV9TVE9QKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCxCSVRfUFJPQkVfQURDMSxTVFJURUdZX1NUT1ApOw0KLSAgIH0gICANCi0gICBlbHNlIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF84KQ0KLSAgIHsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9TSFVURE9XTixCSVRfUFJPQkVfQURDMSxTVFJURUdZX1NUT1ApOw0KLSAgIH0gIA0KLSAgIGVsc2UNCi0gICB7DQotDQotICAgfQ0KLSNlbmRpZiAgIA0KKwl0c2N0cmxfcHJvYmVfc3RyYXRlZ3kocHJvYmVfbnVtLCB0ZW1wZXJhdHVyZSk7DQogfQ0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpAQCAtMjQ4LDk5ICszNDQsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogdm9pZCB0c2N0cmxfcHJvYmVfYWRjMl9zdHJhdGVneSh1MzIgcHJvYmVfbnVtLGludCB0ZW1wZXJhdHVyZSApIA0KIHsNCi0jaWYgMQ0KLQlpbnQgIHRlbXAxPSh0ZW1wZXJhdHVyZS1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMyk7DQotCWludCAgdGVtcDI9KFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF82LVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8zKTsNCi0NCi0JaWYodGVtcGVyYXR1cmU8PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8zKXsNCi0JCXRlbXBfcGVyY2VudD0wOwkNCi0JfWVsc2UgaWYoKHRlbXBlcmF0dXJlPD1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNikpew0KLQkJdGVtcF9wZXJjZW50PSgoMTAwKnRlbXAxL3RlbXAyKS9URU1QX1BFUkNFTlRfSU5URVJWQUwpKlRFTVBfUEVSQ0VOVF9JTlRFUlZBTDsNCi0JfWVsc2V7DQotCQl0ZW1wX3BlcmNlbnQ9MTAwOw0KLQl9DQotDQotCS8qKi8NCi0gICBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzkpDQotICAgew0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLCBCSVRfUFJPQkVfQURDMiAsU1RSVEVHWV9TVEFSVCk7DQotICAgfQ0KLSAgIGVsc2UgIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNykNCi0gICB7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfQU5ZUkVTSURFTlQsIEJJVF9QUk9CRV9BREMyICxTVFJURUdZX1NUQVJUKTsNCi0gICB9DQotICAgZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzUpDQotICAgew0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMiwgQklUX1BST0JFX0FEQzIgLFNUUlRFR1lfU1RBUlQpOw0KLS8vCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19VUFRSQU5TSU1JVFBPV0VSMiwgQklUX1BST0JFX0FEQzIgLFNUUlRFR1lfU1RBUlQpOwkgICANCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVEFSVCk7DQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX0RPV05SQVRFMiwgQklUX1BST0JFX0FEQzIsIFNUUlRFR1lfU1RBUlQpOw0KLS8vCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19ET1dOUkFURTIsIEJJVF9QUk9CRV9BREMyLCBTVFJURUdZX1NUQVJUKTsJICAgDQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfREZTLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVEFSVCk7Ly96RHJ2UG93X1NldEFybVBzQ29yZUZyZXEoQ0xLMzEyTSk7CSAgIA0KLSAgIH0NCi0gICBlbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMykNCi0gICB7ICAgDQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfUkFURSwgQklUX1BST0JFX0FEQzIsIFNUUlRFR1lfU1RBUlQpOw0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIEJJVF9QUk9CRV9BREMyLCBTVFJURUdZX1NUQVJUKTsNCi0vLwl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfRE9XTlJBVEUyLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVEFSVCk7CSAgIA0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0RGUywgQklUX1BST0JFX0FEQzIsIFNUUlRFR1lfU1RBUlQpOy8vekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzMxMk0pOwkgICANCi0gICB9DQotCWVsc2UgaWYodGVtcGVyYXR1cmU+PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8xKQ0KLQl7CQ0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX1JBVEUsIEJJVF9QUk9CRV9BREMyLCBTVFJURUdZX1NUQVJUKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfRE9XTlJBVEUyLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVEFSVCk7DQotLy8JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX0RPV05SQVRFMiwgQklUX1BST0JFX0FEQzIsIFNUUlRFR1lfU1RBUlQpOwkgIAkJDQotCX0gICANCi0JZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzApDQotICAgew0KLQkJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9IT0xEKTsNCi0gICB9DQotICAgZWxzZQ0KLSAgIHsJDQotICAgDQotICAgfQ0KLQkNCi0JLyoqLw0KLSAgIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8wKQ0KLSAgIHsNCi0JICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLEJJVF9QUk9CRV9BREMyLFNUUlRFR1lfU1RPUCk7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfQU5ZUkVTSURFTlQsIEJJVF9QUk9CRV9BREMyLCBTVFJURUdZX1NUT1ApOw0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMiwgQklUX1BST0JFX0FEQzIsIFNUUlRFR1lfU1RPUCk7DQotLy8JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX1VQVFJBTlNJTUlUUE9XRVIyLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVE9QKTsJICAgCSAgIAkgICANCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVE9QKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfRE9XTlJBVEUyLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVE9QKTsNCi0vLwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfRE9XTlJBVEUyLCBCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVE9QKTsJICAgDQotCSAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9ERlMsIEJJVF9QUk9CRV9BREMyLCBTVFJURUdZX1NUT1ApOy8vIHpEcnZQb3dfU2V0QXJtUHNDb3JlRnJlcShDTEs2MjRNKTsNCi0gICB9DQotICAgZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMikNCi0gICB7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sQklUX1BST0JFX0FEQzIsU1RSVEVHWV9TVE9QKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgQklUX1BST0JFX0FEQzIsIFNUUlRFR1lfU1RPUCk7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX1VQVFJBTlNJTUlUUE9XRVIyICxCSVRfUFJPQkVfQURDMiwgU1RSVEVHWV9TVE9QKTsNCi0vLwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfVVBUUkFOU0lNSVRQT1dFUjIgLEJJVF9QUk9CRV9BREMyLCBTVFJURUdZX1NUT1ApOwkgICAJICAgDQotCSAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9ERlMsIEJJVF9QUk9CRV9BREMyLCBTVFJURUdZX1NUT1ApOy8vIHpEcnZQb3dfU2V0QXJtUHNDb3JlRnJlcShDTEs2MjRNKTsNCi0gICB9DQotICAgZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNCkNCi0gICB7DQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sQklUX1BST0JFX0FEQzIsU1RSVEVHWV9TVE9QKTsNCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCxCSVRfUFJPQkVfQURDMixTVFJURUdZX1NUT1ApOw0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMixCSVRfUFJPQkVfQURDMixTVFJURUdZX1NUT1ApOw0KLS8vCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19VUFRSQU5TSU1JVFBPV0VSMixCSVRfUFJPQkVfQURDMixTVFJURUdZX1NUT1ApOwkgICANCi0gICB9DQotICAgZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfNikNCi0gICB7DQotICAgCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sQklUX1BST0JFX0FEQzIsU1RSVEVHWV9TVE9QKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCxCSVRfUFJPQkVfQURDMixTVFJURUdZX1NUT1ApOw0KLSAgIH0gICANCi0gICBlbHNlIGlmKHRlbXBlcmF0dXJlPFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF84KQ0KLSAgIHsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9TSFVURE9XTixCSVRfUFJPQkVfQURDMixTVFJURUdZX1NUT1ApOw0KLSAgIH0gDQotICAgZWxzZQ0KLSAgIHsNCi0NCi0gICB9DQotI2VuZGlmICAgDQorCXRzY3RybF9wcm9iZV9zdHJhdGVneShwcm9iZV9udW0sIHRlbXBlcmF0dXJlKTsNCiB9DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkBAIC0zNTcsNiArMzYxLDI0IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiB2b2lkIHRzY3RybF9wcm9iZV9hZGNSZl9zdHJhdGVneSh1MzIgcHJvYmVfbnVtLGludCB0ZW1wZXJhdHVyZSApIA0KIHsNCisJdHNjdHJsX3Byb2JlX3N0cmF0ZWd5KHByb2JlX251bSwgdGVtcGVyYXR1cmUpOw0KK30NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIEZ1bmN0aW9uOiB0c2NfUHJvYmVBZGNSZlN0cmF0ZWd5DQorICogRGVzY3JpcHRpb246IGFkY1JmZMy91eu1xM7Cv9iy38LUDQorICogUGFyYW1ldGVyczoNCisgKiAgIElucHV0OiANCisgKgkJCQ0KKw0KKyAqICAgT3V0cHV0OiBOL0ENCisgKiBSZXR1cm5zOiBOL0ENCisNCisgKiBPdGhlcnM6CS8vbm90IHVzZQ0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgdHNjdHJsX3Byb2JlX2FkY1JmZF9zdHJhdGVneSh1MzIgcHJvYmVfbnVtLGludCB0ZW1wZXJhdHVyZSApIA0KK3sNCiAjaWYgMQ0KIAlpbnQgIHRlbXAxPSh0ZW1wZXJhdHVyZS1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMyk7DQogCWludCAgdGVtcDI9KFRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF82LVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF8zKTsNCkBAIC0zNzIsMzcgKzM5NCwyOSBAQAogCS8qKi8NCiAgICBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzkpDQogICAgew0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLCBCSVRfUFJPQkVfQURDUkYgLFNUUlRFR1lfU1RBUlQpOw0KKwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dICxTVFJURUdZX1NUQVJUKTsNCiAgICB9CQ0KICAgIGVsc2UgaWYodGVtcGVyYXR1cmU+PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF83KQ0KICAgIHsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgQklUX1BST0JFX0FEQ1JGICxTVFJURUdZX1NUQVJUKTsNCisJICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSAsU1RSVEVHWV9TVEFSVCk7DQogICAgfQ0KICAgIGVsc2UgaWYodGVtcGVyYXR1cmU+PVRzTnZEYXRhLlRocmVzaG9kc1twcm9iZV9udW1dLlRIUk9TSE9MRF81KQ0KICAgIHsNCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfVVBUUkFOU0lNSVRQT1dFUjIsIEJJVF9QUk9CRV9BRENSRiAsU1RSVEVHWV9TVEFSVCk7DQotLy8JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX1VQVFJBTlNJTUlUUE9XRVIyLCBCSVRfUFJPQkVfQURDUkYgLFNUUlRFR1lfU1RBUlQpOwkgICANCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RBUlQpOw0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9TVEFSVCk7DQotLy8JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX0RPV05SQVRFMiwgQklUX1BST0JFX0FEQ1JGLCBTVFJURUdZX1NUQVJUKTsJICAgDQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfREZTLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RBUlQpOy8vekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzMxMk0pOwkgICANCisJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUQVJUKTsNCisJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9ERlMsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOy8vekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzMxMk0pOwkgICANCiAgICB9DQogICAgZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzMpDQogICAgeyAgIA0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX1JBVEUsIEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9TVEFSVCk7DQotCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX0RPV05SQVRFMiwgQklUX1BST0JFX0FEQ1JGLCBTVFJURUdZX1NUQVJUKTsNCi0vLwl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfRE9XTlJBVEUyLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RBUlQpOwkgICANCi0JdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9ERlMsIEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9TVEFSVCk7Ly96RHJ2UG93X1NldEFybVBzQ29yZUZyZXEoQ0xLMzEyTSk7CSAgIA0KKwl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX1JBVEUsIGdfYml0X3Byb2JlW3Byb2JlX251bV0sIFNUUlRFR1lfU1RBUlQpOw0KKwl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0RGUywgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVEFSVCk7Ly96RHJ2UG93X1NldEFybVBzQ29yZUZyZXEoQ0xLMzEyTSk7CSAgIA0KICAgIH0NCiAJZWxzZSBpZih0ZW1wZXJhdHVyZT49VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzEpDQogCXsJDQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfUkFURSwgQklUX1BST0JFX0FEQ1JGLCBTVFJURUdZX1NUQVJUKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfRE9XTlJBVEUyLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RBUlQpOw0KLS8vCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfV19ET1dOUkFURTIsIEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9TVEFSVCk7CSAgCQkNCisJICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUQVJUKTsNCiAJfSAgIA0KIAllbHNlIGlmKHRlbXBlcmF0dXJlPj1Uc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMCkNCiAgICB7DQotCQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX1JBVEUsIEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9IT0xEKTsNCisJCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfUkFURSwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9IT0xEKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsJDQpAQCAtNDEyLDM4ICs0MjYsMzAgQEAKIAkvKiovDQogICAgaWYodGVtcGVyYXR1cmU8VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzApDQogICAgew0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLEJJVF9QUk9CRV9BRENSRixTVFJURUdZX1NUT1ApOw0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX0FOWVJFU0lERU5ULCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RPUCk7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfTElNSVRfTFRFX1VQVFJBTlNJTUlUUE9XRVIyLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RPUCk7DQotLy8JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9XX1VQVFJBTlNJTUlUUE9XRVIyLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RPUCk7CSAgIAkgICAJICAgDQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfUkFURSwgQklUX1BST0JFX0FEQ1JGLCBTVFJURUdZX1NUT1ApOw0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9ET1dOUkFURTIsIEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9TVE9QKTsNCi0vLwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfRE9XTlJBVEUyLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RPUCk7CSAgIA0KLQkgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfREZTLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RPUCk7Ly8gekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzYyNE0pOw0KKwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCisJICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsNCisJICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19SQVRFLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUT1ApOw0KKwkgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfREZTLCBnX2JpdF9wcm9iZVtwcm9iZV9udW1dLCBTVFJURUdZX1NUT1ApOy8vIHpEcnZQb3dfU2V0QXJtUHNDb3JlRnJlcShDTEs2MjRNKTsNCiAgICB9DQogICAgZWxzZSBpZih0ZW1wZXJhdHVyZTxUc052RGF0YS5UaHJlc2hvZHNbcHJvYmVfbnVtXS5USFJPU0hPTERfMikNCiAgICB7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sQklUX1BST0JFX0FEQ1JGLFNUUlRFR1lfU1RPUCk7DQotCSAgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfUFNfQU5ZUkVTSURFTlQsIEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9TVE9QKTsNCi0JICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9MSU1JVF9MVEVfVVBUUkFOU0lNSVRQT1dFUjIgLEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9TVE9QKTsNCi0vLwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfVVBUUkFOU0lNSVRQT1dFUjIgLEJJVF9QUk9CRV9BRENSRiwgU1RSVEVHWV9TVE9QKTsJICAgCSAgIA0KLQkgIHRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfREZTLCBCSVRfUFJPQkVfQURDUkYsIFNUUlRFR1lfU1RPUCk7Ly8gekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzYyNE0pOw0KKwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCisJICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCwgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsNCisJICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0RGUywgZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSwgU1RSVEVHWV9TVE9QKTsvLyB6RHJ2UG93X1NldEFybVBzQ29yZUZyZXEoQ0xLNjI0TSk7DQogICAgfQ0KICAgIGVsc2UgaWYodGVtcGVyYXR1cmU8VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzQpDQogICAgew0KLSAgCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sQklUX1BST0JFX0FEQ1JGLFNUUlRFR1lfU1RPUCk7IA0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX0FOWVJFU0lERU5ULEJJVF9QUk9CRV9BRENSRixTVFJURUdZX1NUT1ApOw0KLQl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX0xURV9VUFRSQU5TSU1JVFBPV0VSMixCSVRfUFJPQkVfQURDUkYsU1RSVEVHWV9TVE9QKTsNCi0vLwl0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX0xJTUlUX1dfVVBUUkFOU0lNSVRQT1dFUjIsQklUX1BST0JFX0FEQ1JGLFNUUlRFR1lfU1RPUCk7CSAgIA0KKyAgCXRzY3RybF9zZXRfc3RyYXRlZ3kySXJhbShUU0NUUkxfU0hVVERPV04sZ19iaXRfcHJvYmVbcHJvYmVfbnVtXSxTVFJURUdZX1NUT1ApOyANCisJdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCxnX2JpdF9wcm9iZVtwcm9iZV9udW1dLFNUUlRFR1lfU1RPUCk7DQogICAgfQ0KICAgIGVsc2UgaWYodGVtcGVyYXR1cmU8VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzYpDQogICAgew0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLEJJVF9QUk9CRV9BRENSRixTVFJURUdZX1NUT1ApOw0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1BTX0FOWVJFU0lERU5ULEJJVF9QUk9CRV9BRENSRixTVFJURUdZX1NUT1ApOw0KKwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCisJICAgdHNjdHJsX3NldF9zdHJhdGVneTJJcmFtKFRTQ1RSTF9QU19BTllSRVNJREVOVCxnX2JpdF9wcm9iZVtwcm9iZV9udW1dLFNUUlRFR1lfU1RPUCk7DQogICAgfSAgIA0KICAgIGVsc2UgaWYodGVtcGVyYXR1cmU8VHNOdkRhdGEuVGhyZXNob2RzW3Byb2JlX251bV0uVEhST1NIT0xEXzgpDQogICAgew0KLQkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLEJJVF9QUk9CRV9BRENSRixTVFJURUdZX1NUT1ApOw0KKwkgICB0c2N0cmxfc2V0X3N0cmF0ZWd5MklyYW0oVFNDVFJMX1NIVVRET1dOLGdfYml0X3Byb2JlW3Byb2JlX251bV0sU1RSVEVHWV9TVE9QKTsNCiAgICB9IA0KICAgIGVsc2UNCiAgICB7DQpAQCAtNDUyLDYgKzQ1OCw3IEBACiAjZW5kaWYgICANCiB9DQogDQorDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiBGdW5jdGlvbjogdHNjX1JlZlNldFByb2JlU3RyDQogICogRGVzY3JpcHRpb246ILj5vt3MvdXrusW199PDz+DTprXEst/C1Lqvyv0NCkBAIC00ODcsNyArNDk0LDcgQEAKIAlnX3Byb2JlX3N0cmF0ZWd5W1BST0JFX0FEQzFdPSB0c2N0cmxfcHJvYmVfYWRjMV9zdHJhdGVneTsNCiAJZ19wcm9iZV9zdHJhdGVneVtQUk9CRV9BREMyXT0gdHNjdHJsX3Byb2JlX2FkYzJfc3RyYXRlZ3k7DQogCWdfcHJvYmVfc3RyYXRlZ3lbUFJPQkVfQURDUkZdPSB0c2N0cmxfcHJvYmVfYWRjUmZfc3RyYXRlZ3k7DQotCQ0KKwlnX3Byb2JlX3N0cmF0ZWd5W1BST0JFX0FEQ1JGZF09IHRzY3RybF9wcm9iZV9hZGNSZmRfc3RyYXRlZ3k7DQogfQ0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpAQCAtNTQwLDE4ICs1NDcsMjMgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIHN0YXRpYyB2b2lkIHRzY3RybF9wcmludF90ZW1wKHZvaWQpDQogew0KLQkJaWYoZ19hZGMxX2ZsYWc9PTEpew0KLQkJCXNjX2RlYnVnX2luZm9fcmVjb3JkKE1PRFVMRV9JRF9BUF9UU0MsICJ0ZW1wMTolZFxuIiwgenhfcmVhZF9yZWcoVFNDVFJMX1RFTVBBREMxKSApOw0KLQkJCXByaW50ayggInRlbXAxOiVkXG4iLCB6eF9yZWFkX3JlZyhUU0NUUkxfVEVNUEFEQzEpKTsNCi0JCX0NCi0JCWlmKGdfYWRjMl9mbGFnPT0xKXsNCi0JCQlzY19kZWJ1Z19pbmZvX3JlY29yZChNT0RVTEVfSURfQVBfVFNDLCAidGVtcDI6JWRcbiIsIHp4X3JlYWRfcmVnKFRTQ1RSTF9URU1QQURDMikgKTsNCi0JCQlwcmludGsoICJ0ZW1wMjolZFxuIiwgenhfcmVhZF9yZWcoVFNDVFJMX1RFTVBBREMyKSk7DQotCQl9DQotCQlpZihnX2FkYzNfZmxhZz09MSl7DQotCQkJc2NfZGVidWdfaW5mb19yZWNvcmQoTU9EVUxFX0lEX0FQX1RTQywgInRlbXBSZjolZFxuIiwgenhfcmVhZF9yZWcoVFNDVFJMX1RFTVBBRENSRikgKTsNCi0JCQlwcmludGsoICJ0ZW1wUmY6JWRcbiIsIHp4X3JlYWRfcmVnKFRTQ1RSTF9URU1QQURDUkYpKTsNCi0JCX0NCisJaWYoZ19hZGMxX2ZsYWc9PTEpew0KKwkJc2NfZGVidWdfaW5mb19yZWNvcmQoTU9EVUxFX0lEX0FQX1RTQywgInRlbXAxOiVkXG4iLCB6eF9yZWFkX3JlZyhUU0NUUkxfVEVNUEFEQzEpICk7DQorCQlwcmludGsoICJ0ZW1wMTolZFxuIiwgenhfcmVhZF9yZWcoVFNDVFJMX1RFTVBBREMxKSk7DQorCX0NCisJaWYoZ19hZGMyX2ZsYWc9PTEpew0KKwkJc2NfZGVidWdfaW5mb19yZWNvcmQoTU9EVUxFX0lEX0FQX1RTQywgInRlbXAyOiVkXG4iLCB6eF9yZWFkX3JlZyhUU0NUUkxfVEVNUEFEQzIpICk7DQorCQlwcmludGsoICJ0ZW1wMjolZFxuIiwgenhfcmVhZF9yZWcoVFNDVFJMX1RFTVBBREMyKSk7DQorCX0NCisJaWYoZ19hZGMzX2ZsYWc9PTEpew0KKwkJc2NfZGVidWdfaW5mb19yZWNvcmQoTU9EVUxFX0lEX0FQX1RTQywgInRlbXBSZjolZFxuIiwgenhfcmVhZF9yZWcoVFNDVFJMX1RFTVBBRENSRikgKTsNCisJCXByaW50ayggInRlbXBSZjolZFxuIiwgenhfcmVhZF9yZWcoVFNDVFJMX1RFTVBBRENSRikpOw0KKwl9DQorCWlmKFRzTnZEYXRhLkFkY1JGZF9Fbj09MHhCMil7CQkNCisJCXNjX2RlYnVnX2luZm9fcmVjb3JkKE1PRFVMRV9JRF9BUF9UU0MsICJ0ZW1wUmZkOiVkXG4iLCB6eF9yZWFkX3JlZyhUU0NUUkxfVEVNUEFEQ1JGZCkgKTsNCisJCXByaW50ayggInRlbXBSZmQ6JWRcbiIsIHp4X3JlYWRfcmVnKFRTQ1RSTF9URU1QQURDUkZkKSk7DQorCX0JCQ0KKwkNCiB9DQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiBGdW5jdGlvbjogdHNjdHJsX3NldF9zdHJhdGVneQ0KQEAgLTc1Miw4ICs3NjQsOCBAQAogCQl9CQ0KIA0KIAkJaWYoZ190c2NfcHJpbnRfbG9nX2RlYnVnKSB7DQotCQkJdHNjX3ByaW50X2xvZygiMDpzdG9wOzE6c3RhcnQ7Mjpob2xkOyByZWczMihUU0NUUkxfUFMpPTB4JXgscmVnMzIoUFNfQ09SRV9TRUxfUkVHKT0weCV4XG4iLHRzY19yZWFkX3JlZyhUU0NUUkxfUFMpLHRzY19yZWFkX3JlZyhQU19DT1JFX1NFTF9SRUcpKTsJCQ0KLQkJCXRzY19wcmludF9sb2coImJpdDE6bGltaXRMdGVkb3ducmF0ZTI7Yml0MzpsaW1pdFdkb3ducmF0ZTI7Yml0NTpsaW1pdEx0ZVVwdHJhbnNtaXRyYXRlMjtiaXQ3OmxpbWl0V1VwdHJhbnNtaXRyYXRlMjtyZWczMihUU0NUUkxfUEhZKT0weCV4LlxuXG4iLHRzY19yZWFkX3JlZyhUU0NUUkxfUEhZKSk7IA0KKwkJCXRzY19wcmludF9sb2coIlswOnN0b3A7MTpzdGFydDsyOmhvbGRdW2JpdDExfjg6cHNfZGZzLGJpdDd+NDphbnlyZWdpc3RlcixiaXQzfjA6cHNfcmF0ZV0gcmVnMzIoVFNDVFJMX1BTKT0weCV4LHJlZzMyKFBTQ09SRV9TRUwpPTB4JXgoMTo2MjRNOzI6MzEyTSlcbiIsdHNjX3JlYWRfcmVnKFRTQ1RSTF9QUyksdHNjX3JlYWRfcmVnKFBTX0NPUkVfU0VMX1JFRykpOwkJDQorCQkJdHNjX3ByaW50X2xvZygiXWJpdDE6bGltaXRMdGVkb3ducmF0ZTI7Yml0MzpsaW1pdFdkb3ducmF0ZTI7Yml0NTpsaW1pdEx0ZVVwdHJhbnNtaXRyYXRlMjtiaXQ3OmxpbWl0V1VwdHJhbnNtaXRyYXRlMl0gcmVnMzIoVFNDVFJMX1BIWSk9MHgleC5cblxuIix0c2NfcmVhZF9yZWcoVFNDVFJMX1BIWSkpOyANCiAJCX0NCiAJfQ0KIAllbHNlDQpAQCAtODg2LDYgKzg5OCwxNiBAQAogCQkJCQ0KIAkJCQl0c2N0cmxfc2V0X3Byb2JlX3N0cmF0ZWd5KHByb2JlX251bSwgdGVtcGVyYXR1cmUgKTsNCiAJCQl9DQorCQkJaWYoVHNOdkRhdGEuQWRjUkZkX0VuPT0weEIyKXsJCQ0KKwkJCQkvKrvxyKFQUk9CRV9BRENSRtDFz6IqLw0KKwkJCQlwcm9iZV9udW09IFRzRGF0YVZhbHVlW1BST0JFX0FEQ1JGZF1bVFNfTUVNQkVSX1BST0JFXTsNCisJCQkJdGVtcGVyYXR1cmU9IFRzRGF0YVZhbHVlW1BST0JFX0FEQ1JGZF1bVFNfTUVNQkVSX1RFTVBdOw0KKwkJCQkvL3RzY19zZXRfdGVtcF9kYXRhX2luZm8ocHJvYmVfbnVtKTsNCisJCQkJaWYoZ190c2NfcHJpbnRfbG9nX2RlYnVnKQ0KKwkJCQkJdHNjX3ByaW50X2xvZygic2V0IHN0cmF0ZWd5IGZvciBwcm9iZSVkXG4iLCBwcm9iZV9udW0pOwkNCisJCQkJDQorCQkJCXRzY3RybF9zZXRfcHJvYmVfc3RyYXRlZ3kocHJvYmVfbnVtLCB0ZW1wZXJhdHVyZSApOw0KKwkJCX0NCiAJCQkNCiAJCX1lbHNlew0KIAkJCWlmKGdfdHNjX3ByaW50X2xvZ19kZWJ1ZykNCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3RzYy96eC10c2MuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGU2OTU1ODcuLjMzZGVlYmMKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3RzYy96eC10c2MuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy5jCkBAIC0yNiwxMSArMjYsMTQgQEAKICNpbmNsdWRlICJOdlBhcmFtX2Rydi5oIg0KICNpbmNsdWRlICJwdWJfZGVidWdfaW5mby5oIg0KIA0KLSNpZmRlZiBSRkNfRENYT19FTg0KKyNpZmRlZiBSRkNfRENYT19FTiAvL2ppbmd0aQ0KICNkZWZpbmUgSVJBTV9URU1QQ09NUF9EQUMgKElSQU1fQkFTRV9BRERSX1NMQVZFX0FGQysweDgpICAvL2hpZ2gxNmJpdDogdGhlIEFEQyB2YWx1ZSBvZiB0ZW1wCQ0KICNlbHNlDQotI2RlZmluZSBJUkFNX1RFTVBDT01QX0RBQyAoSVJBTV9CQVNFX0FERFJfUFVCX1JGKzY0KS8vdGhlIEFEQyB2YWx1ZSBvZiB0ZW1wDQorI2RlZmluZSBJUkFNX1RFTVBDT01QX0RBQyAoSVJBTV9CQVNFX0FERFJfUFVCX1JGKzB4NDApLy90aGUgQURDIHZhbHVlIG9mIHRlbXANCiAjZW5kaWYNCisjZGVmaW5lIElSQU1fVEVNUENPTVBfUkZEREFDIChJUkFNX0JBU0VfQUREUl9TTEFWRV9BRkMrMHg4KSAgLy9oaWdoMTZiaXQ6IHRoZSBBREMgdmFsdWUgb2YgdGVtcAkNCisjZGVmaW5lIElSQU1fVEVNUENPTVBfUkZEVEVNUCAoSVJBTV9CQVNFX0FERFJfU0xBVkVfQUZDKzB4YykgIC8vdGVtcCBvZiBhZGNyZmQNCisNCiANCiB2b2xhdGlsZSB1MzIgZ19hZGMxX2ZsYWcgPSAwOy8vqKg/YWRjMaiuP6iuqLKorD8yYXBhMqikPz8/qKih6j8/qLBnX2FkYzFfZmxhZz0xDQogdm9sYXRpbGUgdTMyIGdfYWRjMl9mbGFnID0gMDsvL6ioP2FkYzKorj+orqiyqKw/MmFwYTKopD8/P6iooeo/P6iwZ19hZGMyX2ZsYWc9MQ0KQEAgLTM4LDkgKzQxLDEyIEBACiANCiBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcl90c2M7DQogDQotczMyIGdfdHNjX3ByaW50X2xvZ19kZWJ1Zz0wOw0KIHUzMiBnX3Rlc3RfYWRkcjA9MDsNCiB1MzIgZ190ZXN0X2FkZHIxPTA7DQordTMyIGdfdGVzdF9hZGRyMj1JUkFNX1RFTVBDT01QX0RBQzsNCit1MzIgZ190ZXN0X2FkZHIzPUlSQU1fVEVNUENPTVBfUkZEVEVNUDsNCisNCitzMzIgZ190c2NfcHJpbnRfbG9nX2RlYnVnPTA7DQogDQogLyoNCiAxY250IGlzIDIwcw0KQEAgLTUyLDkgKzU4LDYgQEAKIHVuc2lnbmVkIGludCB0c2NfcmVjb3JkX2ZsYWc9IDA7IA0KIG1vZHVsZV9wYXJhbSh0c2NfcmVjb3JkX2ZsYWcsIHVpbnQsIDA2NDQpOw0KIA0KLWV4dGVybiBpbnQgdHNfdGVtcF92YWx1ZV90YWJsZVtUU19BRENfVEVNUF9OVU1CRVJdW1RTX0FEQ19URU1QX1ZPTFRBR0VfTlVNQkVSXTsNCi1leHRlcm4gdm9sYXRpbGUgdTMyIHRzX2FkY19mbGFnOw0KLQ0KIGludCBnX3RzX2RhdGFfaW5mb1tQUk9CRV9OVU1dW1BST0JFX0lORk9dID0gezB9Ow0KIA0KIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggdHNjX211dGV4SWQ7DQpAQCAtNjUsNiArNjgsNTEgQEAKIA0KIHN0cnVjdCBrb2JqZWN0ICp6eF90c2Nfa29iajsNCiANCitleHRlcm4gaW50IHRzX3RlbXBfdmFsdWVfdGFibGVbVFNfQURDX1RFTVBfTlVNQkVSXVtUU19BRENfVEVNUF9WT0xUQUdFX05VTUJFUl07DQorZXh0ZXJuIHZvbGF0aWxlIHUzMiB0c19hZGNfZmxhZzsNCisNCitpbnQgIHRzX3RlbXBfdmFsdWVfdGFibGVSZmRbVFNfQURDX1RFTVBfTlVNQkVSXVtUU19BRENfVEVNUF9WT0xUQUdFX05VTUJFUl09ew0KK3sNCisgLTQ1LC00NCwtNDMsLTQyLC00MSwJCQ0KKyAtNDAsLTM5LC0zOCwtMzcsLTM2LCAtMzUsLTM0LC0zMywtMzIsLTMxLAkJDQorIC0zMCwtMjksLTI4LC0yNywtMjYsIC0yNSwtMjQsLTIzLC0yMiwtMjEsCQkNCisgLTIwLC0xOSwtMTgsLTE3LC0xNiwgLTE1LC0xNCwtMTMsLTEyLC0xMSwJCQ0KKyAtMTAsLTksLTgsLTcsLTYsIC01LC00LC0zLC0yLC0xLAkNCisgMCwxLDIsMyw0LDUsNiw3LDgsOSwNCisgMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksDQorIDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LAkNCisgMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksDQorIDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LA0KKyA1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSwNCisgNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksDQorIDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LA0KKyA4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSwNCisgOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksDQorIDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwNCisgMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LA0KKyAxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNX0sDQorDQorew0KKzc1OTgsNzU5Miw3NTg2LDc1NzksNzU3MiwNCis3NTY0LDc1NTYsNzU0Nyw3NTM3LDc1MjcsNzUxNiw3NTA1LDc0OTMsNzQ4MCw3NDY2LA0KKzc0NTEsNzQzNiw3NDIwLDc0MDIsNzM4NCw3MzY1LDczNDQsNzMyMyw3MzAwLDcyNzcsDQorNzI1Miw3MjI1LDcxOTgsNzE2OSw3MTM5LDcxMDcsNzA3NCw3MDQwLDcwMDQsNjk2NywNCis2OTI4LDY4ODgsNjg0Niw2ODAzLDY3NTgsNjcxMiw2NjY0LDY2MTUsNjU2NCw2NTEyLA0KKzY0NTgsNjQwMyw2MzQ3LDYyOTAsNjIzMSw2MTcxLDYxMTAsNjA0OCw1OTg0LDU5MjAsDQorNTg1NSw1NzkwLDU3MjMsNTY1Niw1NTg4LDU1MjAsNTQ1Miw1MzgzLDUzMTQsNTI0NSwNCis1MTc2LDUxMDcsNTAzOCw0OTY5LDQ5MDEsNDgzMyw0NzY1LDQ2OTgsNDYzMiw0NTY2LA0KKzQ1MDEsNDQzOCw0Mzc2LDQzMTMsNDI1MSw0MTg4LDQxMzEsNDA3Myw0MDE2LDM5NTgsDQorMzkwMSwzODQ5LDM3OTcsMzc0NSwzNjkzLDM2NDEsMzU5NSwzNTQ5LDM1MDIsMzQ1NiwNCiszNDEwLDMzNzAsMzMzMCwzMjg5LDMyNDksMzIwOSwzMTc0LDMxMzksMzEwNCwzMDY5LA0KKzMwMzQsMzAwNCwyOTc0LDI5NDMsMjkxMywyODgzLDI4NTcsMjgzMiwyODA2LDI3ODEsDQorMjc1NSwyNzMzLDI3MTEsMjY5MCwyNjY4LDI2NDYsMjYyNywyNjA5LDI1OTAsMjU3MiwNCisyNTUzLDI1MzcsMjUyMSwyNTA2LDI0OTAsMjQ3NCwyNDYxLDI0NDcsMjQzNCwyNDIwLA0KKzI0MDcsMjM5NiwyMzg1LDIzNzMsMjM2MiwyMzUxLDIzNDEsMjMzMiwyMzIyLDIzMTMsDQorMjMwMywyMjk1LDIyODcsMjI3OCwyMjcwLDIyNjIsMjI1NSwyMjQ4LDIyNDEsMjIzNCwNCisyMjI3LDIyMjEsMjIxNSwyMjEwLDIyMDQsMjE5OCwyMTkzLDIxODgsMjE4MywyMTc4LA0KKzIxNzMsMjE2OSwyMTY0LDIxNjAsMjE1NSwyMTUxIH0NCit9Ow0KKw0KICNkZWZpbmUgenRlX3RzY19hdHRyKF9uYW1lKSBcDQogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBfbmFtZSMjX2F0dHIgPSAJXA0KIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQpAQCAtMTAwLDcgKzE0OCw3IEBACiAjaWZuZGVmIFVTRV9DUFBTX0tPDQogZXh0ZXJuIFVJTlQzMiB6T3NzX052SXRlbVJlYWQoVUlOVDMyIE52SXRlbUlELCBVSU5UOCAqIE52SXRlbURhdGEsIFVJTlQzMiBOdkl0ZW1MZW4pOw0KICNlbmRpZg0KLXN0YXRpYyBpbnQgdHNjX2FkY1JmX3JlYWQodm9pZCk7DQorLy9zdGF0aWMgaW50IHRzY19hZGNSZl9yZWFkKHZvaWQpOw0KIA0KIHZvaWQgdHNjX2dldF90ZW1wUGVyY2VudCh1bnNpZ25lZCBpbnQgKnBlcmNlbnQpDQogew0KQEAgLTE3OCw3ICsyMjYsNyBAQAogCSBmb3IoaT0wO2k8UFJPQkVfTUFYOyBpKyspDQogCQkgdHNjX3RlbXBWYWx1ZVtpXT0genhfcmVhZF9yZWcoVFNDVFJMX1RFTVBBREMxICsgMHg0ICogaSk7DQogIA0KLQl0c2NfdGVtcFZhbHVlW1BST0JFX0FEQ1JGXT0gdHNjX2FkY1JmX3JlYWQoKTsNCisJLy90c2NfdGVtcFZhbHVlW1BST0JFX0FEQ1JGXT0gdHNjX2FkY1JmX3JlYWQoKTsgIC8vdGVzdA0KIAlyZXR1cm4gdHNjX3RlbXBWYWx1ZTsNCiAgfQ0KIA0KQEAgLTMxNiwxNiArMzY0LDIxIEBACiANCiAgKiBPdGhlcnM6CS8vbm90IHVzZQ0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXN0YXRpYyB2b2lkIHRzY19nZXRfcHJvYmVfYWRjdmFsdWUodTMyIGFkY1ZhbHVlLCBpbnQgKnRlbXApIA0KK3N0YXRpYyB2b2lkIHRzY19nZXRfcHJvYmVfYWRjdmFsdWUodTMyIGFkY1ZhbHVlLCBpbnQgKnRlbXAsIGludCBpc19hZGNSZmQpIA0KIHsNCiAJdTMyIGluZGV4ID0gMDsNCi0NCi0JaW5kZXg9IHRzY19uZWFyZXN0KHRzX3RlbXBfdmFsdWVfdGFibGVbVFNfVEVNUF9WT0xUQUdFX1RBQkxFX05VTUJFUl0sYWRjVmFsdWUsVFNfVEVNUF9OVU1CRVJfU01BTExFU1QsVFNfVEVNUF9OVU1CRVJfQklHR0VTVC0xKTsNCi0JKnRlbXA9IHRzX3RlbXBfdmFsdWVfdGFibGVbVFNfVEVNUF9WQUxVRV9UQUJMRV9OVU1CRVJdW2luZGV4XTsNCisJaWYoaXNfYWRjUmZkKXsJDQorCQlpbmRleD0gdHNjX25lYXJlc3QodHNfdGVtcF92YWx1ZV90YWJsZVJmZFtUU19URU1QX1ZPTFRBR0VfVEFCTEVfTlVNQkVSXSxhZGNWYWx1ZSxUU19URU1QX05VTUJFUl9TTUFMTEVTVCxUU19URU1QX05VTUJFUl9CSUdHRVNULTEpOw0KKwkJKnRlbXA9IHRzX3RlbXBfdmFsdWVfdGFibGVSZmRbVFNfVEVNUF9WQUxVRV9UQUJMRV9OVU1CRVJdW2luZGV4XTsNCisJfQ0KKwllbHNlDQorCXsNCisJCWluZGV4PSB0c2NfbmVhcmVzdCh0c190ZW1wX3ZhbHVlX3RhYmxlW1RTX1RFTVBfVk9MVEFHRV9UQUJMRV9OVU1CRVJdLGFkY1ZhbHVlLFRTX1RFTVBfTlVNQkVSX1NNQUxMRVNULFRTX1RFTVBfTlVNQkVSX0JJR0dFU1QtMSk7DQorCQkqdGVtcD0gdHNfdGVtcF92YWx1ZV90YWJsZVtUU19URU1QX1ZBTFVFX1RBQkxFX05VTUJFUl1baW5kZXhdOw0KKwl9DQorCQkNCiB9DQogDQotI2RlZmluZSBBRENSRl9TRUFSQ0hfVEVNUAkJMQ0KLQ0KIHN0YXRpYyB1MzIgdHNjX2RhY19yZWFkKHUzMiBhZGRyKQ0KIHsNCiAJdTMyCWRhYzsNCkBAIC0zMzgsNyArMzkxLDcgQEAKIA0KIAlyZXR1cm4gZGFjOw0KIH0NCi0NCisjaWYgMA0KIHN0YXRpYyBpbnQgdHNjX2FkY1JmX3JlYWQodm9pZCkNCiB7DQogCXUzMglhZGNSZlZhbHVlOw0KQEAgLTM0OSwzNSArNDAyLDM3IEBACiANCiAJcmV0dXJuIHRlbXBSZjsNCiB9DQotDQorI2VuZGlmDQogc3RhdGljIHZvaWQgdHNjX3RlbXBfZGV0ZWN0KHZvaWQgKiBhcmcpDQogew0KIAl1MzIgYWRjMVZhbHVlID0gMDsNCi0JdTMyIGFkYzJWYWx1ZSA9IDA7DQotDQogCWludCB0ZW1wMSA9IDA7DQorCXUzMiBhZGMyVmFsdWUgPSAwOw0KIAlpbnQgdGVtcDIgPSAwOw0KLQ0KLSNpZiBBRENSRl9TRUFSQ0hfVEVNUA0KIAl1MzIgYWRjUmZWYWx1ZSA9IDA7CQ0KIAlpbnQgdGVtcFJmID0gMDsNCi0jZW5kaWYNCisJdTMyIGFkY1JmZFZhbHVlID0gMDsJDQorCWludCB0ZW1wUmZkID0gMDsNCisNCiANCiAJd2hpbGUoMSkgew0KIAkJaWYoZ19hZGMxX2ZsYWc9PTEpew0KIAkJCWFkYzFWYWx1ZSA9IGdldF9hZGMxX3ZvbHRhZ2UoKTsNCi0JCQl0c2NfZ2V0X3Byb2JlX2FkY3ZhbHVlKGFkYzFWYWx1ZSwmdGVtcDEpOw0KKwkJCXRzY19nZXRfcHJvYmVfYWRjdmFsdWUoYWRjMVZhbHVlLCZ0ZW1wMSwgMCk7DQogCQl9DQogCQlpZihnX2FkYzJfZmxhZz09MSl7DQogCQkJYWRjMlZhbHVlID0gZ2V0X2FkYzJfdm9sdGFnZSgpOw0KLQkJCXRzY19nZXRfcHJvYmVfYWRjdmFsdWUoYWRjMlZhbHVlLCZ0ZW1wMik7DQorCQkJdHNjX2dldF9wcm9iZV9hZGN2YWx1ZShhZGMyVmFsdWUsJnRlbXAyLCAwKTsNCiAJCX0NCi0jaWYgQURDUkZfU0VBUkNIX1RFTVAJDQogCQlpZihnX2FkYzNfZmxhZz09MSl7DQogCQkJYWRjUmZWYWx1ZSA9IHRzY19kYWNfcmVhZChJUkFNX1RFTVBDT01QX0RBQyk7IA0KLQkJCXRzY19nZXRfcHJvYmVfYWRjdmFsdWUoYWRjUmZWYWx1ZSwmdGVtcFJmKTsNCisJCQl0c2NfZ2V0X3Byb2JlX2FkY3ZhbHVlKGFkY1JmVmFsdWUsJnRlbXBSZiwgMCk7DQogCQl9DQotI2VuZGlmDQorCQlpZihUc052RGF0YS5BZGNSRmRfRW49PTB4QjIpewkNCisJCQlhZGNSZmRWYWx1ZSA9KHp4X3JlYWRfcmVnKElSQU1fVEVNUENPTVBfUkZEREFDKSYweGZmZmYwMDAwKT4+MTY7IA0KKwkJCXRzY19nZXRfcHJvYmVfYWRjdmFsdWUoYWRjUmZkVmFsdWUsJnRlbXBSZmQsIDEpOw0KKwkJCS8vdGVtcFJmZCA9IHp4X3JlYWRfcmVnKElSQU1fVEVNUENPTVBfUkZEVEVNUCk+PjEwOyANCisJCX0NCiANCiAJCXRzY19sb2NrKCk7DQogDQpAQCAtMzg3LDIxICs0NDIsMzMgQEAKIAkJZ190c19kYXRhX2luZm9bUFJPQkVfQURDMl1bVFNfTUVNQkVSX1BST0JFXSA9IFBST0JFX0FEQzI7DQogCQlnX3RzX2RhdGFfaW5mb1tQUk9CRV9BREMyXVtUU19NRU1CRVJfVEVNUF0gPSB0ZW1wMjsNCiAJCWdfdHNfZGF0YV9pbmZvW1BST0JFX0FEQ1JGXVtUU19NRU1CRVJfUFJPQkVdID0gUFJPQkVfQURDUkY7DQotI2lmIEFEQ1JGX1NFQVJDSF9URU1QDQogCQlnX3RzX2RhdGFfaW5mb1tQUk9CRV9BRENSRl1bVFNfTUVNQkVSX1RFTVBdID10ZW1wUmY7CQ0KLSNlbHNlDQogCQkvKnp4X3JlYWRfcmVnKElSQU1fQkFTRV9BRERSX1NMQVZFX0FGQysweGMpPj4xMCBpcyB0aGUgdGVtcHJhdHVyZSBvZiByZiovDQotCQlnX3RzX2RhdGFfaW5mb1tQUk9CRV9BRENSRl1bVFNfTUVNQkVSX1RFTVBdID0genhfcmVhZF9yZWcoSVJBTV9CQVNFX0FERFJfU0xBVkVfQUZDKzB4Yyk+PjEwOwkNCi0jZW5kaWYNCisJCS8vZ190c19kYXRhX2luZm9bUFJPQkVfQURDUkZdW1RTX01FTUJFUl9URU1QXSA9IHp4X3JlYWRfcmVnKElSQU1fVEVNUENPTVBfUkZEVEVNUCk+PjEwOwkNCisNCisJCWlmKFRzTnZEYXRhLkFkY1JGZF9Fbj09MHhCMil7CQkNCisJCQlnX3RzX2RhdGFfaW5mb1tQUk9CRV9BRENSRmRdW1RTX01FTUJFUl9QUk9CRV0gPSBQUk9CRV9BRENSRmQ7DQorCQkJZ190c19kYXRhX2luZm9bUFJPQkVfQURDUkZkXVtUU19NRU1CRVJfVEVNUF0gPSB0ZW1wUmZkOw0KKwkJfQkNCisJCQ0KIAkJLypzZXQgdGVtcHZhbHVlIHRvIGlyYW0gdG8gYXAqLwkNCiAJCXRzY193cml0ZV9yZWcoVFNDVFJMX1RFTVBBREMxLHRlbXAxKTsNCiAJCXRzY193cml0ZV9yZWcoVFNDVFJMX1RFTVBBREMyLHRlbXAyKTsNCiAJCXRzY193cml0ZV9yZWcoVFNDVFJMX1RFTVBBRENSRiwgZ190c19kYXRhX2luZm9bUFJPQkVfQURDUkZdW1RTX01FTUJFUl9URU1QXSk7DQorCQl0c2Nfd3JpdGVfcmVnKFRTQ1RSTF9URU1QQURDUkZkLCBnX3RzX2RhdGFfaW5mb1tQUk9CRV9BRENSRmRdW1RTX01FTUJFUl9URU1QXSk7DQogDQogCQl0c2NfdW5sb2NrKCk7CQkNCiANCiAJCWlmKGdfdHNjX3ByaW50X2xvZ19kZWJ1ZykNCi0JCQl0c2NfcHJpbnRfbG9nKCJhZGMxL2FkYzIgdmFsdWUgYWRjMVZhbHVlPSVkLGFkYzJWYWx1ZT0lZCxhZGNSZlZhbHVlPSVkLHRlbXAxID0gJWQudGVtcDIgPSAlZC50ZW1wcmYgPSAlZC5cbiIsYWRjMVZhbHVlLGFkYzJWYWx1ZSxhZGNSZlZhbHVlLHRlbXAxLHRlbXAyLCBnX3RzX2RhdGFfaW5mb1tQUk9CRV9BRENSRl1bVFNfTUVNQkVSX1RFTVBdKTsNCisJCXsNCisJCQlpZihUc052RGF0YS5BZGNSRmRfRW49PTB4QjIpewkJDQorCQkJCXRzY19wcmludF9sb2coIiBhZGMxVmFsdWU9JWQsYWRjMlZhbHVlPSVkLGFkY1JmVmFsdWU9JWQsYWRjUmZkVmFsdWU9JWQsdGVtcDEgPSAlZC50ZW1wMiA9ICVkLnRlbXByZiA9ICVkLnRlbXByZmQgPSAlZFxuIiwNCisJCQkJYWRjMVZhbHVlLGFkYzJWYWx1ZSxhZGNSZlZhbHVlLGFkY1JmZFZhbHVlLHRlbXAxLHRlbXAyLCBnX3RzX2RhdGFfaW5mb1tQUk9CRV9BRENSRl1bVFNfTUVNQkVSX1RFTVBdLCBnX3RzX2RhdGFfaW5mb1tQUk9CRV9BRENSRmRdW1RTX01FTUJFUl9URU1QXSApOw0KKwkJCX1lbHNlew0KKwkJCQl0c2NfcHJpbnRfbG9nKCJhZGMxVmFsdWU9JWQsYWRjMlZhbHVlPSVkLGFkY1JmVmFsdWU9JWQsdGVtcDEgPSAlZC50ZW1wMiA9ICVkLnRlbXByZiA9ICVkLlxuIiwNCisJCQkJYWRjMVZhbHVlLGFkYzJWYWx1ZSxhZGNSZlZhbHVlLHRlbXAxLHRlbXAyLCBnX3RzX2RhdGFfaW5mb1tQUk9CRV9BRENSRl1bVFNfTUVNQkVSX1RFTVBdICk7DQorCQkJfQ0KKwkJfQ0KIA0KIAkJaWYoKCgodHNjX3JlY29yZF90aW1lX2NudCpUU19QT0xMSU5HX1RJTUVfUykldHNjX3JlY29yZF90aW1lKT09MCkgJiYgdHNjX3JlY29yZF9mbGFnKQ0KIAkJew0KQEAgLTQxNyw2ICs0ODQsMTAgQEAKIAkJCQlzY19kZWJ1Z19pbmZvX3JlY29yZChNT0RVTEVfSURfQVBfVFNDLCAidGVtcFJmOiVkXG4iLCB6eF9yZWFkX3JlZyhUU0NUUkxfVEVNUEFEQ1JGKSApOw0KIAkJCQlwcmludGsoICJ0ZW1wUmY6JWRcbiIsIHp4X3JlYWRfcmVnKFRTQ1RSTF9URU1QQURDUkYpKTsNCiAJCQl9DQorCQkJaWYoVHNOdkRhdGEuQWRjUkZkX0VuPT0weEIyKXsJCQkNCisJCQkJc2NfZGVidWdfaW5mb19yZWNvcmQoTU9EVUxFX0lEX0FQX1RTQywgInRlbXBSZmQ6JWRcbiIsIHp4X3JlYWRfcmVnKFRTQ1RSTF9URU1QQURDUkZkKSApOw0KKwkJCQlwcmludGsoICJ0ZW1wUmZkOiVkXG4iLCB6eF9yZWFkX3JlZyhUU0NUUkxfVEVNUEFEQ1JGZCkpOw0KKwkJCX0JDQogCQl9DQogCQl0c2NfcmVjb3JkX3RpbWVfY250Kys7DQogCQkNCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3RzYy96eC10c2MuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDI0OTUyNTguLjZjNzhjNTkKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3RzYy96eC10c2MuaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy5oCkBAIC0yMSw4ICsyMSw4IEBACiB7CiAJUFJPQkVfQURDMSA9IDAsCiAJUFJPQkVfQURDMiwKLQlQUk9CRV9BRENSRiwJCi0JUFJPQkVfUkVTRVYyLAorCVBST0JFX0FEQ1JGLAkvL2dldCByZiB0ZW1wCisJUFJPQkVfQURDUkZkLCAgIC8vZ2V0IGRiYiB0ZW1wCiAJUFJPQkVfUkVTRVYzLAogCVBST0JFX1JFU0VWNCwKIAkKQEAgLTE1MSw3ICsxNTEsNyBAQAogI2RlZmluZSAgQklUX1BST0JFX0FEQzEgIAkJCQkoUFJPQkVfQURDMSpCSVRTX0ZPUl9QUk9CRVMpCiAjZGVmaW5lICBCSVRfUFJPQkVfQURDMiAgCQkJCShQUk9CRV9BREMyKkJJVFNfRk9SX1BST0JFUykKICNkZWZpbmUgIEJJVF9QUk9CRV9BRENSRiAgCQkJCShQUk9CRV9BRENSRipCSVRTX0ZPUl9QUk9CRVMpCi0jZGVmaW5lICBCSVRfUFJPQkVfUkVTRVYyICAJCQkJKFBST0JFX1JFU0VWMipCSVRTX0ZPUl9QUk9CRVMpCisjZGVmaW5lICBCSVRfUFJPQkVfQURDUkZkICAgCQkJCShQUk9CRV9BRENSRmQqQklUU19GT1JfUFJPQkVTKQogI2RlZmluZSAgQklUX1BST0JFX1JFU0VWMyAgCQkJCShQUk9CRV9SRVNFVjMqQklUU19GT1JfUFJPQkVTKQogI2RlZmluZSAgQklUX1BST0JFX1JFU0VWNCAgCQkJCShQUk9CRV9SRVNFVjQqQklUU19GT1JfUFJPQkVTKQogCkBAIC0xNTksNyArMTU5LDcgQEAKICNkZWZpbmUgIFRTQ1RSTF9URU1QQURDMQkJCQkJKElSQU1fVFNDX0JBU0UrMHgxMDApICAvKnRlbXAgYWRjMSovCiAjZGVmaW5lICBUU0NUUkxfVEVNUEFEQzIJCQkJCShJUkFNX1RTQ19CQVNFKzB4MTA0KSAgLyp0ZW1wIGFkYzIqLwogI2RlZmluZSAgVFNDVFJMX1RFTVBBRENSRgkJCQkJKElSQU1fVFNDX0JBU0UrMHgxMDgpICAvKnRlbXAgYWRjcmYqLwotI2RlZmluZSAgVFNDVFJMX1RFTVBSRVYyCQkJCQkoSVJBTV9UU0NfQkFTRSsweDEwYykgIC8qdGVtcCByZXYyKi8KKyNkZWZpbmUgIFRTQ1RSTF9URU1QQURDUkZkCQkJCQkoSVJBTV9UU0NfQkFTRSsweDEwYykgIC8qdGVtcCByZXYyKi8KICNkZWZpbmUgIFRTQ1RSTF9URU1QUkVWMwkJCQkJKElSQU1fVFNDX0JBU0UrMHgxMTApICAvKnRlbXAgcmV2MyovCiAjZGVmaW5lICBUU0NUUkxfVEVNUFJFVjQJCQkJCShJUkFNX1RTQ19CQVNFKzB4MTE0KSAgLyp0ZW1wIHJldjQqLwogI2RlZmluZSAgVFNDVFJMX0RFVEVDVF9FTgkJCQkJKElSQU1fVFNDX0JBU0UrMHgxMTgpICAvKlRzTnZEYXRhLkRldGVjdEVuKi8KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggYTc3NGNkNS4uYTE3NzQ1YyAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTE0MSw1ICsxNDEsNiBAQAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdm9pY2VidWZmZXJkcnYvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYXVkaW9taXhkcnYvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BsYXRfdGVzdC9LY29uZmlnIgogCiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCA0NWQyN2MyLi5hOTM1YzY5IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC02Myw0ICs2Myw1IEBACiBvYmotJChDT05GSUdfQU1SX0RSVikJCSs9IGFtcmRydi8KIG9iai0kKENPTkZJR19WT0lDRV9EUlYpCQkrPSB2b2ljZWRydi8KIG9iai0kKENPTkZJR19WT0lDRV9CVUZGRVJfRFJWKQkJKz0gdm9pY2VidWZmZXJkcnYvCi1vYmotJChDT05GSUdfQVVESU9NSVhfRFJWKQkJICAgICs9IGF1ZGlvbWl4ZHJ2LwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19BVURJT01JWF9EUlYpCQkgICAgKz0gYXVkaW9taXhkcnYvCitvYmotJChDT05GSUdfUExBVF9URVNUKSAgICAgICAgICs9IHBsYXRfdGVzdC8KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlci5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyLmMKaW5kZXggYWFiNmMxNS4uNTJlY2RlYiAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyLmMKQEAgLTMyOTgsMTEgKzMyOTgsNiBAQAogCXN0cnVjdCBiaW5kZXJfcHJvYyAqcHJvYyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlkZWJ1Z2ZzX3JlbW92ZShwcm9jLT5kZWJ1Z2ZzX2VudHJ5KTsKIAliaW5kZXJfZGVmZXJfd29yayhwcm9jLCBCSU5ERVJfREVGRVJSRURfUkVMRUFTRSk7Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfQklOREVSX1JQQwkKLQlpZihwcm9jID09IHJwY19vd25fcHJvYykgewotCQliaW5kZXJfZGVpbml0X3JwYygpOwotCX0KLSNlbmRpZgkKIAogCXJldHVybiAwOwogfQpAQCAtMzQzNiw3ICszNDMxLDQ1IEBACiAJCSAgICAgcHJvYy0+cGlkLCB0aHJlYWRzLCBub2RlcywgaW5jb21pbmdfcmVmcywgb3V0Z29pbmdfcmVmcywKIAkJICAgICBhY3RpdmVfdHJhbnNhY3Rpb25zLCBidWZmZXJzLCBwYWdlX2NvdW50KTsKIAotCWtmcmVlKHByb2MpOworCQorI2lmZGVmIENPTkZJR19BTkRST0lEX0JJTkRFUl9SUEMJCisJaWYoTlVMTCAhPSBiaW5kZXJfZ2V0X3JwY3Byb2MoKSkgeworCQlzdHJ1Y3QgYmluZGVyX3Byb2MgKml0cjsKKwkJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKworCQlpbnQgY291bnRfcHJvYyA9IDA7CisJCWludCBjb3VudF90aHJlYWQgPSAwOworCQlzdGF0aWMgaW50IGlzX29ubHlfcnBjcHJvYyA9IDA7CisJCXN0YXRpYyBpbnQgaXNfb25seV9ycGN0aHJlYWQgPSAwOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ciwgcG9zLCAmYmluZGVyX3Byb2NzLCBwcm9jX25vZGUpIHsKKwkJCWNvdW50X3Byb2MgKys7CQkgIAorCQl9CisJCWlmKDEgPT0gY291bnRfcHJvYykgeworCQkgIAlpc19vbmx5X3JwY3Byb2MgPSAxOworCQl9CisKKwkJaWYocnBjX293bl9wcm9jID09IHByb2MpIHsKKwkJCWZvciAobiA9IHJiX2ZpcnN0KCZwcm9jLT50aHJlYWRzKTsgbiAhPSBOVUxMOyBuID0gcmJfbmV4dChuKSkgeworCQkJCWNvdW50X3RocmVhZCArKzsJCQkJICAKKwkJCX0KKwkJCWlmKDAgPT0gY291bnRfdGhyZWFkKSB7CisJCQkJaXNfb25seV9ycGN0aHJlYWQgPSAxOworCQkJfQorCQl9IAkgIAorCQliaW5kZXJfZGVidWcoQklOREVSX0RFQlVHX09QRU5fQ0xPU0UsIiVzICVkOiVkIixfX0ZVTkNUSU9OX18saXNfb25seV9ycGNwcm9jLGlzX29ubHlfcnBjdGhyZWFkKTsKKwkJLypPbmx5IHJwY3Byb2MsZGVpbml0IGl0Ki8KKwkJaWYoMSA9PSBpc19vbmx5X3JwY3Byb2MgJiYgMSA9PSBpc19vbmx5X3JwY3RocmVhZCkgewkKKwkJCWJpbmRlcl91bmxvY2soX19mdW5jX18pOworCQkJYmluZGVyX2RlaW5pdF9ycGMoKTsKKwkJCQorCQkJaXNfb25seV9ycGNwcm9jID0gMDsKKwkJCWlzX29ubHlfcnBjdGhyZWFkID0gMDsKKwkJCWJpbmRlcl9sb2NrKF9fZnVuY19fKTsKKwkJfQorCX0KKyNlbmRpZgkKKwlrZnJlZShwcm9jKTsJCiB9CiAKIHN0YXRpYyB2b2lkIGJpbmRlcl9kZWZlcnJlZF9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTM0NjYsNiArMzQ5OSwxMyBAQAogCQkJaWYgKGZpbGVzKQogCQkJCXByb2MtPmZpbGVzID0gTlVMTDsKIAkJfQorI2lmZGVmIENPTkZJR19BTkRST0lEX0JJTkRFUl9SUEMKKwkJaWYoTlVMTCA9PSBiaW5kZXJfZ2V0X3JwY3Byb2MoKSkgeworCQkJYmluZGVyX2RlYnVnKEJJTkRFUl9ERUJVR19PUEVOX0NMT1NFLCIlcyBmb3JiaWRkZW4gd29yayAlZC5ycGNfcHJvYyBoYXZlIGJlZW4gcmVsZWFzZWQuIixfX0ZVTkNUSU9OX18sIGRlZmVyKTsKKwkJCWJpbmRlcl91bmxvY2soX19mdW5jX18pOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYJCiAKIAkJaWYgKGRlZmVyICYgQklOREVSX0RFRkVSUkVEX0ZMVVNIKQogCQkJYmluZGVyX2RlZmVycmVkX2ZsdXNoKHByb2MpOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyX3JwYy5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyX3JwYy5jCmluZGV4IDFkYzQxMGUuLjg3N2E1ZTQgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlcl9ycGMuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9iaW5kZXJfcnBjLmMKQEAgLTQwNiw2ICs0MDYsNyBAQAogDQogCQlicnBjX2Nobl9yZWN2X3Byb2MoJmRhdGEpOwkJCQkJCQkNCiAJfQ0KKwlicnBjX2VycigidGhlIHJwbXNnIGNoYW5uZWwgbG9vcCBzdG9wIVxuIik7DQogCQ0KIAlyZXR1cm4gMDsNCiB9DQpAQCAtNzM4LDEwICs3MzksMTAgQEAKIAlwYnJwY19jdHgtPmFnZW50X3RocmVhZC5ic3RvcCA9IDE7DQogCQ0KIAlpZihwYnJwY19jdHgtPnBycGNfZmlsZSkgewkJCQ0KLQkJZmlscF9jbG9zZShwYnJwY19jdHgtPnBycGNfZmlsZSwgY3VycmVudC0+ZmlsZXMpOwkJDQorCQlmaWxwX2Nsb3NlKHBicnBjX2N0eC0+cHJwY19maWxlLCBOVUxMKTsJCQ0KIA0KIAkJaWYoTlVMTCAhPSB2bWEpIHsNCi0JCQlkb19tdW5tYXAoY3VycmVudC0+bW0sIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7DQorCQkJZG9fbXVubWFwKHZtYS0+dm1fbW0sIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7DQogCQl9DQogCX0NCiAJDQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL3BsYXRfdGVzdC9LY29uZmlnIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL3BsYXRfdGVzdC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4NWM2OTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3N0YWdpbmcvcGxhdF90ZXN0L0tjb25maWcKQEAgLTAsMCArMSw1IEBACitjb25maWcgUExBVF9URVNUCisgICAgdHJpc3RhdGUgIlBMQVQgVEVTVCBtb2R1bGUiCisgICAgZGVmYXVsdCBtCisgICAgaGVscAorICAgICAgVGhpcyBpcyBhIHNpbXBsZSBQbGF0IFRlc3QgbW9kdWxlLgpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL3BsYXRfdGVzdC9NYWtlZmlsZSBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy9wbGF0X3Rlc3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmZhZjI5YQotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy9wbGF0X3Rlc3QvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1BMQVRfVEVTVCkJKz0gcGxhdHRlc3QubwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL3BsYXRfdGVzdC9wbGF0dGVzdC5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL3BsYXRfdGVzdC9wbGF0dGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3ZDljZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3N0YWdpbmcvcGxhdF90ZXN0L3BsYXR0ZXN0LmMKQEAgLTAsMCArMSw1OSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKK3N0YXRpYyBjaGFyICptb2R1bGVfdHlwZSA9ICJkZWZhdWx0IjsKKworbW9kdWxlX3BhcmFtKG1vZHVsZV90eXBlLCBjaGFycCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZHVsZV90eXBlLCAiQSBjdXN0b20gc3RyaW5nIHBhcmFtZXRlciIpOworCisKK3N0YXRpYyB2b2lkIHN5c2xvZ190ZXN0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fRU1FUkcgICAic3lzbG9ndGVzdDogdGhpcyBpcyBLRVJOX0VNRVJHICAgbWVzc2FnZVxuIik7CisJcHJpbnRrKEtFUk5fQUxFUlQgICAic3lzbG9ndGVzdDogdGhpcyBpcyBLRVJOX0FMRVJUICAgbWVzc2FnZVxuIik7CisJcHJpbnRrKEtFUk5fQ1JJVCAgICAic3lzbG9ndGVzdDogdGhpcyBpcyBLRVJOX0NSSVQgICAgbWVzc2FnZVxuIik7CisJcHJpbnRrKEtFUk5fRVJSICAgICAic3lzbG9ndGVzdDogdGhpcyBpcyBLRVJOX0VSUiAgICAgbWVzc2FnZVxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzbG9ndGVzdDogdGhpcyBpcyBLRVJOX1dBUk5JTkcgbWVzc2FnZVxuIik7CisJcHJpbnRrKEtFUk5fTk9USUNFICAic3lzbG9ndGVzdDogdGhpcyBpcyBLRVJOX05PVElDRSAgbWVzc2FnZVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAgICAic3lzbG9ndGVzdDogdGhpcyBpcyBLRVJOX0lORk8gICAgbWVzc2FnZVxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgICAic3lzbG9ndGVzdDogdGhpcyBpcyBLRVJOX0RFQlVHICAgbWVzc2FnZVxuIik7Cit9CisKK3N0YXRpYyBpbnQgcGxhdHRlc3RfZnVuYyh2b2lkKSB7CisJCisJaWYgKCFzdHJuY21wKG1vZHVsZV90eXBlLCAic3lzbG9ndGVzdCIsIHN0cmxlbigic3lzbG9ndGVzdCIpKSkKKwl7CisJCXN5c2xvZ190ZXN0KCk7CisJfQorCWVsc2UgaWYgKCFzdHJuY21wKG1vZHVsZV90eXBlLCAiZGVmYXVsdCIsIHN0cmxlbigiZGVmYXVsdCIpKSkKKwl7CisJCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSBzZXQgbW9kdWxlX3R5cGUgdmFsdWVcbiIpOworCX0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwbGF0dGVzdF9tb2R1bGVfaW5pdCh2b2lkKSB7CisgICAgcHJpbnRrKEtFUk5fSU5GTyAiUGxhdCBUZXN0IGVudGVyXG4iKTsKKwlwbGF0dGVzdF9mdW5jKCk7CQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbGF0dGVzdF9tb2R1bGVfZXhpdCh2b2lkKSB7CisJcHJpbnRrKEtFUk5fSU5GTyAiUGxhdCBUZXN0IGV4aXRcbiIpOworfQorCittb2R1bGVfaW5pdChwbGF0dGVzdF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChwbGF0dGVzdF9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdVT1ciKTsKK01PRFVMRV9ERVNDUklQVElPTigicGxhdCB0ZXN0IGZvciBzYyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisKKworCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfY2hnX2lkZW50aWZ5LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfY2hnX2lkZW50aWZ5LmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBhNzcxYWE3Li44MmYxMjlhCi0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaGdfaWRlbnRpZnkuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfY2hnX2lkZW50aWZ5LmMKQEAgLTE4MSw3ICsxODEsMTQgQEAKIGludCBkZXRlY3RlZF9jaGFyZ2VyKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0RXQ19ERVZJQ0VfR1BJT19DSEFSR0VSCisKKy8vZm9yIG1kbCxlbnVtIHVzYiB3aGVuIHBvd2Vyb24sbWF5YmUgbm8gZ3BpbyBkZXRlY3QJCisjaWZuZGVmIF9VU0VfVkVISUNMRV9EQ19SRUYKIAlyZXR1cm4gMTsKKyNlbHNlCisvL290aGVycyAsZGVwZW5kcyBncGlvIGRldGVjdAorCXJldHVybiB1c2JfcGx1Z2luOworI2VuZGlmCiAjZW5kaWYKIAlpZihkZXRlY3RfZm4gPT0gTlVMTCkKIAkJcmV0dXJuIDE7CkBAIC0xMDQzLDEyICsxMDUwLDEzIEBACiAvKkdQSU+6zc3isr/W0LbPusW4+b7dz+7Ev8q1vMrH6b/20N64xAogICq0y7Smzqqyzr+8tPrC6wogICovCisvL3hmLmxpQDIwMjMwOTA5IG1vZGlmeSBmb3IgdXNiIGhvdC1wbHVnIHN0YXJ0CiAgI2lmZGVmIF9VU0VfVkVISUNMRV9EQ19SRUYKLSNkZWZpbmUgVVNCX0dQSU8gWlgyOV9HUElPXzU0Ci0jZGVmaW5lIFVTQl9HUElPX0ZVTkNfR1BJTyBHUElPNTRfR1BJTzU0Ci0jZGVmaW5lIFVTQl9HUElPX0ZVTkNfRVhUX0lOVCBHUElPNTRfRVhUX0lOVDcKLSNkZWZpbmUgVVNCX0RUX0lOVCAgUENVX0VYN19JTlQKLSAKKyNkZWZpbmUgVVNCX0dQSU8gWlgyOV9HUElPXzEyNQorI2RlZmluZSBVU0JfR1BJT19GVU5DX0dQSU8gR1BJTzEyNV9HUElPMTI1CisjZGVmaW5lIFVTQl9HUElPX0ZVTkNfRVhUX0lOVCBHUElPMTI1X0VYVF9JTlQxNAorI2RlZmluZSBVU0JfRFRfSU5UICBQQ1VfRVgxNF9JTlQKKy8veGYubGlAMjAyMzA5MDkgbW9kaWZ5IGZvciB1c2IgaG90LXBsdWcgZW5kCiAgI2Vsc2UKICNkZWZpbmUgVVNCX0dQSU8gWlgyOV9HUElPXzUyCiAjZGVmaW5lIFVTQl9HUElPX0ZVTkNfR1BJTyBHUElPNTJfR1BJTzUyCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvdXNiX25ldGxpbmsuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC91c2JfbmV0bGluay5jCmluZGV4IGIyZjQ3MGYuLjE1ZGU3M2UgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC91c2JfbmV0bGluay5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC91c2JfbmV0bGluay5jCkBAIC0zNSw2ICszNSw3IEBACiAJaW50IHN3aXRjaF9tb2RlID0gMDsNCiAJaW50IHNpbXVsYXRlX3BsdWcgPSAwOw0KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3dpdGNoX3VzYm1vZGU7DQorZXh0ZXJuIHZvaWQgdXNiX3BsdWdfbm90aWZ5X2FwKGVfdXNiX3JwbXNnX2NtZF90eXBlIHBsdWdfdHlwZSk7DQogDQogI2VuZGlmDQogDQpAQCAtODIzLDYgKzgyNCw5IEBACiAJCQlzdHJjcHkoYnVmLCJVU0JFVkVOVD11c2JfZGV2aWNlX2luIik7DQogCQkJYWN0aW9uID0gS09CSl9BREQ7DQogCQkJdXNiX3BsdWcgPSAxOw0KKyNpZmRlZiBfVVNFX1ZFSElDTEVfREMJCQkNCisJCQl1c2JfcGx1Z19ub3RpZnlfYXAoVVNCX1JQTVNHX1VTQl9QTFVHX0lOKTsNCisjZW5kaWYNCiAJCQl1c2JfcmVjb3JkX2RiZ2luZm8oVVNCX0RFVl9QTFVHSU4sIDAsIDApOw0KIAkJCWJyZWFrOw0KIA0KQEAgLTgzMiw2ICs4MzYsOSBAQAogCQkJc3RyY3B5KGJ1ZiwiVVNCRVZFTlQ9dXNiX2RldmljZV9vdXQiKTsNCiAJCQlhY3Rpb24gPSBLT0JKX1JFTU9WRTsNCiAJCQl1c2JfcGx1ZyA9IDA7DQorI2lmZGVmIF9VU0VfVkVISUNMRV9EQw0KKwkJCXVzYl9wbHVnX25vdGlmeV9hcChVU0JfUlBNU0dfVVNCX1BMVUdfT1VUKTsNCisjZW5kaWYNCiAJCQl1c2JfcmVjb3JkX2RiZ2luZm8oVVNCX0RFVl9QTFVHT1VULCAwLCAwKTsNCiAJCQlicmVhazsNCiAJCWNhc2UgVVNCX0NIQVJHRVJfUExVR0lOOg0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC91c2JfcnBtc2dfc2VydmVyLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvdXNiX3JwbXNnX3NlcnZlci5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOGJkMDQ4Yi4uNzAyY2JiZgotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvdXNiX3JwbXNnX3NlcnZlci5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC91c2JfcnBtc2dfc2VydmVyLmMKQEAgLTg3LDYgKzg3LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcnBtc2dfbm90aWZ5X2FwKTsKIAordm9pZCB1c2JfcGx1Z19ub3RpZnlfYXAoZV91c2JfcnBtc2dfY21kX3R5cGUgcGx1Z190eXBlKQoreworCXVzYl9ycG1zZ19jbWQgbm90aWZ5OyAKKwltZW1zZXQoJm5vdGlmeSwgMCwgc2l6ZW9mKG5vdGlmeSkpOworCW5vdGlmeS5jbWQgPSBwbHVnX3R5cGU7CisJcHJpbnRrKCItLS0tdXNiX3BsdWdfbm90aWZ5X2FwLCB0eXBlOiVkXG4iLCBwbHVnX3R5cGUpOworCXVzYl9ycG1zZ19ub3RpZnlfYXAoJm5vdGlmeSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGx1Z19ub3RpZnlfYXApOwogCiBpbnQgdXNiX2Rpc3BhdGNoX2NtZChjaGFyICogYnVmLCBpbnQgbGVuKQogewpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvS2NvbmZpZyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdm9sdGVfa2VybmVsL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmRjMTY1NgotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdm9sdGVfa2VybmVsL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorIworIyBNdWx0aWZ1bmN0aW9uIG1pc2NlbGxhbmVvdXMgZGV2aWNlcworIworCisKK2NvbmZpZyBWT0xURV9LRVJORUwKKwl0cmlzdGF0ZSAidm9sdGUga2VybmVsIgorCWhlbHAKKwkgIFRoaXMgdm9sdGUga2VybmVsIGlzIGp1c3Qgc2FtYmxlLgorZGVmYXVsdCBtCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3ZvbHRlX2tlcm5lbC9NYWtlZmlsZSBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdm9sdGVfa2VybmVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4MmEyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3ZvbHRlX2tlcm5lbC9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHZvbHRlIGtlcm5lbCBkZXZpY2VzCisjCisKKyNDVVJSRU5UX1BBVEggOj0gJChzaGVsbCBwd2QpCitFWFRSQV9DRkxBR1MgKz0gLUkgZHJpdmVycy92b2x0ZV9rZXJuZWwKK2VjaG8gInlhbm1pbmdfMDAyID0gJChFWFRSQV9DRkxBR1MpIgorb2JqLSQoQ09ORklHX1ZPTFRFX0tFUk5FTCkJKz0gdm9sdGVfa2VybmVsLm8gdm9sdGVfa2VybmVsX3Rlc3QubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdm9sdGVfa2VybmVsL3ZvbHRlX2tlcm5lbC5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvdm9sdGVfa2VybmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDc3MjA1NAotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdm9sdGVfa2VybmVsL3ZvbHRlX2tlcm5lbC5jCkBAIC0wLDAgKzEsMjg4IEBACisvL9K7oaK0+sLryrXP1rLOv7yhow0KKy8vMaGi0v3Tw823zsS8/g0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZvbHRlX2Rydi5oPg0KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPg0KKyNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4NCisjaW5jbHVkZSA8bGludXgvZnMuaD4NCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPg0KKw0KKyNpbmNsdWRlIDx2b2x0ZV9rZXJuZWwuaD4NCisNCisjZGVmaW5lIFZPTFRFX0tFUk5FTF9ERVZfSU5WQUxJRF9JRCAoLTEpDQorDQorDQorI2RlZmluZSBWT0xURV9LRVJORUxfREVWX05BTUUgICIvZGV2L3ZvbHRlX2RldmljZSINCisNCisNCitpbnQgdm9sdGVfa2VybmVsX2RldmZkID0gVk9MVEVfS0VSTkVMX0RFVl9JTlZBTElEX0lEOw0KKw0KKyNkZWZpbmUgRFJWX1NVQ0NFU1MgMA0KKyNkZWZpbmUgRFJWX0VSUk9SICgtMSkNCisNCitpbnQgcnhfY291bnQgPSAwOw0KK2ludCB0eF9jb3VudCA9IDA7DQoraW50IHZvbHRlX2tlcm5lbF9idWZfbGVudGggPSAwOw0KK1NJTlQzMiB6RHJ2Vm9sdGVfa2VybmVsX09wZW4oVF9aRHJ2Vm9sdGVfQ2ZnICpjZmdQYXJhbSkgDQorew0KKyAgICAgICAgaW50IHJldDsNCisgICAgICAgbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOw0KKw0KKwlzZXRfZnMoS0VSTkVMX0RTKTsNCisJdm9sdGVfa2VybmVsX2RldmZkID0ga2VybmVsX3N5c19vcGVuKFZPTFRFX0tFUk5FTF9ERVZfTkFNRSwgT19SRFdSLDApOw0KKwlwcmludGsoInpEcnZWb2x0ZV9PcGVuIHZvbHRlX3R4X3J4X2RldmZkIGlzICVkXG4iLHZvbHRlX2tlcm5lbF9kZXZmZCk7DQorDQorCWlmKHZvbHRlX2tlcm5lbF9kZXZmZCA8IDApDQorCXsNCisJCXByaW50aygiekRydlZvbHRlX09wZW4ga2VybmVsX3N5c19vcGVuIGZhaWxlZCFcbiIpOw0KKwkJc2V0X2ZzKG9sZF9mcyk7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwl9DQorCXJldCA9IGtlcm5lbF9zeXNfaW9jdGwodm9sdGVfa2VybmVsX2RldmZkLCBWT0xURV9JT0NUTF9TRVRfQ0ZHLCBjZmdQYXJhbSk7DQorDQorCWlmKHJldCA8IDApDQorCXsNCisJCXByaW50aygiekRydlZvbHRlX09wZW4gc3lzX2lvY3RsIGZhaWxlZCFyZXQgaXMgJWRcbiIscmV0KTsNCisJCWdvdG8gZXJyOw0KKwl9DQorDQorCXZvbHRlX2tlcm5lbF9idWZfbGVudGggPSBjZmdQYXJhbS0+c2FtcGxlc19wZXJfZnJhbWUgKiAgY2ZnUGFyYW0tPmJpdHNfcGVyX3NhbXBsZSAvIDg7DQorCXNldF9mcyhvbGRfZnMpOw0KKwkvL1ZPTFRFX0xPRyg0LCAoVEhJU19GSUxFLCAienRlIGF1ZGlvICVzIG9wZW4gc3VjY2VzcyEiLCBWT0xURV9ERVZfTkFNRSkpOw0KKwlyZXR1cm4gRFJWX1NVQ0NFU1M7DQorZXJyOg0KKwlrZXJuZWxfc3lzX2Nsb3NlKHZvbHRlX2tlcm5lbF9kZXZmZCk7DQorCXNldF9mcyhvbGRfZnMpOw0KKwl2b2x0ZV9rZXJuZWxfZGV2ZmQgPSBWT0xURV9LRVJORUxfREVWX0lOVkFMSURfSUQ7DQorCXZvbHRlX2tlcm5lbF9idWZfbGVudGggPSAwOw0KKwlyZXR1cm4gRFJWX0VSUk9SOw0KKw0KK30NCitFWFBPUlRfU1lNQk9MKHpEcnZWb2x0ZV9rZXJuZWxfT3Blbik7DQorDQorDQorDQorDQorDQorDQorDQorDQorDQorDQorU0lOVDMyIHpEcnZWb2x0ZV9rZXJuZWxfQ2xvc2UoVk9JRCkgDQorew0KKwlpZih2b2x0ZV9rZXJuZWxfZGV2ZmQgPT0gVk9MVEVfS0VSTkVMX0RFVl9JTlZBTElEX0lEKQ0KKwl7DQorCQkvL3ByaW50aygxLCAoVEhJU19GSUxFLCAienRlIGF1ZGlvICVzIHpEcnZWb2x0ZV9DbG9zZSBpbnZhbGlkIGRldiEiLCBWT0xURV9ERVZfTkFNRSkpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KKwltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7DQorDQorCXNldF9mcyhLRVJORUxfRFMpOw0KKwlrZXJuZWxfc3lzX2Nsb3NlKHZvbHRlX2tlcm5lbF9kZXZmZCk7DQorDQorCXZvbHRlX2tlcm5lbF9kZXZmZCA9IFZPTFRFX0tFUk5FTF9ERVZfSU5WQUxJRF9JRDsNCisJdm9sdGVfa2VybmVsX2J1Zl9sZW50aCA9IDA7DQorCS8vVk9MVEVfTE9HKDQsIChUSElTX0ZJTEUsICJ6dGUgYXVkaW8gJXMgekRydlZvbHRlX0Nsb3NlIHN1Y2Nlc3MhIiwgVk9MVEVfREVWX05BTUUpKTsNCisJc2V0X2ZzKG9sZF9mcyk7DQorDQorCXJldHVybiBEUlZfU1VDQ0VTUzsNCit9DQorRVhQT1JUX1NZTUJPTCh6RHJ2Vm9sdGVfa2VybmVsX0Nsb3NlKTsNCisNCisvLzQNCisNCisNCisNCisNCisvLzWhorbBv6rKvLrNzaPWubqvyv2yzr+8o7sNCitTSU5UMzIgekRydlZvbHRlX2tlcm5lbF9SZWFkU3RhcnQoVk9JRCkgDQorew0KKwlpZih2b2x0ZV9rZXJuZWxfZGV2ZmQgPT0gVk9MVEVfS0VSTkVMX0RFVl9JTlZBTElEX0lEKQ0KKwl7DQorCQlwcmludGsoInpEcnZWb2x0ZV9SZWFkU3RhcnQgZmFpbFxuIik7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwl9DQorCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsNCisNCisJc2V0X2ZzKEtFUk5FTF9EUyk7DQorCWlmKGtlcm5lbF9zeXNfaW9jdGwodm9sdGVfa2VybmVsX2RldmZkLCBWT0xURV9JT0NUTF9SRUFEX1NUQVJULCAwKSA8IDApDQorCXsNCisJCXByaW50aygiekRydlZvbHRlX1JlYWRTdGFydCBpb2N0bCBmYWlsXG4iKTsNCisJCQlzZXRfZnMob2xkX2ZzKTsNCisNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0gDQorCQlzZXRfZnMob2xkX2ZzKTsNCisNCisJLy9WT0xURV9MT0coNCwgKFRISVNfRklMRSwgInp0ZSBhdWRpbyAlcyB6RHJ2Vm9sdGVfUmVhZFN0YXJ0IHN1Y2Nlc3MhIiwgVk9MVEVfREVWX05BTUUpKTsNCisJcmV0dXJuIERSVl9TVUNDRVNTOw0KK30NCisNCitFWFBPUlRfU1lNQk9MKHpEcnZWb2x0ZV9rZXJuZWxfUmVhZFN0YXJ0KTsNCisNCitTSU5UMzIgekRydlZvbHRlX2tlcm5lbF9SZWFkU3RvcChWT0lEKSANCit7DQorCWlmKHZvbHRlX2tlcm5lbF9kZXZmZCA9PSBWT0xURV9LRVJORUxfREVWX0lOVkFMSURfSUQpDQorCXsNCisJCXByaW50aygiekRydlZvbHRlX1JlYWRTdG9wIGZhaWxcbiIpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KKwltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7DQorDQorCXNldF9mcyhLRVJORUxfRFMpOw0KKwlpZihrZXJuZWxfc3lzX2lvY3RsKHZvbHRlX2tlcm5lbF9kZXZmZCwgVk9MVEVfSU9DVExfUkVBRF9TVE9QLCAwKSA8IDApDQorCXsNCisJCXByaW50aygiekRydlZvbHRlX1JlYWRTdG9wIGlvY3RsIGZhaWxcbiIpOw0KKwkJCXNldF9mcyhvbGRfZnMpOw0KKw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfSAgIA0KKwlzZXRfZnMob2xkX2ZzKTsNCisNCisJLy9WT0xURV9MT0coNCwgKFRISVNfRklMRSwgInp0ZSBhdWRpbyAlcyB6RHJ2Vm9sdGVfUmVhZFN0b3Agc3VjY2VzcyEiLCBWT0xURV9ERVZfTkFNRSkpOw0KKwlyZXR1cm4gRFJWX1NVQ0NFU1M7DQorfQ0KK0VYUE9SVF9TWU1CT0woekRydlZvbHRlX2tlcm5lbF9SZWFkU3RvcCk7DQorDQorDQorLy82oaLQtL+qyry6zc2j1rm6r8r9ss6/vKO7DQorU0lOVDMyIHpEcnZWb2x0ZV9rZXJuZWxfV3JpdGVTdGFydChWT0lEKSANCit7DQorCWlmKHZvbHRlX2tlcm5lbF9kZXZmZCA9PSBWT0xURV9LRVJORUxfREVWX0lOVkFMSURfSUQpDQorCXsNCisJCXByaW50aygiekRydlZvbHRlX1dyaXRlU3RhcnQgZmFpbFxuIik7DQorCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwl9DQorCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7DQorDQorCXNldF9mcyhLRVJORUxfRFMpOw0KKwlpZihrZXJuZWxfc3lzX2lvY3RsKHZvbHRlX2tlcm5lbF9kZXZmZCwgVk9MVEVfSU9DVExfV1JJVEVfU1RBUlQsIDApIDwgMCkNCisJew0KKwkJcHJpbnRrKCJ6RHJ2Vm9sdGVfV3JpdGVTdGFydCBpb2N0bCBmYWlsXG4iKTsNCisJCXNldF9mcyhvbGRfZnMpOw0KKw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfSAgDQorDQorCQlzZXRfZnMob2xkX2ZzKTsNCisNCisJLy9WT0xURV9MT0coNCwgKFRISVNfRklMRSwgInp0ZSBhdWRpbyAlcyB6RHJ2Vm9sdGVfV3JpdGVTdGFydCBzdWNjZXNzISIsIFZPTFRFX0RFVl9OQU1FKSk7DQorCXJldHVybiBEUlZfU1VDQ0VTUzsNCit9DQorRVhQT1JUX1NZTUJPTCh6RHJ2Vm9sdGVfa2VybmVsX1dyaXRlU3RhcnQpOw0KKw0KK1NJTlQzMiB6RHJ2Vm9sdGVfa2VybmVsX1dyaXRlU3RvcChWT0lEKSANCit7DQorCWlmKHZvbHRlX2tlcm5lbF9kZXZmZCA9PSBWT0xURV9LRVJORUxfREVWX0lOVkFMSURfSUQpDQorCXsNCisJCXByaW50aygiekRydlZvbHRlX1dyaXRlU3RvcCBmYWlsXG4iKTsNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOw0KKw0KKwlzZXRfZnMoS0VSTkVMX0RTKTsNCisJaWYoa2VybmVsX3N5c19pb2N0bCh2b2x0ZV9rZXJuZWxfZGV2ZmQsIFZPTFRFX0lPQ1RMX1dSSVRFX1NUT1AsIDApIDwgMCkNCisJew0KKwkJcHJpbnRrKCJ6RHJ2Vm9sdGVfV3JpdGVTdG9wIGlvY3RsIGZhaWxcbiIpOw0KKwkJCXNldF9mcyhvbGRfZnMpOw0KKw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfSAgDQorCXNldF9mcyhvbGRfZnMpOw0KKw0KKwkvL1ZPTFRFX0xPRyg0LCAoVEhJU19GSUxFLCAienRlIGF1ZGlvICVzIHpEcnZWb2x0ZV9Xcml0ZVN0b3Agc3VjY2VzcyEiLCBWT0xURV9ERVZfTkFNRSkpOw0KKwlyZXR1cm4gRFJWX1NVQ0NFU1M7DQorfQ0KK0VYUE9SVF9TWU1CT0woekRydlZvbHRlX2tlcm5lbF9Xcml0ZVN0b3ApOw0KKw0KKy8vN6GitsGhotC0uq/K/bLOv7yjuw0KK1NJTlQzMiB6RHJ2Vm9sdGVfa2VybmVsX1JlYWRPbmVGcmFtZShVSU5UOCAqcEJ1ZikNCit7DQorDQorCWludCByZWFkX2J5dGVzID0gMDsNCisJaWYodm9sdGVfa2VybmVsX2RldmZkID09IFZPTFRFX0tFUk5FTF9ERVZfSU5WQUxJRF9JRCkNCisJew0KKwkJcHJpbnRrKCJ6RHJ2Vm9sdGVfUmVhZE9uZUZyYW1lIGZhaWxcbiIpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KKwltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7DQorDQorCXNldF9mcyhLRVJORUxfRFMpOw0KKwlyZWFkX2J5dGVzID0ga2VybmVsX3N5c19yZWFkKHZvbHRlX2tlcm5lbF9kZXZmZCwgcEJ1Ziwgdm9sdGVfa2VybmVsX2J1Zl9sZW50aCk7DQorCWlmKHJlYWRfYnl0ZXMgPD0gMCkNCisJew0KKwkJcHJpbnRrKCJ6RHJ2Vm9sdGVfUmVhZE9uZUZyYW1lIHJlYWRfYnl0ZXMgZmFpbFxuIik7DQorCQlzZXRfZnMob2xkX2ZzKTsNCisNCisJCXJldHVybiBEUlZfRVJST1I7DQorCX0NCisJZWxzZXsNCisJCS8vcHJpbnRrKCJ6RHJ2Vm9sdGVfUmVhZE9uZUZyYW1lIGZpcnN0IHJlYWRfYnl0ZXMgaXMgJWRcbiIscmVhZF9ieXRlcyk7DQorDQorICAgICAgICAgICAgICByeF9jb3VudCArKzsNCisJICAgICAgIGlmKHJ4X2NvdW50ID09IDQwKSB7DQorCQkgICAJcHJpbnRrKCJ6RHJ2Vm9sdGVfUmVhZE9uZUZyYW1lIHJlYWRfYnl0ZXMgaXMgJWRcbiIscmVhZF9ieXRlcyk7DQorCQkgICByeF9jb3VudCA9IDA7DQorCSAgICAgICB9DQorCQlzZXRfZnMob2xkX2ZzKTsNCisNCisJCXJldHVybiBEUlZfU1VDQ0VTUzsNCisJCX0NCit9DQorDQorRVhQT1JUX1NZTUJPTCh6RHJ2Vm9sdGVfa2VybmVsX1JlYWRPbmVGcmFtZSk7DQorDQorDQorU0lOVDMyIHpEcnZWb2x0ZV9rZXJuZWxfV3JpdGVPbmVGcmFtZShVSU5UOCAqcEJ1ZikgDQorew0KKw0KKwlpZih2b2x0ZV9rZXJuZWxfZGV2ZmQgPT0gVk9MVEVfS0VSTkVMX0RFVl9JTlZBTElEX0lEKQ0KKwl7DQorCQlwcmludGsoInpEcnZWb2x0ZV9Xcml0ZU9uZUZyYW1lIGZhaWxcbiIpOw0KKwkJcmV0dXJuIERSVl9FUlJPUjsNCisJfQ0KKwkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOw0KKw0KKwkgICAgICAgc2V0X2ZzKEtFUk5FTF9EUyk7DQorDQorCQlpZihrZXJuZWxfc3lzX3dyaXRlKHZvbHRlX2tlcm5lbF9kZXZmZCwgcEJ1Ziwgdm9sdGVfa2VybmVsX2J1Zl9sZW50aCkgPD0wKQ0KKwkJew0KKwkJICAJc2V0X2ZzKG9sZF9mcyk7DQorCQkgICAgICAgcHJpbnRrKCJ6RHJ2Vm9sdGVfV3JpdGVPbmVGcmFtZSB3cml0ZSBmYWlsXG4iKTsNCisJCQlyZXR1cm4gRFJWX0VSUk9SOw0KKwkJfWVsc2V7DQorICAgICAgICAgICAgICAgICAgICAgICAgdHhfY291bnQgKys7DQorCSAgICAgICAgICAgICAgICAgaWYodHhfY291bnQgPT0gNDApIHsNCisJICAgICAgICAgICAgICAgICAgcHJpbnRrKCJ6RHJ2Vm9sdGVfV3JpdGVPbmVGcmFtZSBzdWNjZXNzISFcbiIpOw0KKwkJICAgICAgICAgIHR4X2NvdW50ID0gMDt9DQorDQorCQkgICAgICAgIHNldF9mcyhvbGRfZnMpOw0KKw0KKwkJICAgICAgICByZXR1cm4gRFJWX1NVQ0NFU1M7DQorCQl9DQorDQorfQ0KKw0KK0VYUE9SVF9TWU1CT0woekRydlZvbHRlX2tlcm5lbF9Xcml0ZU9uZUZyYW1lKTsNCisNCisjaWYgMA0KK7b+oaK907/atffTw8uz0PINCisNCisgMaGiU0lOVDMyIHpEcnZWb2x0ZV9PcGVuKFRfWkRydlZvbHRlX0NmZyAqY2ZnUGFyYW0pICAvL7Tyv6q78cih18rUtA0KKw0KK7bBysewtNXVMi4xoaIzLjGhojQuMbXEy7O199PDo7sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQtMrHsLTV1TIuMqGiMy4yoaI0LjK1xMuztffTw6O7DQorMi4xoaIgU0lOVDMyIHpEcnZWb2x0ZV9SZWFkU3RhcnQoVk9JRCkgIC8vtsHKucTcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMqGiIFNJTlQzMiB6RHJ2Vm9sdGVfV3JpdGVTdGFydChWT0lEKSAgLy/QtMq5xNwgICAgIA0KKw0KKzMuMaGiIFNJTlQzMiB6RHJ2Vm9sdGVfUmVhZE9uZUZyYW1lKFVJTlQ4ICpwQnVmKS8vtsHK/b7dICAgICAgICAgICAgICAgICAgICAgICAzLjKholNJTlQzMiB6RHJ2Vm9sdGVfV3JpdGVPbmVGcmFtZShVSU5UOCAqcEJ1ZikgLy/QtMr9vt0gICAgICAgDQorDQorNC4xoaIgU0lOVDMyIHpEcnZWb2x0ZV9SZWFkU3RvcChWT0lEKSAvL7bByv2+3b3hyvi199PDICAgICAgICAgICAgICAgICAgICAgICAgIDQuMqGiU0lOVDMyIHpEcnZWb2x0ZV9Xcml0ZVN0b3AoVk9JRCkgLy/QtMr9vt294cr4tffTwyANCisNCisNCis1oaIgU0lOVDMyIHpEcnZWb2x0ZV9DbG9zZShWT0lEKSAvL7nYsdXKzbfF18rUtA0KKw0KKw0KK9eio7rJz8r2yse4+b7ddm9sdGXNqLuwyrXP1rT6wuvV+8DttcSxvsa9zKhWb0lQuabE3MTausvKtc/Wss6/vLT6wuujrLTy06G6r8r9uMTOqsTausu6r8r9o6y34tewuq/K/cP719a/zbunv8nS1Lj5vt3Q6NKq0N64xKGjDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvdm9sdGVfa2VybmVsLmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3ZvbHRlX2tlcm5lbC92b2x0ZV9rZXJuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNjZlOWJhCi0tLSAvZGV2L251bGwKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvdm9sdGVfa2VybmVsLmgKQEAgLTAsMCArMSw0NSBAQAorLy/Su6GitPrC68q1z9ayzr+8oaMNCisvLzGhotL908PNt87EvP4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC92b2x0ZV9kcnYuaD4NCisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4NCisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4NCisNCit0eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgU0lOVDMyOw0KK3R5cGVkZWYgdW5zaWduZWQgY2hhciAJVUlOVDg7DQorDQorZXh0ZXJuIFNJTlQzMiB6RHJ2Vm9sdGVfa2VybmVsX1JlYWRTdGFydChWT0lEKTsNCisNCitleHRlcm4gU0lOVDMyIHpEcnZWb2x0ZV9rZXJuZWxfQ2xvc2UoVk9JRCk7IA0KKw0KKw0KK2V4dGVybiBTSU5UMzIgekRydlZvbHRlX2tlcm5lbF9Xcml0ZU9uZUZyYW1lKFVJTlQ4ICpwQnVmKTsgDQorZXh0ZXJuIFNJTlQzMiAgekRydlZvbHRlX2tlcm5lbF9SZWFkT25lRnJhbWUoVUlOVDggKnBCdWYpOw0KKw0KK2V4dGVybiBTSU5UMzIgekRydlZvbHRlX2tlcm5lbF9PcGVuKFRfWkRydlZvbHRlX0NmZyAqY2ZnUGFyYW0pOyANCisNCisNCitleHRlcm4gU0lOVDMyIHpEcnZWb2x0ZV9rZXJuZWxfV3JpdGVTdGFydChWT0lEKTsNCitleHRlcm4gU0lOVDMyIHpEcnZWb2x0ZV9rZXJuZWxfV3JpdGVTdG9wKFZPSUQpOw0KKw0KK2V4dGVybiBsb25nIGtlcm5lbF9zeXNfcmVhZCh1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCk7DQorZXh0ZXJuIGxvbmcga2VybmVsX3N5c193cml0ZSh1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCk7DQorZXh0ZXJuIGxvbmcga2VybmVsX3N5c19jbG9zZSh1bnNpZ25lZCBpbnQgZmQpOw0KKworZXh0ZXJuIGxvbmcga2VybmVsX3N5c19vcGVuKGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwNCisJCQkJaW50IGZsYWdzLCB1bW9kZV90IG1vZGUpOw0KKw0KK2V4dGVybiBsb25nIGtlcm5lbF9zeXNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLA0KKwkJCQl1bnNpZ25lZCBsb25nIGFyZyk7DQorDQorDQorDQorDQorDQorDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvdm9sdGVfa2VybmVsLm1vZC5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvdm9sdGVfa2VybmVsLm1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlMmYwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3ZvbHRlX2tlcm5lbC92b2x0ZV9rZXJuZWwubW9kLmMKQEAgLTAsMCArMSwzNSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Zlcm1hZ2ljLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworTU9EVUxFX0lORk8odmVybWFnaWMsIFZFUk1BR0lDX1NUUklORyk7CisKK3N0cnVjdCBtb2R1bGUgX190aGlzX21vZHVsZQorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmdudS5saW5rb25jZS50aGlzX21vZHVsZSIpKSkgPSB7CisgLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKKyAuYXJjaCA9IE1PRFVMRV9BUkNIX0lOSVQsCit9OworCitNT0RVTEVfSU5GTyhpbnRyZWUsICJZIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvIF9fX192ZXJzaW9uc1tdCitfX3VzZWQKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyc2lvbnMiKSkpID0geworCXsgMHhjMjQ1N2ExZiwgIm1vZHVsZV9sYXlvdXQiIH0sCisJeyAweDI3ZTFhMDQ5LCAicHJpbnRrIiB9LAorCXsgMHgzNDU3M2RlMSwgImtlcm5lbF9zeXNfY2xvc2UiIH0sCisJeyAweDIxY2ZkMjhlLCAiY3VycmVudF9rZXJuZWxfdGhyZWFkIiB9LAorCXsgMHhhZDJhYjc2ZiwgImtlcm5lbF9zeXNfcmVhZCIgfSwKKwl7IDB4Mzc1OGNmMDAsICJrZXJuZWxfc3lzX2lvY3RsIiB9LAorCXsgMHgzZjg3MDg3MSwgImtlcm5lbF9zeXNfb3BlbiIgfSwKKwl7IDB4ZWZkNmNmMDYsICJfX2FlYWJpX3Vud2luZF9jcHBfcHIwIiB9LAorCXsgMHg1YmQ4YjA4MSwgImtlcm5lbF9zeXNfd3JpdGUiIH0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciBfX21vZHVsZV9kZXBlbmRzW10KK19fdXNlZAorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLm1vZGluZm8iKSkpID0KKyJkZXBlbmRzPSI7CisKKworTU9EVUxFX0lORk8oc3JjdmVyc2lvbiwgIjlEMzYyNTJDRTk3RTg4MDlFRDg2MTM5Iik7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3ZvbHRlX2tlcm5lbC92b2x0ZV9rZXJuZWxfdGVzdC5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvdm9sdGVfa2VybmVsX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMmQ4NzgzCi0tLSAvZGV2L251bGwKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvdm9sdGVfa2VybmVsX3Rlc3QuYwpAQCAtMCwwICsxLDI0OSBAQAorLyoNCisgKiBaVEUgZGRyIGRyaXZlcg0KKyAqDQorICogQ29weXJpZ2h0IChDKSAyMDEzIFpURSBMdGQuDQorICogCWJ5IHRzcA0KKyAqDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8bGludXgvaW8uaD4NCisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+DQorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3p4X3NvZnRfd2R0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4JLyogRm9yIGhhbmRsaW5nIG1pc2MgZGV2aWNlcyAqLw0KKyNpbmNsdWRlIDxsaW51eC9zb2MvenRlL3JwbS9ycG1zZy5oPiAvKiBGb3IgaWNwIG9wZXJhdGlvbiovDQorI2luY2x1ZGUgPGxpbnV4L3ZvbHRlX2Rydi5oPg0KKyNpbmNsdWRlIDx2b2x0ZV9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPg0KKw0KKw0KKyNkZWZpbmUgRFJWX1NVQ0NFU1MgMA0KKyNkZWZpbmUgRFJWX0VSUk9SICgtMSkNCisNCitpbnQgcXVpdF90eF9yeCA9IDE7DQorDQorDQoraW50IHF1aXRfcnggPSAxOw0KK2ludCBxdWl0X3R4ID0gMTsNCitzdGF0aWMgaW50IHZvbHRlX2tlcm5lbF9yeF90aHJlYWRfZnVuYyhWT0lEKQ0KK3sNCisgICAgU0lOVDMyIHN0YXR1czsNCisgICAgY2hhciBidWZbNjQwXTsNCisJcHJpbnRrKCJ5YW5taW5nIHZvbHRlX2tlcm5lbF9yeF90aHJlYWRfZnVuYyBlbnRlclxuIik7DQorDQorCSNpZiAwDQorICAgVF9aRHJ2Vm9pY2VfQ2ZnIGNmZyA9IHsxNjAwMCwxLDMyMCwxNiwwfTsNCisNCisgICAgc3RhdHVzID0gekRydlZvbHRlX1J4X09wZW4oJmNmZyk7DQorICAgIGlmIChzdGF0dXMgIT0gMCkgew0KKyAgICBwcmludGsoInlhbm1pbmcgekRydlZvbHRlX1J4X09wZW46IGZhaWxlZCEhISEhXG4iKTsNCisgICAgcmV0dXJuOw0KKyAgICB9DQorICAgDQorDQorICAgIHN0YXR1cyA9IHpEcnZWb2x0ZV9SZWFkU3RhcnQoKTsNCisgICAgaWYoc3RhdHVzICE9IERSVl9TVUNDRVNTKSANCisgICAgew0KKyAgICAgICAgcHJpbnRrKCJ5YW5taW5nIHpEcnZWb2x0ZV9SZWFkU3RhcnQgZmFpbFxuIik7DQorICAgICAgICByZXR1cm4gRFJWX0VSUk9SOw0KKyAgICB9DQorCSNlbmRpZg0KKw0KKyAgICAgICBxdWl0X3J4ID0gMDsNCisNCisJDQorDQorCXdoaWxlICghcXVpdF9yeCkgDQorCXsNCisNCisJCXN0YXR1cyA9IHpEcnZWb2x0ZV9rZXJuZWxfUmVhZE9uZUZyYW1lKChVSU5UOCopYnVmKTsNCisJDQorCQlpZihzdGF0dXMgIT0gRFJWX1NVQ0NFU1MpIA0KKwkJew0KKwkJCXByaW50aygieWFubWluZyB6RHJ2Vm9sdGVfUmVhZE9uZUZyYW1lIGZhaWxcbiIpOw0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKw0KKwl9DQorCXJldHVybiBEUlZfU1VDQ0VTUzsNCit9DQorDQorDQorDQorDQorc3RhdGljIGludCB2b2x0ZV9rZXJuZWxfdHhfdGhyZWFkX2Z1bmMoVk9JRCkNCit7DQorICAgIFNJTlQzMiBzdGF0dXM7DQorICAgIGNoYXIgYnVmWzY0MF0gPSAiIjsNCisJcHJpbnRrKCJ5YW5taW5nIHZvbHRlX2tlcm5lbF90eF90aHJlYWRfZnVuYyBlbnRlclxuIik7DQorCSNpZiAwDQorICAgIFRfWkRydlZvaWNlX0NmZyBjZmcgPSB7MTYwMDAsMSwzMjAsMTYsMH07DQorDQorICAgIHN0YXR1cyA9IHpEcnZWb2x0ZV9UeF9PcGVuKCZjZmcpOw0KKyAgICBpZiAoc3RhdHVzICE9IDApIHsNCisgICAgcHJpbnRrKCJ5YW5taW5nIHpEcnZWb2x0ZV9UeF9PcGVuOiBmYWlsZWQhISEhIVxuIik7DQorICAgIHJldHVybjsNCisgICAgfQ0KKyAgICANCisgICAgc3RhdHVzID0gekRydlZvbHRlX1dyaXRlU3RhcnQoKTsNCisgICAgaWYoc3RhdHVzICE9IERSVl9TVUNDRVNTKSANCisgICAgew0KKyAgICAgICAgcHJpbnRrKCJ5YW5taW5nIHpEcnZWb2x0ZV9Xcml0ZVN0YXJ0IGZhaWxcbiIpOw0KKyAgICAgICAgcmV0dXJuIERSVl9FUlJPUjsNCisgICAgfQ0KKwkjZW5kaWYNCisNCisgICAgICAgcXVpdF90eCA9IDA7DQorDQorCQ0KKw0KKwl3aGlsZSAoIXF1aXRfdHgpIA0KKwl7DQorDQorCQlzdGF0dXMgPSB6RHJ2Vm9sdGVfa2VybmVsX1dyaXRlT25lRnJhbWUoKFVJTlQ4KilidWYpOw0KKwkJaWYoc3RhdHVzICE9IERSVl9TVUNDRVNTKSANCisJCXsNCisJCQlwcmludGsoInlhbm1pbmcgekRydlZvbHRlX1dyaXRlT25lRnJhbWUgZmFpbFxuIik7DQorCQkJY29udGludWU7DQorCQl9DQorDQorCX0NCisJDQorCXJldHVybiBEUlZfU1VDQ0VTUzsNCit9DQorDQorDQorc3RhdGljIGludCB2b2x0ZV9rZXJuZWxfdHhfcnhfdGhyZWFkX2Z1bmMoVk9JRCkNCit7DQorICAgIFNJTlQzMiBzdGF0dXM7DQorICAgIGNoYXIgYnVmX3J4WzY0MF07DQorICAgIGNoYXIgYnVmX3R4WzY0MF0gPSAiIjsNCisNCisJI2lmIDENCisgIC8vIFRfWkRydlZvaWNlX0NmZyBjZmcgPSB7MTYwMDAsMSwzMjAsMTYsMH07DQorCSAgICBUX1pEcnZWb2ljZV9DZmcgY2ZnID0gezgwMDAsMSw4MCwxNiwwfTsNCisNCisNCisgICAgc3RhdHVzID0gekRydlZvbHRlX2tlcm5lbF9PcGVuKCZjZmcpOw0KKyAgICBpZiAoc3RhdHVzICE9IDApIHsNCisgICAgcHJpbnRrKCJ5YW5taW5nIHpEcnZWb2x0ZV9PcGVuOiBmYWlsZWQhISEhIVxuIik7DQorICAgIHJldHVybjsNCisgICAgfQ0KKyAgICAgLy9wcmludGsoInpEcnZWb2x0ZV9rZXJuZWxfT3BlblxuIik7DQorDQorDQorICAgIHN0YXR1cyA9IHpEcnZWb2x0ZV9rZXJuZWxfUmVhZFN0YXJ0KCk7DQorDQorICAgIGlmKHN0YXR1cyAhPSBEUlZfU1VDQ0VTUykgDQorICAgIHsNCisgICAgICAgIHByaW50aygieWFubWluZyB6RHJ2Vm9sdGVfUmVhZFN0YXJ0IGZhaWxcbiIpOw0KKyAgICAgICAgcmV0dXJuIERSVl9FUlJPUjsNCisgICAgfQ0KKyAgICAgLy9wcmludGsoInpEcnZWb2x0ZV9rZXJuZWxfUmVhZFN0YXJ0XG4iKTsNCisNCisJIHN0YXR1cyA9IHpEcnZWb2x0ZV9rZXJuZWxfV3JpdGVTdGFydCgpOw0KKw0KKyAgICBpZihzdGF0dXMgIT0gRFJWX1NVQ0NFU1MpIA0KKyAgICB7DQorICAgICAgICBwcmludGsoInlhbm1pbmcgekRydlZvbHRlX1dyaXRlU3RhcnQgZmFpbFxuIik7DQorICAgICAgICByZXR1cm4gRFJWX0VSUk9SOw0KKyAgICB9DQorCSAgICAgLy9wcmludGsoInpEcnZWb2x0ZV9rZXJuZWxfV3JpdGVTdGFydFxuIik7DQorDQorCSNlbmRpZg0KKw0KKyAgICAgICBxdWl0X3R4X3J4ID0gMDsNCisNCisJDQorDQorCXdoaWxlICghcXVpdF90eF9yeCkgDQorCXsNCisNCisJCXN0YXR1cyA9IHpEcnZWb2x0ZV9rZXJuZWxfUmVhZE9uZUZyYW1lKChVSU5UOCopYnVmX3J4KTsNCisNCisJDQorCQlpZihzdGF0dXMgIT0gRFJWX1NVQ0NFU1MpIA0KKwkJew0KKwkJCXByaW50aygieWFubWluZyB6RHJ2Vm9sdGVfUmVhZE9uZUZyYW1lIGZhaWxcbiIpOw0KKwkJCS8vY29udGludWU7DQorCQl9DQorICAgICAgICAgICAgIAkgICAvLyBwcmludGsoInpEcnZWb2x0ZV9rZXJuZWxfUmVhZE9uZUZyYW1lXG4iKTsNCisNCisJCXN0YXR1cyA9IHpEcnZWb2x0ZV9rZXJuZWxfV3JpdGVPbmVGcmFtZSgoVUlOVDgqKWJ1Zl90eCk7DQorDQorCQ0KKwkJaWYoc3RhdHVzICE9IERSVl9TVUNDRVNTKSANCisJCXsNCisJCQlwcmludGsoInlhbm1pbmcgekRydlZvbHRlX1dyaXRlT25lRnJhbWUgZmFpbFxuIik7DQorCQkJLy9jb250aW51ZTsNCisJCX0NCisJCSAgICAgIC8vIHByaW50aygiekRydlZvbHRlX2tlcm5lbF9Xcml0ZU9uZUZyYW1lXG4iKTsNCisNCisNCisNCisJfQ0KKwlyZXR1cm4gRFJWX1NVQ0NFU1M7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHZvbHRlX2tlcm5lbF9pbml0ICh2b2lkKQ0KK3sNCisJDQorICAgIA0KKwlzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0CSpoYW5kbGVfdHhfcnhfdGhyZWFkOw0KKw0KKwloYW5kbGVfdHhfcnhfdGhyZWFkICA9IGt0aHJlYWRfcnVuKHZvbHRlX2tlcm5lbF90eF9yeF90aHJlYWRfZnVuYywgMSwgInZvbHRlX2tlcm5lbF90eF9yeF90aHJlYWQiKTsNCisjaWYgMA0KKwlTSU5UMzIgc3RhdHVzOw0KKw0KKyAgICAvL1RfWkRydlZvaWNlX0NmZyBjZmcgPSB7MTYwMDAsMSwzMjAsMTYsMH07DQorICAgIFRfWkRydlZvaWNlX0NmZyBjZmcgPSB7ODAwMCwxLDgwLDE2LDB9Ow0KKw0KKyAgICBzdGF0dXMgPSB6RHJ2Vm9sdGVfa2VybmVsX09wZW4oJmNmZyk7DQorICAgIGlmIChzdGF0dXMgIT0gMCkgew0KKyAgICBwcmludGsoInlhbm1pbmcgekRydlZvbHRlX2tlcm5lbF9PcGVuOiBmYWlsZWQhISEhIVxuIik7DQorICAgIHJldHVybjsNCisgICAgfQ0KKyAgICANCisgICAgc3RhdHVzID0gekRydlZvbHRlX2tlcm5lbF9Xcml0ZVN0YXJ0KCk7DQorICAgIGlmKHN0YXR1cyAhPSBEUlZfU1VDQ0VTUykgDQorICAgIHsNCisgICAgICAgIHByaW50aygieWFubWluZyB6RHJ2Vm9sdGVfa2VybmVsX1dyaXRlU3RhcnQgZmFpbFxuIik7DQorICAgICAgICByZXR1cm4gRFJWX0VSUk9SOw0KKyAgICB9DQorDQorCXN0YXR1cyA9IHpEcnZWb2x0ZV9rZXJuZWxfUmVhZFN0YXJ0KCk7DQorICAgIGlmKHN0YXR1cyAhPSBEUlZfU1VDQ0VTUykgDQorICAgIHsNCisgICAgICAgIHByaW50aygieWFubWluZyB6RHJ2Vm9sdGVfa2VybmVsX1JlYWRTdGFydCBmYWlsXG4iKTsNCisgICAgICAgIHJldHVybiBEUlZfRVJST1I7DQorICAgIH0NCisNCisNCisgICAgICAga2VybmVsX3RocmVhZCh2b2x0ZV9rZXJuZWxfdHhfdGhyZWFkX2Z1bmMsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBTSUdDSExEKTsNCisgICAgCWtlcm5lbF90aHJlYWQodm9sdGVfa2VybmVsX3J4X3RocmVhZF9mdW5jLCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgU0lHQ0hMRCk7DQorCQkjZW5kaWYNCisNCisJcHJpbnRrKCJ2b2x0ZV9rZXJuZWxfaW5pdCBlbmRcbiIpOw0KKw0KKw0KK30NCisNCitzdGF0aWMgdm9pZCBfX2V4aXQgdm9sdGVfa2VybmVsX2V4aXQodm9pZCkNCit7DQorICAgIC8vbWlzY19kZXJlZ2lzdGVyKCZ6eF9kZHJfbWlzY2Rldik7DQorICAgIHByaW50aygidm9sdGVfa2VybmVsX2V4aXRcbiIpOw0KK30NCisNCisNCittb2R1bGVfaW5pdCh2b2x0ZV9rZXJuZWxfaW5pdCk7DQorbW9kdWxlX2V4aXQodm9sdGVfa2VybmVsX2V4aXQpOw0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdm9sdGVfa2VybmVsL3ZvbHRlX2tlcm5lbF90ZXN0Lm1vZC5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy92b2x0ZV9rZXJuZWwvdm9sdGVfa2VybmVsX3Rlc3QubW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjBmMDE0MwotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdm9sdGVfa2VybmVsL3ZvbHRlX2tlcm5lbF90ZXN0Lm1vZC5jCkBAIC0wLDAgKzEsNDIgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJtYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKK01PRFVMRV9JTkZPKHZlcm1hZ2ljLCBWRVJNQUdJQ19TVFJJTkcpOworCitzdHJ1Y3QgbW9kdWxlIF9fdGhpc19tb2R1bGUKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5nbnUubGlua29uY2UudGhpc19tb2R1bGUiKSkpID0geworIC5uYW1lID0gS0JVSUxEX01PRE5BTUUsCisgLmluaXQgPSBpbml0X21vZHVsZSwKKyNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAorIC5leGl0ID0gY2xlYW51cF9tb2R1bGUsCisjZW5kaWYKKyAuYXJjaCA9IE1PRFVMRV9BUkNIX0lOSVQsCit9OworCitNT0RVTEVfSU5GTyhpbnRyZWUsICJZIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvIF9fX192ZXJzaW9uc1tdCitfX3VzZWQKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyc2lvbnMiKSkpID0geworCXsgMHhjMjQ1N2ExZiwgIm1vZHVsZV9sYXlvdXQiIH0sCisJeyAweGVmZDZjZjA2LCAiX19hZWFiaV91bndpbmRfY3BwX3ByMCIgfSwKKwl7IDB4NDkwMWM4ZDgsICJ3YWtlX3VwX3Byb2Nlc3MiIH0sCisJeyAweDc0M2Q1NzcsICJrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlIiB9LAorCXsgMHgyZTU4MTBjNiwgIl9fYWVhYmlfdW53aW5kX2NwcF9wcjEiIH0sCisJeyAweDc2ZTAwOTZlLCAiekRydlZvbHRlX2tlcm5lbF9Xcml0ZU9uZUZyYW1lIiB9LAorCXsgMHhiNmUwNWRlNCwgInpEcnZWb2x0ZV9rZXJuZWxfUmVhZE9uZUZyYW1lIiB9LAorCXsgMHgzNjU0YjJiZSwgInpEcnZWb2x0ZV9rZXJuZWxfV3JpdGVTdGFydCIgfSwKKwl7IDB4M2MwNGIxNjYsICJ6RHJ2Vm9sdGVfa2VybmVsX1JlYWRTdGFydCIgfSwKKwl7IDB4MjdlMWEwNDksICJwcmludGsiIH0sCisJeyAweGJmYmIwNDhhLCAiekRydlZvbHRlX2tlcm5lbF9PcGVuIiB9LAorCXsgMHg1Zjc1NGU1YSwgIm1lbXNldCIgfSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIF9fbW9kdWxlX2RlcGVuZHNbXQorX191c2VkCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIubW9kaW5mbyIpKSkgPQorImRlcGVuZHM9dm9sdGVfa2VybmVsIjsKKworCitNT0RVTEVfSU5GTyhzcmN2ZXJzaW9uLCAiOEVEMjdBRkYyRDY0OUYxMTdGNUI3RkUiKTsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2ZzL2pmZnMyL2JhY2tncm91bmQuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2ZzL2pmZnMyL2JhY2tncm91bmQuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDJlNTQ2ZTEuLjNkZTU1MjUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZnMvamZmczIvYmFja2dyb3VuZC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2ZzL2pmZnMyL2JhY2tncm91bmQuYwpAQCAtMTA1LDggKzEwNSwxMSBAQAogCUJVR19PTihwYXJ0aXRpb25fbm8gPj0gc2l6ZW9mKGpmZnMyX3F1aWNrX2djX210ZCkvc2l6ZW9mKGpmZnMyX3F1aWNrX2djX210ZFswXSkpOwogCiAJLy9wcmludGsoS0VSTl9BTEVSVCAiW3pncF1zeXNjYWxsICVzIHdhaXQgZG9uZSBHQ1xuICIsIGpmZnMyX3F1aWNrX2djX210ZFtwYXJ0aXRpb25fbm9dLm5hbWUpOwotCisjaWZkZWYgX1VTRV9WRUhJQ0xFX0RDCisJcmV0dXJuIDE7CisjZWxzZQogCXJldHVybiBxdWlja19nY193YWl0X2RvbmUoamZmczJfcXVpY2tfZ2NfbXRkW3BhcnRpdGlvbl9ub10ubmFtZSk7CisjZW5kaWYKIH0KIAogdm9pZCBqZmZzMl9xdWlja19nY19kb25lKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L0tidWlsZApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDdlOWJmMGIuLmYwOTgxNWUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTQxNSwzICs0MTUsNSBAQAogaGVhZGVyLXkgKz0gYW1yX2Rydi5oCiBoZWFkZXIteSArPSBzZW5zb3IuaAogaGVhZGVyLXkgKz0gdWljY19hZ3RfY2xpZW50LmgKKworaGVhZGVyLXkgKz0gY3Budi5oCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L2FuZHJvaWRfbm90aWZ5LmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L2FuZHJvaWRfbm90aWZ5LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4NWU1YzUyLi44YWM0ZmU5Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvYW5kcm9pZF9ub3RpZnkuaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L2FuZHJvaWRfbm90aWZ5LmgKQEAgLTk4LDYgKzk4LDggQEAKIAlVU0JfUlBNU0dfT1BFTl9ETCwNCiAJVVNCX1JQTVNHX0NMT1NFX0RMLA0KIAlVU0JfUlBNU0dfU0lNVUxBVEVfUExVRywNCisJVVNCX1JQTVNHX1VTQl9QTFVHX0lOLA0KKwlVU0JfUlBNU0dfVVNCX1BMVUdfT1VULA0KIAlVU0JfUlBNU0dfTk9USUZZX01BWCwNCiB9ZV91c2JfcnBtc2dfY21kX3R5cGU7DQogDQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9sem8uaCBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvbHpvLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBhMDg0OGQ5Li43MjM0ZTg4Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvbHpvLmgKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9sem8uaApAQCAtMTMsNyArMTMsNyBAQAogICogIE5pdGluIEd1cHRhIDxuaXRpbmd1cHRhOTEwQGdtYWlsLmNvbT4KICAqICBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KICAqLwotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNkZWZpbmUgTFpPMVhfMV9NRU1fQ09NUFJFU1MJKDgxOTIgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKQogI2RlZmluZSBMWk8xWF9NRU1fQ09NUFJFU1MJTFpPMVhfMV9NRU1fQ09NUFJFU1MKIApkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IDI0ZDExZmMuLjA1N2M4OTYgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTU3MSw2ICs1NzEsNyBAQAogI2RlZmluZSBOQU5EX01GUl9FTVNUCQkJMHhDOAogI2RlZmluZSBOQU5EX01GUl9GT1JFU0VFCQkweENECiAjZGVmaW5lIE5BTkRfTUZSX1hUWAkJMHgwQgorI2RlZmluZSBOQU5EX01GUl9VTklNCQkweEIwCiAKICNkZWZpbmUgTkFORF9ERVZJRF9FTVNUX0Y1MEQxRzQxTEJfMUcgMHgxMQogCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L25ldC5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCBmMzIzYjdkLi5kYWY2ZTFlIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTE1MSw2ICsxNTEsNyBAQAogI2lmZGVmIENPTkZJR19JUENfU09DS0VUCiAJaW50IGZkOwogCXN0cnVjdCBobGlzdF9oZWFkIHBlZXI7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogI2VuZGlmCiAJc3RydWN0IHNvY2sJCSpzazsKIAljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzCSpvcHM7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3JhbWR1bXAvcmFtZHVtcF9jb21wcmVzcy5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9yYW1kdW1wL3JhbWR1bXBfY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMmYxZmJkCi0tLSAvZGV2L251bGwKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9yYW1kdW1wL3JhbWR1bXBfY29tcHJlc3MuaApAQCAtMCwwICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogsObIqMv509AgKEMpMjAxNiwg1tDQy82o0ba5ybfd09DP3rmry76how0KKyogDQorKiDOxLz+w/uzxjogICAgIHJhbWR1bXBfY29tcHJlc3MuaA0KKyogzsS8/rHqyrY6ICAgICByYW1kdW1wX2NvbXByZXNzLmgNCisqIMTayN3VqtKqOiAgICAgcmFtZHVtcLSmwO3G98/gudi907/aL8r9vt294bm5tqjS5c23zsS8/g0KKyogyrnTw7e9t6g6ICAgICANCisqIA0KKyog0N64xMjVxtogICAgICAgILDmsb66xSAgICAgINDeuMSx6rzHICAgICAgICDQ3rjEyMsgICAgICAgICAg0N64xMTayN0NCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyogMjAxNi8zLzEwICAgICAgVjEuMCAgICAgICAgQ3JlYXRlICAgICAgICAgICDV1L78v/wgICAgICAgICAgtLS9qA0KKyogDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjaWZuZGVmIF9SQU1EVU1QX0NPTVBSRVNTX0gNCisjZGVmaW5lIF9SQU1EVU1QX0NPTVBSRVNTX0gNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM23zsS8/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM3isr+6r8r9yfnD9yAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgILrqtqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMr9vt3A4NDNtqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMirvtax5MG/yfnD9yAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMirvta6r8r9yfnD9yAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitpbnQgcmFtZHVtcF9sem9fY29tcHJlc3ModW5zaWduZWQgY2hhciAqZGF0YV9pbiwgc2l6ZV90IGluX2xlbiwgDQorCQkJCXVuc2lnbmVkIGNoYXIgKmRhdGFfb3V0LCBzaXplX3QgKm91dF9sZW4pOw0KKw0KK2ludCByYW1kdW1wX2x6b19kZWNvbXByZXNzKHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4sIHNpemVfdCBpbl9sZW4sIA0KKwkJCQl1bnNpZ25lZCBjaGFyICpkYXRhX291dCwgc2l6ZV90ICpvdXRfbGVuKTsNCisNCitpbnQgcmFtZHVtcF9sem9faW5pdCh2b2lkKTsNCisNCisjZW5kaWYgIC8vI2lmbmRlZiBfUkFNRFVNUF9DT01QUkVTU19IDQorDQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9yYW1kdW1wL3JhbWR1bXBfb3NzLmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3JhbWR1bXAvcmFtZHVtcF9vc3MuaAppbmRleCBlNGNiODYyLi5mMDVmOTk2IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3JhbWR1bXAvcmFtZHVtcF9vc3MuaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3JhbWR1bXAvcmFtZHVtcF9vc3MuaApAQCAtODAsNyArODAsMTUgQEAKICNkZWZpbmUgT1NTX1BSSU5URihmbXQuLi4pIHpPc3NfUHJpbnRmKFNVQk1ETF9URVNULCBQUklOVF9MRVZFTF9OT1JNQUwsIGZtdCkKIAogI2VuZGlmIC8vI2lmZGVmIF9PU19MSU5VWCAKLSNkZWZpbmUgUkFNRFVNUF9FTU1DX1RSQU5TX0ZMQUdfQUREUiAgICAoSVJBTV9CQVNFX0FERFJfWkNBVF9NT0RFKQorI2RlZmluZSBSQU1EVU1QX0VNTUNfVFJBTlNfRkxBR19BRERSICAgIChJUkFNX0JBU0VfQUREUl9SQU1EVU1QX01PREUpCisvKrmyz+3E2rTmtdjWtyovCisjaWZkZWYgX1VTRV9WRUhJQ0xFX0RDCisjZGVmaW5lIFJBTURVTVBfTUVNX0JBU0UgICAgICAgICAgICAgICAgICAgIChSQU1EVU1QX0FQX1RPX0NBUF9CVUZfQUREUl9QQSkKKyNkZWZpbmUgUkFNRFVNUF9NRU1fTEVOICAgICAgICAgICAgICAgICAgICAgKFJBTURVTVBfQVBfVE9fQ0FQX0JVRl9MRU4pCisjZGVmaW5lIFJBTURVTVBfQ09NUFJFU1NfTEVOICAgICAgICAgICAgICAgIChMWk8xWF9NRU1fQ09NUFJFU1MpCisjZGVmaW5lIFJBTURVTVBfU0hBUkVEX01FTV9MRU4JCQkJKFJBTURVTVBfQVBfVE9fQ0FQX0JVRl9MRU4gLSBSQU1EVU1QX0NPTVBSRVNTX0xFTikKKyNkZWZpbmUgUkFNRFVNUF9TSE1FTV9BTElHTl9TSVpFICAgICAgICAgICAgKDB4MTAwMCkKKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyv2+3cDg0M22qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTEzMSw2ICsxMzksOCBAQAogZXh0ZXJuIHZvaWQgcmFtZHVtcF9vc3NfZGF0YV90cmFuc193cml0ZSgKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplKTsKK2V4dGVybiB2b2lkIHJhbWR1bXBfb3NzX2RhdGFfdHJhbnNfd3JpdGVfZGF0YSgKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKTsKIGV4dGVybiB2b2lkIHJhbWR1bXBfb3NzX2RhdGFfdHJhbnNfZG9uZSh2b2lkKTsKIGV4dGVybiB2b2lkIHJhbWR1bXBfb3NzX2Vycm9yX2xvZ19jcmVhdChjaGFyICpidWYpOwogZXh0ZXJuIGludCByYW1kdW1wX29zc19pY3Bfc2VuZCgKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvc29jL3p0ZS9vdHAvb3RwX3p4LmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3NvYy96dGUvb3RwL290cF96eC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwNmNhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3NvYy96dGUvb3RwL290cF96eC5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgT1RQX1pYX0gNCisjZGVmaW5lIE9UUF9aWF9IDQorDQorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+DQorDQorI2RlZmluZSBPVFBfSU9DX01BR0lDICAgICAnTycNCisNCisvKmlvY3RsIGNtZCB1c2QgYnkgZGV2aWNlKi8NCisjZGVmaW5lIE9UUF9HRVRfREFUQQkJCV9JT1dSKE9UUF9JT0NfTUFHSUMsIDEsIGNoYXIgKikNCisjZGVmaW5lIE9UUF9TRVRfU0VDVVJFX0VOCQlfSU9XKE9UUF9JT0NfTUFHSUMsIDIsIGNoYXIgKikNCisjZGVmaW5lIE9UUF9TRVRfUFVCX0tFWV9IQVNICV9JT1coT1RQX0lPQ19NQUdJQywgMywgY2hhciAqKQ0KKyNkZWZpbmUgT1RQX1NFVF9ERVZJQ0VfSUQJCV9JT1coT1RQX0lPQ19NQUdJQywgNCwgY2hhciAqKQ0KKw0KKyNkZWZpbmUgU1BJX05PUl9NQVhfSURfTEVOCTgNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisJdTMyIHB1YktleVs5NV07DQorCXUzMiBzZWN1cmVGbGFnOw0KKwl1MzIgcHViS2V5SGFzaFs4XTsNCisJdTMyIHNlY3VyZURldklkWzNdOw0KK31UX1pEcnZPdHBfU2VjdXJlOw0KKw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgICAgT1RQX1NFQ1VSRV9FTiwNCisJT1RQX1BVQl9LRVlfSEFTSCwNCisJT1RQX0RFVklDRV9JRCwNCisJT1RQX01BWF9FTlVNDQorfUVfWkRydk90cF9TZWN1cmVNc2c7DQorDQorI2VuZGlmDQorDQorc3RydWN0IG5vcl9pbmZvIHsNCisJY2hhcgkJICAgICAgICpuYW1lOw0KKw0KKwl1bnNpZ25lZCBjaGFyCQlpZFtTUElfTk9SX01BWF9JRF9MRU5dOw0KKwl1bnNpZ25lZCBjaGFyCQlpZF9sZW47DQorDQorCXVuc2lnbmVkCSAgICAgICAgc2VjdG9yX3NpemU7DQorCXVuc2lnbmVkIHNob3J0CQluX3NlY3RvcnM7DQorDQorCXVuc2lnbmVkIHNob3J0CQlwYWdlX3NpemU7DQorCXVuc2lnbmVkIHNob3J0CQlhZGRyX3dpZHRoOw0KKw0KKwl1bnNpZ25lZCBzaG9ydAkJZmxhZ3M7DQorI2RlZmluZQlTRUNUXzRLCQkJCTB4MDENCisjZGVmaW5lCVNQSV9OT1JfTk9fRVJBU0UJMHgwMg0KKyNkZWZpbmUJU1NUX1dSSVRFCQkJMHgwNA0KKyNkZWZpbmUJU1BJX05PUl9OT19GUgkJMHgwOA0KKyNkZWZpbmUJU0VDVF80S19QTUMJCQkweDEwDQorI2RlZmluZQlTUElfTk9SX0RVQUxfUkVBRAkweDIwDQorI2RlZmluZQlTUElfTk9SX1FVQURfUkVBRAkweDQwDQorI2RlZmluZQlVU0VfRlNSCQkJCTB4ODANCit9Ow0KKw0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvc29ja2V0X3JwbXNnLmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3NvY2tldF9ycG1zZy5oCmluZGV4IGM2YTkyOTIuLjNmM2VjNGUgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvc29ja2V0X3JwbXNnLmgKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9zb2NrZXRfcnBtc2cuaApAQCAtNzgsNiArNzgsOCBAQAogCU1TR19UWVBFX1NPQ0tfSE9MRCwNCiAJTVNHX1RZUEVfUkVMRUFTRV9QRUVSLA0KIAlNU0dfVFlQRV9OT1RJRllfUFJPWFlfQ0hBTkdFLA0KKwlNU0dfVFlQRV9VTklYX0JJTkQsDQorCU1TR19UWVBFX1VOSVhfVU5CSU5ELA0KIH1zb2NfbXNnX3R5cGU7DQogDQogc3RydWN0IHNvY2tfdGhyZWFkX2luZm8gew0KQEAgLTE5Nyw2ICsxOTksMTIgQEAKIAlzdHJ1Y3Qgc29ja2V0KiBsb2NhbHNvY2tldDsNCiB9Ow0KIA0KK3N0cnVjdCBzb2NrX3N1bmFkZHJfaW5mbw0KK3sNCisJc3RydWN0IGhsaXN0X25vZGUJaGxpc3Rfbm9kZTsNCisJc3RydWN0IHNvY2thZGRyX3VuIHNvY2thZGRyOw0KK307DQorDQogaW50IHNvY2tfc29jX3JlY3ZxX2Z1bGwoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTsNCiBpbnQgc29ja19zb2Nfc2V0X3BlZXIoc3RydWN0IHNvY2sgKnNvY2ssIHN0cnVjdCBzb2NrICpvdGhlcik7DQogaW50IHNvY2tfc29jX3NvY2tfcHV0KHN0cnVjdCBzb2NrICpvdGhlcik7DQpAQCAtMjIyLDYgKzIzMCw4IEBACiB2b2lkIHNvY2tfc29jX3N0YXRlX3VubG9jayhzdHJ1Y3Qgc29jayAqb3RoZXIpOw0KIHZvaWQgc29ja19zb2NfZGVsYXlfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsNCiB2b2lkIHNvY2tfc29jX3NvY2tfaG9sZChzdHJ1Y3Qgc29jayAqb3RoZXIpOw0KK3ZvaWQgc29ja19zb2NfdW5peF9iaW5kKHN0cnVjdCBzb2NrYWRkcl91biAqc3VuYWRkcik7DQordm9pZCBzb2NrX3NvY191bml4X3VuYmluZChzdHJ1Y3Qgc29ja2FkZHJfdW4gKnN1bmFkZHIpOw0KIA0KICNlbmRpZg0KIA0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luaXQvZG9fbW91bnRzLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbml0L2RvX21vdW50cy5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggN2YxMTJiZC4uNTgwNzA1YwotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbml0L2RvX21vdW50cy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luaXQvZG9fbW91bnRzLmMKQEAgLTIwLDggKzIwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzX3NiLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKICNpbmNsdWRlICJkb19tb3VudHMuaCIKKyNpZmRlZiBDT05GSUdfRkxBR1NfVVRJTFMKKyNpbmNsdWRlICJwdWJfZmxhZ3MuaCIKKyNlbmRpZgogCiBpbnQgX19pbml0ZGF0YSByZF9kb2xvYWQ7CS8qIDEgPSBsb2FkIFJBTSBkaXNrLCAwID0gZG9uJ3QgbG9hZCAqLwogCkBAIC0zODQsNiArMzg4LDIwIEBACiAJCXByaW50aygiREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgZW5hYmxlZCwgeW91IG5lZWQgdG8gc3BlY2lmeSAiCiAJCSAgICAgICAiZXhwbGljaXQgdGV4dHVhbCBuYW1lIGZvciBcInJvb3Q9XCIgYm9vdCBvcHRpb24uXG4iKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19GTEFHU19VVElMUworCWV4dGVybiBpbnQgZmxhZ3NfZ2V0KFRfRkxBR1NfSU5GTyAqcF9mbGFnc19pbmZvKTsKKwlleHRlcm4gaW50IGZsYWdzX3NldChUX0ZMQUdTX0lORk8gKnBfZmxhZ3NfaW5mbyk7CisJVF9GTEFHU19JTkZPIGZsYWdzX2luZm87CisJaW50IHJldDsKKwlpZiAocmV0ID0gZmxhZ3NfZ2V0KCZmbGFnc19pbmZvKSA8IDApCisJCXBhbmljKCJWRlM6IFVuYWJsZSBnZXQgZmxhZ3MiKTsKKwlmbGFnc19pbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPSAoZmxhZ3NfaW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNKSA/CisJCURVQUxfU1lTVEVNMiA6IERVQUxfU1lTVEVNOworCWlmIChyZXQgPSBmbGFnc19zZXQoJmZsYWdzX2luZm8pIDwgMCkKKwkJcGFuaWMoIlZGUzogVW5hYmxlIHNldCBmbGFncyIpOworCWVsc2UKKwkJa2VybmVsX3Jlc3RhcnQoIlZGUzogU3dpdGNoIHRvIG90aGVycyBzeXN0ZW0sIHBsZWFzZSByZXNldCBtYWNoaW5lIik7CisjZW5kaWYKIAkJcGFuaWMoIlZGUzogVW5hYmxlIHRvIG1vdW50IHJvb3QgZnMgb24gJXMiLCBiKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9LY29uZmlnIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbGliL0tjb25maWcKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBhZDc3ZmJjLi45YmJjMzdjCi0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9LY29uZmlnCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9LY29uZmlnCkBAIC0zODksNCArMzg5LDEyIEBACiAJICBEaWdpdGFsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uIEN1cnJlbnRseSBvbmx5IFJTQSBpcyBzdXBwb3J0ZWQuCiAJICBJbXBsZW1lbnRhdGlvbiBpcyBkb25lIHVzaW5nIEdudVBHIE1QSSBsaWJyYXJ5CiAKK3NvdXJjZSAibGliL2ZsYWdzX3V0aWxzL0tjb25maWciCisKK2NvbmZpZyBURVNUX0ZMQUdTX1VUSUxTCisJYm9vbCAiVGVzdCBGbGFncyBVdGlscyIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBFbmFibGUgdGVzdCBmbGFncyB1dGlscworCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9saWIvTWFrZWZpbGUgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9saWIvTWFrZWZpbGUKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAwZDg4MjFhLi41MTlkNWUxCi0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9NYWtlZmlsZQorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9saWIvTWFrZWZpbGUKQEAgLTE0OSwzICsxNDksNiBAQAogCiAkKG9iaikvY3JjMzJ0YWJsZS5oOiAkKG9iaikvZ2VuX2NyYzMydGFibGUKIAkkKGNhbGwgY21kLGNyYzMyKQorCitvYmotJChDT05GSUdfRkxBR1NfVVRJTFMpICs9IGZsYWdzX3V0aWxzLworb2JqLSQoQ09ORklHX1RFU1RfRkxBR1NfVVRJTFMpICs9IHRlc3RfZmxhZ3NfdXRpbHMubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9mbGFnc191dGlscy9LY29uZmlnIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbGliL2ZsYWdzX3V0aWxzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjMyMjU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9mbGFnc191dGlscy9LY29uZmlnCkBAIC0wLDAgKzEsOCBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCisKK2NvbmZpZyBGTEFHU19VVElMUworCWJvb2wgIkZsYWdzIFV0aWxzIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIEVuYWJsZSBmbGFncyB1dGlscwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbGliL2ZsYWdzX3V0aWxzL01ha2VmaWxlIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbGliL2ZsYWdzX3V0aWxzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlMDJlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9saWIvZmxhZ3NfdXRpbHMvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKworb2JqLSQoQ09ORklHX0ZMQUdTX1VUSUxTKSArPSBmbGFnc191dGlscy5vCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9saWIvZmxhZ3NfdXRpbHMvZmxhZ3NfbG9nLmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9saWIvZmxhZ3NfdXRpbHMvZmxhZ3NfbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGFkZGQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9mbGFnc191dGlscy9mbGFnc19sb2cuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIEZMQUdTX0xPR19ICisjZGVmaW5lIEZMQUdTX0xPR19ICisKKworI2RlZmluZSBmbGFnc19kZWJ1ZyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICJbZmxhZ3NdIFslcy0lZF0gRGVidWc6ICIgZm10ICJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sICMjYXJncykKKyNkZWZpbmUgZmxhZ3NfaW5mbyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0lORk8gIltmbGFnc10gWyVzLSVkXSBJbmZvOiAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI2FyZ3MpCisjZGVmaW5lIGZsYWdzX2VycihmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiW2ZsYWdzXSBbJXMtJWRdIEVycjogIiBmbXQgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNhcmdzKQorCisKKyNlbmRpZiAgLy8gRkxBR1NfTE9HX0gKKwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbGliL2ZsYWdzX3V0aWxzL2ZsYWdzX3V0aWxzLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9saWIvZmxhZ3NfdXRpbHMvZmxhZ3NfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYWQ5NzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbGliL2ZsYWdzX3V0aWxzL2ZsYWdzX3V0aWxzLmMKQEAgLTAsMCArMSw0NzYgQEAKKy8qKg0KKyAqIEBmaWxlIGZsYWdzX3V0aWxzLmMNCisgKiBAYnJpZWYgZmxhZ3O31sf4vdO/2sq1z9YNCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAyMyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4NCisgKiBAYXV0aG9yIA0KKyAqIA0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMNCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4go6ix2NGho7pHUEx2MiBMaWNlbmNlo6kNCisgKg0KKyAqLw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIGhlYWRlciBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+DQorDQorI2luY2x1ZGUgInB1Yl9mbGFncy5oIg0KKw0KKyNpbmNsdWRlICJmbGFnc19sb2cuaCINCisNCisNCitleHRlcm4gZ196bG9hZF9yZWFkX29ubHlfZmxhZzsNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNybyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIE1BWF9QQVRIX0xFTiAoMjU2KQ0KKw0KKyNkZWZpbmUgTVREX05BTUVfRkxBR1MgImZsYWdzIg0KKw0KKyNkZWZpbmUgRkxBR1NfSU5JVF9WQUxJRF9CTE9DS1NfTlVNCSg4KQ0KKw0KKyNkZWZpbmUgR09PRF9CTE9DSyAoMCkNCisjZGVmaW5lIEJBRF9CTE9DSyAoMSkNCisNCisjZGVmaW5lIEZJTEVfUEFUSF9QUk9DX0NNRExJTkUgIi9wcm9jL2NtZGxpbmUiDQorDQorI2RlZmluZSBQUk9DX0NNRExJTkVfU1lTVEVNX0FfRkxBRyAgICJzeXN0ZW09c3lzdGVtX2EiDQorI2RlZmluZSBQUk9DX0NNRExJTkVfU1lTVEVNX0JfRkxBRyAgICJzeXN0ZW09c3lzdGVtX2IiDQorDQorI2RlZmluZSBTWVNURU1fSU5ERVhfVU5LTk9XTiAoLTEpDQorI2RlZmluZSBTWVNURU1fSU5ERVhfMSAoMSkNCisjZGVmaW5lIFNZU1RFTV9JTkRFWF8yICgyKQ0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1bnNpZ25lZCBpbnQgbXRkX3RvdGFsc2l6ZTsJCQkJLy8gbXRkIGRldmljZSB0b3RhbCBzaXplDQorICAgIHVuc2lnbmVkIGludCBtdGRfcGFnZXBlcmJsb2NrOwkJCS8vIG10ZCBkZXZpY2UgcGFnZSBwZXIgYmxvY2sNCisgICAgdW5zaWduZWQgaW50IG10ZF9ibG9ja3NpemU7CQkJCS8vIG10ZCBkZXZpY2UgYmxvY2sgc2l6ZQ0KKyAgICB1bnNpZ25lZCBpbnQgbXRkX3BhZ2VzaXplOwkJCQkvLyBtdGQgZGV2aWNlIHBhZ2Ugc2l6ZQ0KKyAgICB1bnNpZ25lZCBpbnQgbXRkX29vYnNpemU7CQkJCS8vIG10ZCBkZXZpY2Ugb29iIHNpemUNCisgICAgaW50IHBhcnRpX2ZpbGVfZGVzYzsJCQkJCS8vIHBhcnRpdGlvbiB1cGRhdGUgZmlsZSBkZXNjcmlwdGlvbg0KK30gcGFydGl0aW9uX210ZF9pbmZvX3Q7DQorDQorDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBERVZJQ0VfTVREID0gMCwNCisgICAgREVWSUNFX1pGVEwgPSAxLA0KKyAgICBERVZJQ0VfTVREX0JMT0NLLA0KK30gZGV2aWNlX3R5cGVfdDsNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqCQkJCQkJICAgTG9jYWwgdmFyaWFibGUgZGVmaW5pdGlvbnMJCQkJCQkgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqCQkJCQkJICBHbG9iYWwgdmFyaWFibGUgZGVmaW5pdGlvbnMJCQkJCQkgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIAkJCQkJICAgTG9jYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zCQkJCQkJCSAgICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3N0YXRpYyBpbnQgd3JpdGVfZmxhZ3NfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKnBfbXRkX2luZm8sIGludCBpbmRleCwgdW5zaWduZWQgY2hhciAqY29udGVudCwgaW50IGxlbik7DQorDQorc3RhdGljIGludCBnZXRfZmxhZ3NfaW5mbyhUX0ZMQUdTX0lORk8gKnBfbWFpbiwgaW50ICpwX21haW5faW5kZXgsIFRfRkxBR1NfSU5GTyAqcF9iYWNrdXAsIGludCAqcF9iYWNrdXBfaW5kZXgpOw0KK3N0YXRpYyBpbnQgc2V0X2ZsYWdzX2luZm8oVF9GTEFHU19JTkZPICpwX2ZsYWdzX2luZm8sIGludCAqcF9tYWluX2luZGV4LCBpbnQgKnBfYmFja3VwX2luZGV4KTsNCisNCitzdGF0aWMgdm9pZCBjb3B5X2ZsYWdzX2luZm8oVF9GTEFHU19JTkZPICpkc3QsIFRfRkxBR1NfSU5GTyAqc3JjKTsNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIAkJCQkJIExvY2FsIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyAJCQkJCQkgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitzdGF0aWMgaW50IHdyaXRlX2ZsYWdzX2luZm8oc3RydWN0IG10ZF9pbmZvICpwX210ZF9pbmZvLCBpbnQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgKmNvbnRlbnQsIGludCBsZW4pDQorew0KKwlpbnQgcmV0ID0gLTE7DQorICAgIHNpemVfdCB3cml0ZV9sZW4gPSAwOw0KKwkNCisgICAgc3RydWN0IGVyYXNlX2luZm8gZXJhc2VJbmZvID0gezB9Ow0KKyAgICBsb2ZmX3Qgb2ZmcyA9IDA7DQorCQ0KKyAgICBlcmFzZUluZm8ubXRkICA9IHBfbXRkX2luZm87DQorICAgIGVyYXNlSW5mby5hZGRyID0gaW5kZXggKiBwX210ZF9pbmZvLT5lcmFzZXNpemU7DQorICAgIGVyYXNlSW5mby5sZW4gID0gcF9tdGRfaW5mby0+ZXJhc2VzaXplOw0KKwkNCisgICAgb2ZmcyA9IChsb2ZmX3QpaW5kZXggKiBwX210ZF9pbmZvLT5lcmFzZXNpemU7DQorDQorCWdfemxvYWRfcmVhZF9vbmx5X2ZsYWcgPSAxOw0KKw0KKwlpZiAoMCAhPSBtdGRfYmxvY2tfaXNiYWQocF9tdGRfaW5mbywgb2ZmcykpDQorCXsNCisJCWZsYWdzX2VycigiYmxvY2tbJWRdIGJhZCIsIGluZGV4KTsNCisJCWdfemxvYWRfcmVhZF9vbmx5X2ZsYWcgPSAwOw0KKwkJDQorCQlyZXR1cm4gQkFEX0JMT0NLOw0KKwl9DQorDQorCWlmICgwICE9IG10ZF9lcmFzZShwX210ZF9pbmZvLCAmZXJhc2VJbmZvKSkNCisJew0KKwkJZmxhZ3NfZXJyKCJibG9ja1slZF0gZXJhc2UgZmFpbCIsIGluZGV4KTsNCisJCWdfemxvYWRfcmVhZF9vbmx5X2ZsYWcgPSAwOw0KKwkJDQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJaWYgKDAgIT0gbXRkX2Jsb2NrX2lzYmFkKHBfbXRkX2luZm8sIG9mZnMpKQ0KKwl7DQorCQlmbGFnc19lcnIoImJsb2NrWyVkXSBiYWQiLCBpbmRleCk7DQorCQlnX3psb2FkX3JlYWRfb25seV9mbGFnID0gMDsNCisJCQ0KKwkJcmV0dXJuIEJBRF9CTE9DSzsNCisJfQ0KKw0KKwlyZXQgPSBtdGRfd3JpdGUocF9tdGRfaW5mbywgaW5kZXggKiBwX210ZF9pbmZvLT5lcmFzZXNpemUsIGxlbiwgJndyaXRlX2xlbiwgY29udGVudCk7DQorCWlmIChyZXQgfHwgd3JpdGVfbGVuICE9IGxlbikgew0KKwkJZmxhZ3NfZXJyKCJ3cml0ZSBmYWlsZWQiKTsNCisJCWdfemxvYWRfcmVhZF9vbmx5X2ZsYWcgPSAwOw0KKwkNCisJCXJldHVybiAtMTsNCisJfQ0KKwkNCisJZ196bG9hZF9yZWFkX29ubHlfZmxhZyA9IDA7DQorICAgIHJldHVybiAwOw0KK30NCisNCisNCitzdGF0aWMgaW50IGdldF9mbGFnc19pbmZvKFRfRkxBR1NfSU5GTyAqcF9tYWluLCBpbnQgKnBfbWFpbl9pbmRleCwgVF9GTEFHU19JTkZPICpwX2JhY2t1cCwgaW50ICpwX2JhY2t1cF9pbmRleCkNCit7DQorCWludCBpbmRleCA9IDA7DQorICAgIGludCBnb29kX2luZGV4ID0gMDsNCisJDQorICAgIGxvZmZfdCBvZmZzID0gMDsNCisgICAgaW50IGJsb2NrX2ZsYWcgPSBHT09EX0JMT0NLOw0KKwkNCisJdWludDMyX3QgYmxvY2tfc2l6ZSA9IC0xOw0KKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZEluZm8gPSBOVUxMOw0KKw0KKwlzaXplX3QgcmV0bGVuID0gMDsNCisJDQorCW10ZEluZm8gPSBnZXRfbXRkX2RldmljZV9ubShNVERfTkFNRV9GTEFHUyk7DQorCWlmICgoTlVMTCA9PSBtdGRJbmZvKSB8fCBJU19FUlIobXRkSW5mbykpDQorCXsNCisJCWZsYWdzX2VycigiZ2V0IG10ZCBkZXZpY2UgZmFpbCIpOw0KKwkJZ290byBlcnJvcl9jbG9zZTsNCisJfQ0KKw0KKwlibG9ja19zaXplID0gbXRkSW5mby0+ZXJhc2VzaXplOw0KKwkNCisJZmxhZ3NfZGVidWcoImVyYXNlc2l6ZT0ldSwgYmxvY2tfc2l6ZT0ldSIsIG10ZEluZm8tPmVyYXNlc2l6ZSwgYmxvY2tfc2l6ZSk7DQorDQorCWZvciAoaW5kZXggPSAwOyAoZ29vZF9pbmRleCA8IDIpICYmIChpbmRleCAqIGJsb2NrX3NpemUgPCBtdGRJbmZvLT5zaXplKTsgaW5kZXgrKykNCisgICAgew0KKw0KKyAgICAgICAgb2ZmcyA9IGluZGV4ICogYmxvY2tfc2l6ZTsNCisgICAgICAgIGlmICgwID09IG10ZF9ibG9ja19pc2JhZChtdGRJbmZvLCBvZmZzKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBibG9ja19mbGFnID0gR09PRF9CTE9DSzsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBmbGFnc19lcnIoImZsYWdzIGJsb2NrIFslZF0gaXMgYmFkIiwgaW5kZXgpOw0KKyAgICAgICAgICAgIGJsb2NrX2ZsYWcgPSAgQkFEX0JMT0NLOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGJsb2NrX2ZsYWcgPT0gR09PRF9CTE9DSykNCisgICAgICAgIHsNCisgICAgICAgIAlpZiAoZ29vZF9pbmRleCA9PSAwKQ0KKyAgICAgICAgICAgIHsNCisJCQkJKnBfbWFpbl9pbmRleCA9IGluZGV4Ow0KKwkJCQkNCisJCQkJaWYobXRkX3JlYWQobXRkSW5mbywgb2Zmcywgc2l6ZW9mKFRfRkxBR1NfSU5GTyksICZyZXRsZW4sICh1X2NoYXIgKilwX21haW4pKQ0KKwkJCQl7DQorCSAgICAgICAgICAgICAgICBmbGFnc19lcnIoIm1haW4gbXRkIHJlYWQgZXJyb3IiKTsNCisJCQkJCWdvdG8gZXJyb3JfY2xvc2U7DQorCQkJCX0NCisgICAgICAgIAl9DQorICAgICAgICAgICAgZWxzZSBpZiAoZ29vZF9pbmRleCA9PSAxKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgKnBfYmFja3VwX2luZGV4ID0gaW5kZXg7DQorCQkJCQ0KKwkJCQlpZihtdGRfcmVhZChtdGRJbmZvLCBvZmZzLCBzaXplb2YoVF9GTEFHU19JTkZPKSwgJnJldGxlbiwgKHVfY2hhciAqKXBfYmFja3VwKSkNCisJCQkJew0KKwkgICAgICAgICAgICAgICAgZmxhZ3NfZXJyKCJiYWNrdXAgbXRkIHJlYWQgZXJyb3IiKTsNCisJCQkJCWdvdG8gZXJyb3JfY2xvc2U7DQorCQkJCX0NCisJCQkJDQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpZiAocmV0bGVuICE9IHNpemVvZihUX0ZMQUdTX0lORk8pKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZmxhZ3NfZXJyKCJyZWFkIGxlbiAoJWQpICE9IG5lZWQgbGVuICglZCkiLCByZXRsZW4sIHNpemVvZihUX0ZMQUdTX0lORk8pKTsNCisgICAgICAgICAgICAgICAgZ290byBlcnJvcl9jbG9zZTsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgZ29vZF9pbmRleCsrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorCQ0KKwlpZiAoTlVMTCAhPSBtdGRJbmZvKQ0KKwl7DQorCSAgICBwdXRfbXRkX2RldmljZShtdGRJbmZvKTsNCisJCW10ZEluZm8gPSBOVUxMOw0KKwl9DQorCQ0KKwlyZXR1cm4gMDsNCisNCitlcnJvcl9jbG9zZToNCisJaWYgKE5VTEwgIT0gbXRkSW5mbykNCisJew0KKwkgICAgcHV0X210ZF9kZXZpY2UobXRkSW5mbyk7DQorCQltdGRJbmZvID0gTlVMTDsNCisJfQ0KKwkNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisNCitzdGF0aWMgaW50IHNldF9mbGFnc19pbmZvKFRfRkxBR1NfSU5GTyAqcF9mbGFnc19pbmZvLCBpbnQgKnBfbWFpbl9pbmRleCwgaW50ICpwX2JhY2t1cF9pbmRleCkNCit7DQorICAgIGludCByZXQgPSAtMTsNCisNCisJaW50IGluZGV4ID0gMDsNCisgICAgaW50IGdvb2RfaW5kZXggPSAwOw0KKwkNCisgICAgaW50IG1haW5faW5kZXggPSAqcF9tYWluX2luZGV4Ow0KKyAgICBpbnQgYmFja19pbmRleCA9ICpwX2JhY2t1cF9pbmRleDsNCisJDQorICAgIGxvZmZfdCBvZmZzID0gMDsNCisgICAgaW50IGJsb2NrX2ZsYWcgPSBHT09EX0JMT0NLOw0KKwkNCisJdWludDMyX3QgYmxvY2tfc2l6ZSA9IC0xOw0KKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZEluZm8gPSBOVUxMOw0KKw0KKyAgICB1bnNpZ25lZCBjaGFyICpyZWFsX3dyaXRlX2NvbnRlbnQgPSBOVUxMOw0KKwkNCisJbXRkSW5mbyA9IGdldF9tdGRfZGV2aWNlX25tKE1URF9OQU1FX0ZMQUdTKTsNCisJaWYgKChOVUxMID09IG10ZEluZm8pIHx8IElTX0VSUihtdGRJbmZvKSkNCisJew0KKwkJZmxhZ3NfZXJyKCJnZXQgbXRkIGRldmljZSBmYWlsIik7DQorCQkNCisJCXJldCA9IC0xOw0KKwkJZ290byBlbmQ7DQorCX0NCisNCisJYmxvY2tfc2l6ZSA9IG10ZEluZm8tPmVyYXNlc2l6ZTsNCisJDQorCWZsYWdzX2RlYnVnKCJlcmFzZXNpemU9JXUsIGJsb2NrX3NpemU9JXUiLCBtdGRJbmZvLT5lcmFzZXNpemUsIGJsb2NrX3NpemUpOw0KKwkNCisJcmVhbF93cml0ZV9jb250ZW50ID0gKHVuc2lnbmVkIGNoYXIgKilrbWFsbG9jKGJsb2NrX3NpemUsIEdGUF9LRVJORUwpOw0KKwlpZiAoTlVMTCA9PSByZWFsX3dyaXRlX2NvbnRlbnQpDQorCXsNCisJCWZsYWdzX2VycigibWFsbG9jIGJsb2NrIGZhaWwiKTsNCisJCQ0KKwkJcmV0ID0gLTE7DQorCQlnb3RvIGVuZDsNCisJfQ0KKw0KKwltZW1zZXQocmVhbF93cml0ZV9jb250ZW50LCAweEZGLCBibG9ja19zaXplKTsNCisJbWVtY3B5KHJlYWxfd3JpdGVfY29udGVudCwgKGNoYXIgKilwX2ZsYWdzX2luZm8sIHNpemVvZihUX0ZMQUdTX0lORk8pKTsNCisJDQorCWZsYWdzX2luZm8oIj4+Pj4+IGJlZ2luIHRvIHdyaXRlIG1haW4gZmxhZ3MgPDw8PDwiKTsNCisNCisJZm9yIChpbmRleCA9IDA7IGluZGV4ICogYmxvY2tfc2l6ZSA8IG10ZEluZm8tPnNpemU7IGluZGV4KyspDQorCXsNCisJCWlmIChpbmRleCA9PSBiYWNrX2luZGV4KQ0KKwkJew0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKwkJcmV0ID0gd3JpdGVfZmxhZ3NfaW5mbyhtdGRJbmZvLCBpbmRleCwgcmVhbF93cml0ZV9jb250ZW50LCBibG9ja19zaXplKTsNCisJCWlmIChyZXQgPT0gMCkNCisJCXsNCisJCQkvLyDQtLPJuaajrM3Ls/ajrLKiuPzQwrXa0ru/6c671sMNCisJCQlmbGFnc19pbmZvKCJtYWluIGZsYWdzIGxvY2F0aW9uOiBbJWRdLT5bJWRdIiwgbWFpbl9pbmRleCwgaW5kZXgpOw0KKwkJCW1haW5faW5kZXggPSBpbmRleDsNCisJCQlicmVhazsNCisJCX0NCisJCWVsc2UgaWYgKHJldCA9PSBCQURfQkxPQ0spDQorCQl7DQorCQkJLy8g0/a1vbu1v+mjrM/yuvPM+NK7v+kNCisJCQlmbGFnc19pbmZvKCJmbGFncyBibG9jayBpbmRleCBbJWRdIGlzIGJhZCIsIGluZGV4KTsNCisJCQljb250aW51ZTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlmbGFnc19lcnIoIndyaXRlIG1haW4gZmxhZ3MgZmFpbCIpOw0KKwkJCW1haW5faW5kZXggPSAtMTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKw0KKwlmbGFnc19pbmZvKCI+Pj4+PiBiZWdpbiB0byB3cml0ZSBiYWNrdXAgZmxhZ3MgPDw8PDwiKTsNCisNCisJZm9yIChpbmRleCA9IDA7IGluZGV4ICogYmxvY2tfc2l6ZSA8IG10ZEluZm8tPnNpemU7IGluZGV4KyspDQorCXsNCisJCWlmIChpbmRleCA9PSBtYWluX2luZGV4KQ0KKwkJew0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKwkJcmV0ID0gd3JpdGVfZmxhZ3NfaW5mbyhtdGRJbmZvLCBpbmRleCwgcmVhbF93cml0ZV9jb250ZW50LCBibG9ja19zaXplKTsNCisJCWlmIChyZXQgPT0gMCkNCisJCXsNCisJCQkvLyDQtLPJuaajrM3Ls/ajrLKiuPzQwrXa0ru/6c671sMNCisJCQlmbGFnc19pbmZvKCJiYWNrdXAgZmxhZ3MgbG9jYXRpb246IFslZF0tPlslZF0iLCBiYWNrX2luZGV4LCBpbmRleCk7DQorCQkJYmFja19pbmRleCA9IGluZGV4Ow0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJZWxzZSBpZiAocmV0ID09IEJBRF9CTE9DSykNCisJCXsNCisJCQkvLyDT9rW9u7W/6aOsz/K688z40ru/6Q0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWZsYWdzX2Vycigid3JpdGUgYmFja3VwIGZsYWdzIGZhaWwiKTsNCisJCQliYWNrX2luZGV4ID0gLTE7DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCisNCisJaWYgKG1haW5faW5kZXggPT0gLTEgJiYgYmFja19pbmRleCA9PSAtMSkNCisJew0KKwkJcmV0ID0gLTE7DQorCQlnb3RvIGVuZDsNCisJfQ0KKwllbHNlDQorCXsNCisJCXJldCA9IDA7DQorCQlnb3RvIGVuZDsNCisJfQ0KKw0KK2VuZDoNCisJaWYgKE5VTEwgIT0gbXRkSW5mbykNCisJew0KKwkgICAgcHV0X210ZF9kZXZpY2UobXRkSW5mbyk7DQorCQltdGRJbmZvID0gTlVMTDsNCisJfQ0KKwkNCisJaWYoTlVMTCAhPSByZWFsX3dyaXRlX2NvbnRlbnQpDQorCXsNCisJCWtmcmVlKHJlYWxfd3JpdGVfY29udGVudCk7DQorCQlyZWFsX3dyaXRlX2NvbnRlbnQgPSBOVUxMOw0KKwl9DQorCQ0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCisNCitzdGF0aWMgdm9pZCBjb3B5X2ZsYWdzX2luZm8oVF9GTEFHU19JTkZPICpkc3QsIFRfRkxBR1NfSU5GTyAqc3JjKQ0KK3sNCisJZHN0LT5tYWdpY19zdGFydCA9IHNyYy0+bWFnaWNfc3RhcnQ7DQorCQ0KKyAgICBkc3QtPmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPSBzcmMtPmJvb3RfZm90YV9mbGFnLmJvb3RfdG87DQorICAgIGRzdC0+Ym9vdF9mb3RhX2ZsYWcuZm90YV9zdGF0dXMgPSBzcmMtPmJvb3RfZm90YV9mbGFnLmZvdGFfc3RhdHVzOw0KKyAgICBkc3QtPmJvb3RfZm90YV9mbGFnLnN5c3RlbS5zdGF0dXMgPSBzcmMtPmJvb3RfZm90YV9mbGFnLnN5c3RlbS5zdGF0dXM7DQorICAgIGRzdC0+Ym9vdF9mb3RhX2ZsYWcuc3lzdGVtLnRyeV9jbnQgPSBzcmMtPmJvb3RfZm90YV9mbGFnLnN5c3RlbS50cnlfY250Ow0KKyAgICBkc3QtPmJvb3RfZm90YV9mbGFnLnN5c3RlbTIuc3RhdHVzID0gc3JjLT5ib290X2ZvdGFfZmxhZy5zeXN0ZW0yLnN0YXR1czsNCisgICAgZHN0LT5ib290X2ZvdGFfZmxhZy5zeXN0ZW0yLnRyeV9jbnQgPSBzcmMtPmJvb3RfZm90YV9mbGFnLnN5c3RlbTIudHJ5X2NudDsNCisJDQorICAgIGRzdC0+Ym9vdF9lbnYuZHVhbHN5c190eXBlID0gc3JjLT5ib290X2Vudi5kdWFsc3lzX3R5cGU7DQorCXN0cm5jcHkoZHN0LT5ib290X2Vudi5zeXN0ZW1fYm9vdF9lbnYsIHNyYy0+Ym9vdF9lbnYuc3lzdGVtX2Jvb3RfZW52LCBzaXplb2YoZHN0LT5ib290X2Vudi5zeXN0ZW1fYm9vdF9lbnYpKTsNCisJc3RybmNweShkc3QtPmJvb3RfZW52LnN5c3RlbTJfYm9vdF9lbnYsIHNyYy0+Ym9vdF9lbnYuc3lzdGVtMl9ib290X2Vudiwgc2l6ZW9mKGRzdC0+Ym9vdF9lbnYuc3lzdGVtMl9ib290X2VudikpOw0KKw0KKwlkc3QtPnViaWZzX3N0YXR1cy5mc19zdGF0dXMgPSBzcmMtPnViaWZzX3N0YXR1cy5mc19zdGF0dXM7DQorCXN0cm5jcHkoZHN0LT51Ymlmc19zdGF0dXMuZnNfbXRkX25hbWUsIHNyYy0+dWJpZnNfc3RhdHVzLmZzX210ZF9uYW1lLCBzaXplb2YoZHN0LT51Ymlmc19zdGF0dXMuZnNfbXRkX25hbWUpKTsNCisJc3RybmNweShkc3QtPnViaWZzX3N0YXR1cy5mc191Ymlfdm9sX25hbWUsIHNyYy0+dWJpZnNfc3RhdHVzLmZzX3ViaV92b2xfbmFtZSwgc2l6ZW9mKGRzdC0+dWJpZnNfc3RhdHVzLmZzX3ViaV92b2xfbmFtZSkpOw0KKwkNCisJZHN0LT5tYWdpY19lbmQgPSBzcmMtPm1hZ2ljX2VuZDsNCisNCisJcmV0dXJuOw0KK30NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIAkJCQkJIEdsb2JhbCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMJCQkJCQkgICAqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitpbnQgZmxhZ3NfZ2V0KFRfRkxBR1NfSU5GTyAqcF9mbGFnc19pbmZvKQ0KK3sNCisgICAgVF9GTEFHU19JTkZPIG1haW5fZmxhZyA9IHswfTsNCisgICAgVF9GTEFHU19JTkZPIGJhY2t1cF9mbGFnID0gezB9Ow0KKyAgICBpbnQgbWFpbl9pbmRleCA9IDA7DQorICAgIGludCBiYWNrdXBfaW5kZXggPSAxOw0KKw0KKwlpZiAoTlVMTCA9PSBwX2ZsYWdzX2luZm8pDQorCXsNCisJCWZsYWdzX2VycigiaW52YWxpZCBwYXJhbSBOVUxMIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisgICAgaWYgKGdldF9mbGFnc19pbmZvKCZtYWluX2ZsYWcsICZtYWluX2luZGV4LCAmYmFja3VwX2ZsYWcsICZiYWNrdXBfaW5kZXgpICE9IDApDQorICAgIHsNCisgICAgCWZsYWdzX2VycigiZ2V0IGZsYWdzIGluZm8gZmFpbCIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGlmICgoRkxBR1NfTUFHSUMgPT0gbWFpbl9mbGFnLm1hZ2ljX3N0YXJ0KSAmJiAoRkxBR1NfTUFHSUMgPT0gbWFpbl9mbGFnLm1hZ2ljX2VuZCkpDQorICAgIHsNCisgICAgICAgIGNvcHlfZmxhZ3NfaW5mbyhwX2ZsYWdzX2luZm8sICZtYWluX2ZsYWcpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisJDQorICAgIGlmICgoRkxBR1NfTUFHSUMgPT0gYmFja3VwX2ZsYWcubWFnaWNfc3RhcnQpICYmIChGTEFHU19NQUdJQyA9PSBiYWNrdXBfZmxhZy5tYWdpY19lbmQpKQ0KKyAgICB7DQorICAgICAgICBjb3B5X2ZsYWdzX2luZm8ocF9mbGFnc19pbmZvLCAmYmFja3VwX2ZsYWcpOw0KKyAgICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisNCisgICAgZmxhZ3NfZXJyKCJkbyBub3QgZmluZCB2YWxpZCBmbGFncyBpbmZvIik7DQorICAgIHJldHVybiAtMTsNCit9DQorRVhQT1JUX1NZTUJPTChmbGFnc19nZXQpOw0KKw0KK2ludCBmbGFnc19zZXQoVF9GTEFHU19JTkZPICpwX2ZsYWdzX2luZm8pDQorew0KKwlUX0ZMQUdTX0lORk8gbWFpbl9mbGFnID0gezB9Ow0KKyAgICBUX0ZMQUdTX0lORk8gYmFja3VwX2ZsYWcgPSB7MH07DQorICAgIGludCBtYWluX2luZGV4ID0gMDsNCisgICAgaW50IGJhY2t1cF9pbmRleCA9IDE7DQorCQ0KKwlpZiAoTlVMTCA9PSBwX2ZsYWdzX2luZm8pDQorCXsNCisJCWZsYWdzX2VycigiaW52YWxpZCBwYXJhbSBOVUxMIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJaWYgKChGTEFHU19NQUdJQyAhPSBwX2ZsYWdzX2luZm8tPm1hZ2ljX3N0YXJ0KSB8fCAoRkxBR1NfTUFHSUMgIT0gcF9mbGFnc19pbmZvLT5tYWdpY19lbmQpKQ0KKwl7DQorCQlmbGFnc19lcnIoImludmFsaWQgbWFnaWMiKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKwkNCisgICAgaWYgKGdldF9mbGFnc19pbmZvKCZtYWluX2ZsYWcsICZtYWluX2luZGV4LCAmYmFja3VwX2ZsYWcsICZiYWNrdXBfaW5kZXgpICE9IDApDQorICAgIHsNCisgICAgCWZsYWdzX2VycigiZ2V0IGZsYWdzIGluZm8gZmFpbCIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGlmIChzZXRfZmxhZ3NfaW5mbyhwX2ZsYWdzX2luZm8sICZtYWluX2luZGV4LCAmYmFja3VwX2luZGV4KSAhPSAwKQ0KKyAgICB7DQorICAgICAgICBmbGFnc19lcnIoInNldCB1YmlmcyBzdGF0dXMgZmFpbCIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorCXJldHVybiAwOw0KK30NCitFWFBPUlRfU1lNQk9MKGZsYWdzX3NldCk7DQorDQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbGliL3Rlc3RfZmxhZ3NfdXRpbHMuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi90ZXN0X2ZsYWdzX3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhYjU1MgotLS0gL2Rldi9udWxsCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi90ZXN0X2ZsYWdzX3V0aWxzLmMKQEAgLTAsMCArMSwyMTggQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJwdWJfZmxhZ3MuaCIKKworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJmbGFnc191dGlscyIpOworCisKKyNkZWZpbmUgREVWSUNFX05BTUUgImNoYXJkZXZub2RlIgorI2RlZmluZSBERVZJQ0VfTUlOT1JfTlVNIDIKKyNkZWZpbmUgREVWX01BSk9SIDAKKyNkZWZpbmUgREVWX01JTk9SIDAKKyNkZWZpbmUgUkVHREVWX1NJWkUgMzAwMAorI2RlZmluZSBMRURfTlVNIDIKKworI2RlZmluZSBGTEFHU19VVElMU19HRVQJX0lPV1IoJ2InLCAxLCBUX0ZMQUdTX0lORk8pCisjZGVmaW5lIEZMQUdTX1VUSUxTX1NFVAlfSU9XUignYicsIDIsIFRfRkxBR1NfSU5GTykKKworCitleHRlcm4gaW50IGZsYWdzX2dldChUX0ZMQUdTX0lORk8gKnBfZmxhZ3NfaW5mbyk7CitleHRlcm4gaW50IGZsYWdzX3NldChUX0ZMQUdTX0lORk8gKnBfZmxhZ3NfaW5mbyk7CisKKworaW50IG51bWRldl9tYWpvciA9IERFVl9NQUpPUjsKK2ludCBudW1kZXZfbWlub3IgPSBERVZfTUlOT1I7CisKK21vZHVsZV9wYXJhbShudW1kZXZfbWFqb3IsaW50LFNfSVJVU1IpOworbW9kdWxlX3BhcmFtKG51bWRldl9taW5vcixpbnQsU19JUlVTUik7CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKm15Y2xhc3M7CisKK3N0cnVjdCByZWdfZGV2Cit7CisgICAgY2hhciAqZGF0YTsKKyAgICB1bnNpZ25lZCBsb25nIHNpemU7CisgICAgCisgICAgc3RydWN0IGNkZXYgY2RldjsKK307CitzdHJ1Y3QgcmVnX2RldiAqbXlfZGV2aWNlczsKKworCitzdGF0aWMgaW50IGNoYXJkZXZub2RlX29wZW4oc3RydWN0IGlub2RlICppbm9kZXMsIHN0cnVjdCBmaWxlICpmaWxlcykKK3sKKyAgICBwcmludGsoS0VSTl9FTUVSRyAiY2hhcmRldm5vZGVfb3BlbiBzdWNjZXNzISBcbiIpOworICAgIHJldHVybiAwOworfQorc3RhdGljIGludCBjaGFyZGV2bm9kZV9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2Rlcywgc3RydWN0IGZpbGUgKmZpbGVzKQoreworICAgIHByaW50ayhLRVJOX0VNRVJHICJjaGFyZGV2bm9kZV9yZWxlYXNlIHN1Y2Nlc3MhIFxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIGNoYXJkZXZub2RlX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9pZCBfX3VzZXIgKnVidWYgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJCQorCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgRkxBR1NfVVRJTFNfR0VUOgorCQkJeworCQkJCVRfRkxBR1NfSU5GTyBmbGFnc19pbmZvX2dldCA9IHswfTsKKwkJCisJCQkJaWYgKDAgIT0gZmxhZ3NfZ2V0KCZmbGFnc19pbmZvX2dldCkpCisJCQkJeworCQkJCQlwcmludGsoS0VSTl9FUlIgImZsYWdzIHV0aWxzIGlvY3RsIGdldCBmYWlsIFxuIik7CisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCX0KKwkJCQkKKwkJCQlpZiAoY29weV90b191c2VyKHVidWYsICZmbGFnc19pbmZvX2dldCwgc2l6ZW9mKGZsYWdzX2luZm9fZ2V0KSkpCisJCQkJeworCQkJCQlwcmludGsoS0VSTl9FUlIgImZsYWdzIHV0aWxzIGlvY3RsIGNvcHkgdG8gZmFpbCBcbiIpOworCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgRkxBR1NfVVRJTFNfU0VUOgorCQkJeworCQkJCVRfRkxBR1NfSU5GTyBmbGFnc19pbmZvX3NldCA9IHswfTsKKwkJCQkKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIoJmZsYWdzX2luZm9fc2V0LCB1YnVmLCBzaXplb2YoZmxhZ3NfaW5mb19zZXQpKSkKKwkJCQl7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiZmxhZ3MgdXRpbHMgaW9jdGwgY29weSBmcm9tIGZhaWwgXG4iKTsKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJfQorCQkJCQorCQkJCWlmICgwICE9IGZsYWdzX3NldCgmZmxhZ3NfaW5mb19zZXQpKQorCQkJCXsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJmbGFncyB1dGlscyBpb2N0bCBzZXQgZmFpbCBcbiIpOworCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCWRlZmF1bHQ6CisJCQl7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJmbGFncyB1dGlscyBpb2N0bCBkb2VzIG5vdCBzdXBwb3J0IGNtZFsweCV4XVxuIiwgY21kKTsKKwkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCQl9CisJfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNoYXJkZXZub2RlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGVzLCBjaGFyIF9fdXNlciAqYnVmICwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfb3BzKQoreworICAgIHJldHVybiAwOworfQorc3RhdGljIHNzaXplX3QgY2hhcmRldm5vZGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGVzLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9vcHMpCit7CisgICAgcmV0dXJuIDA7Cit9CitzdGF0aWMgbG9mZl90IGNoYXJkZXZub2RlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZXMsIGxvZmZfdCBvZmZzZXQsIGludCBlbmNlKQoreworICAgIHJldHVybiAwOworfQorc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBteV9mb3BzID0geworICAgIC5vd25lciAgID0gVEhJU19NT0RVTEUsCisgICAgLm9wZW4gICAgID0gY2hhcmRldm5vZGVfb3BlbiwKKyAgICAucmVsZWFzZSA9IGNoYXJkZXZub2RlX3JlbGVhc2UsCisgICAgLnVubG9ja2VkX2lvY3RsID0gY2hhcmRldm5vZGVfdW5sb2NrZWRfaW9jdGwsCisgICAgLnJlYWQgICAgID0gY2hhcmRldm5vZGVfcmVhZCwKKyAgICAud3JpdGUgICAgID0gY2hhcmRldm5vZGVfd3JpdGUsCisgICAgLmxsc2VlayAgICAgPSBjaGFyZGV2bm9kZV9sbHNlZWssCit9OworCisKK3N0YXRpYyB2b2lkIHJlZ19pbml0X2NkZXYoc3RydWN0IHJlZ19kZXYgKmRldixpbnQgaW5kZXgpeworICAgIGludCBlcnI7CisgICAgaW50IGRldm5vID0gTUtERVYobnVtZGV2X21ham9yLG51bWRldl9taW5vcitpbmRleCk7CisgICAgCisgICAgY2Rldl9pbml0KCZkZXYtPmNkZXYsJm15X2ZvcHMpOworICAgIGRldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworICAgIGRldi0+Y2Rldi5vcHMgPSAmbXlfZm9wczsKKyAgICAKKyAgICBlcnIgPSBjZGV2X2FkZCgmZGV2LT5jZGV2LGRldm5vLDEpOworICAgIGlmKGVycil7CisgICAgICAgIHByaW50ayhLRVJOX0VNRVJHICJjZGV2X2FkZCAlZCBpcyBmYWlsISAlZFxuIixpbmRleCxlcnIpOworICAgIH0KKyAgICBlbHNleworICAgICAgICBwcmludGsoS0VSTl9FTUVSRyAiY2Rldl9hZGQgJWQgaXMgc3VjY2VzcyFcbiIsbnVtZGV2X21pbm9yK2luZGV4KTsKKyAgICB9Cit9CisKKworc3RhdGljIGludCBzY2Rldl9pbml0KHZvaWQpCit7CisgICAgaW50IHJldCA9IDAsaTsKKyAgICBkZXZfdCBudW1fZGV2OworICAgIAorICAgIHByaW50ayhLRVJOX0VNRVJHICJudW1kZXZfbWFqb3IgaXMgJWRcbiIsIG51bWRldl9tYWpvcik7CisgICAgcHJpbnRrKEtFUk5fRU1FUkcgIm51bWRldl9taW5vciBpcyAlZFxuIiwgbnVtZGV2X21pbm9yKTsKKyAgICAKKyAgICBpZihudW1kZXZfbWFqb3IpeworICAgICAgICBudW1fZGV2ID0gTUtERVYobnVtZGV2X21ham9yLG51bWRldl9taW5vcik7CisgICAgICAgIHJldCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24obnVtX2RldiwgREVWSUNFX01JTk9SX05VTSwgREVWSUNFX05BTUUpOworICAgIH0KKyAgICBlbHNleworICAgICAgICByZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZudW1fZGV2LCBudW1kZXZfbWlub3IsIERFVklDRV9NSU5PUl9OVU0sREVWSUNFX05BTUUpOworICAgICAgICBudW1kZXZfbWFqb3IgPSBNQUpPUihudW1fZGV2KTsKKyAgICAgICAgcHJpbnRrKEtFUk5fRU1FUkcgImFkZXZfcmVnaW9uIHJlcSAlZCAhXG4iLCBudW1kZXZfbWFqb3IpOworICAgIH0KKyAgICBpZihyZXQ8MCl7CisgICAgICAgIHByaW50ayhLRVJOX0VNRVJHICJyZWdpc3Rlcl9jaHJkZXZfcmVnaW9uIHJlcSAlZCBpcyBmYWlsZWQhXG4iLCBudW1kZXZfbWFqb3IpOyAgICAgICAgCisgICAgfQorICAgIG15Y2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsIERFVklDRV9OQU1FKTsKKyAgICAKKyAgICBteV9kZXZpY2VzID0ga21hbGxvYyhERVZJQ0VfTUlOT1JfTlVNICogc2l6ZW9mKHN0cnVjdCByZWdfZGV2KSwgR0ZQX0tFUk5FTCk7CisgICAgaWYoIW15X2RldmljZXMpeworICAgICAgICByZXQgPSAtRU5PTUVNOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIG1lbXNldChteV9kZXZpY2VzLCAwLCBERVZJQ0VfTUlOT1JfTlVNICogc2l6ZW9mKHN0cnVjdCByZWdfZGV2KSk7CisgICAgCisgICAgZm9yKGk9MDsgaTxERVZJQ0VfTUlOT1JfTlVNOyBpKyspeworICAgICAgICBteV9kZXZpY2VzW2ldLmRhdGEgPSBrbWFsbG9jKFJFR0RFVl9TSVpFLEdGUF9LRVJORUwpOworICAgICAgICBtZW1zZXQobXlfZGV2aWNlc1tpXS5kYXRhLDAsUkVHREVWX1NJWkUpOworCQorICAgICAgICByZWdfaW5pdF9jZGV2KCZteV9kZXZpY2VzW2ldLGkpOworICAgICAgICBkZXZpY2VfY3JlYXRlKG15Y2xhc3MsTlVMTCxNS0RFVihudW1kZXZfbWFqb3IsbnVtZGV2X21pbm9yK2kpLE5VTEwsREVWSUNFX05BTUUiJWQiLGkpOworICAgIH0KKyAgICAgICAgCisgICAgcHJpbnRrKEtFUk5fRU1FUkcgInNjZGV2X2luaXQhXG4iKTsKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAgICB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYobnVtZGV2X21ham9yLG51bWRldl9taW5vciksREVWSUNFX01JTk9SX05VTSk7CisgICAgcHJpbnRrKEtFUk5fRU1FUkcgImttYWxsb2MgaXMgZmFpbCFcbiIpOworICAgIAorICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNjZGV2X2V4aXQodm9pZCkKK3sKKyAgICBpbnQgaTsKKyAgICBwcmludGsoS0VSTl9FTUVSRyAic2NkZXZfZXhpdCFcbiIpOworICAgIAorICAgIGZvcihpPTA7aTxERVZJQ0VfTUlOT1JfTlVNO2krKyl7CisgICAgICAgIGNkZXZfZGVsKCYobXlfZGV2aWNlc1tpXS5jZGV2KSk7CisgICAgICAgIGRldmljZV9kZXN0cm95KG15Y2xhc3MsTUtERVYobnVtZGV2X21ham9yLG51bWRldl9taW5vcitpKSk7CisgICAgfQorICAgIGNsYXNzX2Rlc3Ryb3kobXljbGFzcyk7CisgICAga2ZyZWUobXlfZGV2aWNlcyk7CisKKyAgICB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYobnVtZGV2X21ham9yLG51bWRldl9taW5vciksREVWSUNFX01JTk9SX05VTSk7Cit9CisKKworbW9kdWxlX2luaXQoc2NkZXZfaW5pdCk7Cittb2R1bGVfZXhpdChzY2Rldl9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbW0vcmFtZHVtcC9NYWtlZmlsZSBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL3JhbWR1bXAvTWFrZWZpbGUKaW5kZXggZWI2ZWFiNS4uZTkwZTA3MCAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbW0vcmFtZHVtcC9NYWtlZmlsZQorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9tbS9yYW1kdW1wL01ha2VmaWxlCkBAIC0zMiw1ICszMiw2IEBACiAjb2JqLSQoQ09ORklHX1JBTURVTVApICs9IHJhbWR1bXBfb3NzLm8KIG9iai0kKENPTkZJR19UUkFOU19XSVRIX0NPTExFQ1QpICs9IHJhbWR1bXBfY29sbGVjdF9zZXJ2ZXIubwogb2JqLSQoQ09ORklHX1JBTURVTVBfVFJBTlNfU0VSVkVSKSArPSByYW1kdW1wX3RyYW5zX3NlcnZlci5vCitvYmotJChDT05GSUdfUkFNRFVNUF9UUkFOU19TRVJWRVIpICs9IHJhbWR1bXBfY29tcHJlc3Mubwogb2JqLSQoQ09ORklHX1JBTURVTVBfQ0xJRU5UKSArPSByYW1kdW1wX2NsaWVudC5vCiBvYmotJChDT05GSUdfU1lTVEVNX0NBUCkgKz0gcmFtZHVtcF9jbGllbnRfY2FwLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9tbS9yYW1kdW1wL3JhbWR1bXBfY29tcHJlc3MuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL3JhbWR1bXAvcmFtZHVtcF9jb21wcmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkY2M1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9tbS9yYW1kdW1wL3JhbWR1bXBfY29tcHJlc3MuYwpAQCAtMCwwICsxLDk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogsObIqMv509AgKEMpMjAxNiwg1tDQy82o0ba5ybfd09DP3rmry76how0KKyogDQorKiDOxLz+w/uzxjogCXJhbWR1bXBfY29tcHJlc3MuYw0KKyogzsS8/rHqyrY6IAlyYW1kdW1wX2NvbXByZXNzLmMNCisqIMTayN3VqtKqOiAJcmFtZHVtcLf+zvG2y9Lss6PLwLv6z9azocr9vt21vLP2yrXP1g0KKyogDQorKiDQ3rjEyNXG2gkJICCw5rG+usUgCSDQ3rjEseq8xwkJINDeuMTIywkJCdDeuMTE2sjdDQorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisqIDIwMTYvMy8xMCAJIFYxLjAJCSBDcmVhdGUgCQkgINXUvvy//CAJCSC0tL2oDQorKiANCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKgkJCQkJCQkJCc23zsS8/gkJCQkJCQkJCSAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorI2luY2x1ZGUgPGxpbnV4L2x6by5oPg0KKyNpbmNsdWRlICJyYW1kdW1wX2NvbXByZXNzLmgiDQorI2luY2x1ZGUgInJhbWR1bXBfb3NzLmgiDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorI2lmZGVmIF9VU0VfVkVISUNMRV9EQw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCzo8G/tqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAguuq2qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyv2+3cDg0M22qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyKu+1rHkwb+2qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgKnJhbWR1bXBfbHpvX21lbSA9IE5VTEw7DQordW5zaWduZWQgaW50IHJhbWR1bXBfY29tcHJlc3NfZmxhZyA9IDA7DQorZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKnJhbWR1bXBfc2hhcmVkX21lbV9iYXNlOw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgvtayv7qvyv3Ktc/WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiC5psTcw+jK9jogICAgIHJhbWR1bXBfbHptYV9mcmVlX3dvcmtzcGFjZQ0KKyogss7K/cu1w/c6ICAgICANCisqICAgKLSryOuyzsr9KQ0KKyogICAotKuz9rLOyv0pICB2b2lkDQorKiC3tSC72CDWtTogICAgIHZvaWQNCisqIMbky/zLtcP3OiAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFkZCBkdW1wIHJhbSBjb25mIGludG8gcHVibGljIHRhYmxlDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitzdGF0aWMgdm9pZCByYW1kdW1wX2x6b19mcmVlX3dvcmtzcGFjZSh2b2lkKQ0KK3sNCisJcmFtZHVtcF9sem9fbWVtID0gTlVMTDsNCit9DQorDQorc3RhdGljIGludCByYW1kdW1wX2x6b19hbGxvY193b3Jrc3BhY2Uodm9pZCkNCit7DQorCXJhbWR1bXBfbHpvX21lbSA9IHJhbWR1bXBfc2hhcmVkX21lbV9iYXNlICsgUkFNRFVNUF9TSEFSRURfTUVNX0xFTjsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCByYW1kdW1wX2x6b19jb21wcmVzcyh1bnNpZ25lZCBjaGFyICpkYXRhX2luLCBzaXplX3QgaW5fbGVuLCANCisJCQkJdW5zaWduZWQgY2hhciAqZGF0YV9vdXQsIHNpemVfdCAqb3V0X2xlbikNCit7DQorCXNpemVfdCBjb21wcmVzc19zaXplID0gMDsNCisJaW50IHJldCA9IC0xOwkNCisNCisJcmV0ID0gbHpvMXhfMV9jb21wcmVzcyhkYXRhX2luLCBpbl9sZW4sIGRhdGFfb3V0LCAmY29tcHJlc3Nfc2l6ZSwgcmFtZHVtcF9sem9fbWVtKTsNCisJKm91dF9sZW4gPSBjb21wcmVzc19zaXplOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgcmFtZHVtcF9sem9fZGVjb21wcmVzcyh1bnNpZ25lZCBjaGFyICpkYXRhX2luLCBzaXplX3QgaW5fbGVuLCANCisJCQkJdW5zaWduZWQgY2hhciAqZGF0YV9vdXQsIHNpemVfdCAqb3V0X2xlbikNCit7DQorCWludCByZXQ7DQorDQorCXJldCA9IGx6bzF4X2RlY29tcHJlc3Nfc2FmZShkYXRhX2luLCBpbl9sZW4sIGRhdGFfb3V0LCBvdXRfbGVuKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQoraW50IHJhbWR1bXBfbHpvX2luaXQodm9pZCkNCit7DQorCXJhbWR1bXBfbHpvX2FsbG9jX3dvcmtzcGFjZSgpOw0KKwlyYW1kdW1wX2NvbXByZXNzX2ZsYWcgPSAxOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorI2VuZGlmDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL3JhbWR1bXAvcmFtZHVtcF9vc3MuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL3JhbWR1bXAvcmFtZHVtcF9vc3MuYwppbmRleCA1NmZkNDkzLi44ZjUwNjg4IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9tbS9yYW1kdW1wL3JhbWR1bXBfb3NzLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbW0vcmFtZHVtcC9yYW1kdW1wX29zcy5jCkBAIC0xOCw2ICsxOCwxMCBAQAogI2luY2x1ZGUgInJhbWR1bXBfcHViLmgiCiAjaW5jbHVkZSAicmFtZHVtcF9vc3MuaCIKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9sem8uaD4KKyNpZmRlZiBfVVNFX1ZFSElDTEVfREMKKyNpbmNsdWRlICJyYW1kdW1wX2NvbXByZXNzLmgiCisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTMxLDEyICszNSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAguuq2qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKrmyz+3E2rTmtdjWtyovCi0jaWZkZWYgX1VTRV9WRUhJQ0xFX0RDCi0jZGVmaW5lIFJBTURVTVBfU0hBUkVEX01FTV9CQVNFICAgICAgICAgICAgICAgICAgICAoUkFNRFVNUF9BUF9UT19DQVBfQlVGX0FERFJfUEEpCi0jZGVmaW5lIFJBTURVTVBfU0hBUkVEX01FTV9MRU4gICAgICAgICAgICAgICAgICAgICAoUkFNRFVNUF9BUF9UT19DQVBfQlVGX0xFTikKLSNkZWZpbmUgUkFNRFVNUF9TSE1FTV9BTElHTl9TSVpFICAgICAgICAgICAgICAgICAgICgweDEwMDApCi0jZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMr9vt3A4NDNtqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC00NiwxMyArNDQsMTQgQEAKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29yZV9mbGFnOy8vMDpjcCwxOmNhcAogCXZvbGF0aWxlIHVuc2lnbmVkIGludCByd19mbGFnOy8vMDpub24sMTp3LDI6cgotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzaXplOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzaXplOy8vb3JnaW5hbCBzaXplCiAJY2hhciBidWZbXTsKIH0gcmFtZHVtcF9zaG1lbV90OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgyKu+1rHkwb/J+cP3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1bnNpZ25lZCBjaGFyICpyYW1kdW1wX21lbV9iYXNlID0gTlVMTDsKIHVuc2lnbmVkIGNoYXIgKnJhbWR1bXBfc2hhcmVkX21lbV9iYXNlID0gTlVMTDsKICNlbmRpZgogCkBAIC04MSw2ICs4MCw3IEBACiBleHRlcm4gdm9pZCBnZXRfbG9nYnVmX2luZm8odW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyAqc2l6ZSk7CiAjZW5kaWYKICNlbmRpZiAvLyNpZmRlZiBfT1NfTElOVVggCitleHRlcm4gdW5zaWduZWQgaW50IHJhbWR1bXBfY29tcHJlc3NfZmxhZzsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMirvta6r8r9yrXP1iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0zNjcsNiArMzY3LDEwIEBACiAgICAgCXdoaWxlICghekRydlVzYlBvbGxfaXNDb25uZWN0KCkpIDsgIC8qILLp0a9VU0LKx7fxway90yAgKi8KICNpZmRlZiBfVVNFX1ZFSElDTEVfREMKIAl9CisJZWxzZQorCXsKKwkJcmFtZHVtcF9sem9faW5pdCgpOworCX0KICNlbmRpZgogI2VuZGlmCiB9CkBAIC00MTksMjMgKzQyMywxNiBAQAogfQogCiAjaWZkZWYgX1VTRV9WRUhJQ0xFX0RDCi0KIHZvaWQgcmFtZHVtcF9zaGFyZWRfbWVtX2luaXQodm9pZCkKIHsKLQlyYW1kdW1wX3NoYXJlZF9tZW1fYmFzZSA9IE9TU19NTUFQKFJBTURVTVBfU0hBUkVEX01FTV9CQVNFLCBSQU1EVU1QX1NIQVJFRF9NRU1fTEVOKTsKKwlyYW1kdW1wX21lbV9iYXNlID0gT1NTX01NQVAoUkFNRFVNUF9NRU1fQkFTRSwgUkFNRFVNUF9NRU1fTEVOKTsKKwlyYW1kdW1wX3NoYXJlZF9tZW1fYmFzZSA9IHJhbWR1bXBfbWVtX2Jhc2U7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qILmmxNzD6Mr2OiAgICByYW1kdW1wX3NobV90cmFuc193cml0ZQotKiCyzsr9y7XD9zogICAgIAotKiAgICi0q8jrss7K/Skgdm9pZAotKiAgICi0q7P2ss7K/Skgdm9pZAotKiC3tSC72CDWtTogICAgdm9pZCAKLSogxuTL/Mu1w/c6ICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgcmFtZHVtcCB0byB0cmFucyBkdW1wIGRhdGEgdG8gUEMKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgcmFtZHVtcF9zaG1fdHJhbnNfd3JpdGUodW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAtMTsKKwlzaXplX3QgZHN0X2xlbiA9IDA7CiAJcmFtZHVtcF9zaG1lbV90IHRtcF9tc2c7CiAJcmFtZHVtcF9zaG1lbV90ICptc2cgPSAocmFtZHVtcF9zaG1lbV90ICopcmFtZHVtcF9zaGFyZWRfbWVtX2Jhc2U7CiAKQEAgLTQ1OCw2ICs0NTUsNTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiC5psTcw+jK9jogICAgcmFtZHVtcF9zaG1fdHJhbnNfd3JpdGVfZGF0YQorKiCyzsr9y7XD9zogICAgIAorKiAgICi0q8jrss7K/Skgdm9pZAorKiAgICi0q7P2ss7K/Skgdm9pZAorKiC3tSC72CDWtTogICAgdm9pZCAKKyogxuTL/Mu1w/c6ICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgcmFtZHVtcCB0byB0cmFucyBkdW1wIGRhdGEgdG8gUEMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgcmFtZHVtcF9zaG1fdHJhbnNfd3JpdGVfZGF0YSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCByZXQgPSAtMTsKKwlzaXplX3QgZHN0X2xlbiA9IDA7CisJcmFtZHVtcF9zaG1lbV90IHRtcF9tc2c7CisJcmFtZHVtcF9zaG1lbV90ICptc2cgPSAocmFtZHVtcF9zaG1lbV90ICopcmFtZHVtcF9zaGFyZWRfbWVtX2Jhc2U7CisKKwlpZiAoc2l6ZSA+IChSQU1EVU1QX1NIQVJFRF9NRU1fTEVOIC0gcm91bmR1cChzaXplb2YocmFtZHVtcF9zaG1lbV90KSwgUkFNRFVNUF9TSE1FTV9BTElHTl9TSVpFKSkpCisJeworCQlwcmludGsoInJhbWR1bXBfc2htX3RyYW5zX3dyaXRlX2RhdGEgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJd2hpbGUoMSl7CisJCWlmICgobXNnLT5jb3JlX2ZsYWcgPT0gMCkgJiYgKG1zZy0+cndfZmxhZyA9PSAxKSl7CisJCQlpZiAocmFtZHVtcF9jb21wcmVzc19mbGFnID09IDEpeworCQkJCXJldCA9IHJhbWR1bXBfbHpvX2NvbXByZXNzKGJ1ZmZlciwgc2l6ZSwgbXNnLT5idWYsICZkc3RfbGVuKTsKKwkJCX0KKwkJCWlmIChyZXQJIT0gTFpPX0VfT0speworCQkJCV9tZW1jcHlfdG9pbyhtc2ctPmJ1ZiwgYnVmZmVyLCBzaXplKTsKKwkJCQl0bXBfbXNnLnNpemUgPSBzaXplOworCQkJCXRtcF9tc2cuY29yZV9mbGFnID0gMTsKKwkJCQl0bXBfbXNnLnJ3X2ZsYWcgPSAyOworCQkJCV9tZW1jcHlfdG9pbyhtc2csICZ0bXBfbXNnLCBzaXplb2YocmFtZHVtcF9zaG1lbV90KSk7CisJCQkJcmV0ID0gc2l6ZTsKKwkJCX1lbHNleworCQkJCW1zZy0+c2l6ZSA9IGRzdF9sZW47CisJCQkJbXNnLT5jb3JlX2ZsYWcgPSAxOworCQkJCW1zZy0+cndfZmxhZyA9IDI7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQllbHNlCisJCQlyYW1kdW1wX3dhaXRfZGVsYXkoMCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoguabE3MPoyvY6ICAgIHJhbWR1bXBfc2htX3RyYW5zX3JlYWQKQEAgLTUzNSw2ICs1NzgsMTggQEAKIAogfQogCit2b2lkIHJhbWR1bXBfb3NzX2RhdGFfdHJhbnNfd3JpdGVfZGF0YSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQoreworI2lmZGVmIF9VU0VfVkVISUNMRV9EQworCWlmKCoodW5zaWduZWQgaW50ICopUkFNRFVNUF9FTU1DX1RSQU5TX0ZMQUdfQUREUiA9PSAxKXsKKwkJCXJhbWR1bXBfc2htX3RyYW5zX3dyaXRlX2RhdGEoYnVmZmVyLCBzaXplKTsKKwl9CisJZWxzZQorI2VuZGlmCisJCXJhbWR1bXBfdXNiX3RyYW5zX3dyaXRlKGJ1ZmZlciwgc2l6ZSk7CisKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoguabE3MPoyvY6ICAgICByYW1kdW1wX29zc19kYXRhX3RyYW5zX2RvbmUKICogss7K/cu1w/c6ICAgICAKQEAgLTU0NSwxMCArNjAwLDEzIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCByYW1kdW1wX29zc19kYXRhX3RyYW5zX2RvbmUodm9pZCkKIHsKLSNpZmRlZiBfT1NfTElOVVggICAgIAotICAgIC8qILXItP3K/b7dt6LLzc3quvOjrNTZ1tjG9CAqLworI2lmZGVmIF9PU19MSU5VWAogI2lmZGVmIF9VU0VfVkVISUNMRV9EQwotCWlmKCoodW5zaWduZWQgaW50ICopUkFNRFVNUF9FTU1DX1RSQU5TX0ZMQUdfQUREUiAhPSAxKQorCisgICAgLyogtci0/cr9vt23osvNzeq686Os1NnW2Mb0ICovCisJaWYoKih1bnNpZ25lZCBpbnQgKilSQU1EVU1QX0VNTUNfVFJBTlNfRkxBR19BRERSID09IDEpCisJCXJldHVybjsKKwllbHNlCiAjZW5kaWYKIAkJekRydlVzYlBvbGxfSXNyKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL3JhbWR1bXAvcmFtZHVtcF90cmFuc19zZXJ2ZXIuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL3JhbWR1bXAvcmFtZHVtcF90cmFuc19zZXJ2ZXIuYwppbmRleCBkZjg1NzA1Li5iNzI0NmVmIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9tbS9yYW1kdW1wL3JhbWR1bXBfdHJhbnNfc2VydmVyLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbW0vcmFtZHVtcC9yYW1kdW1wX3RyYW5zX3NlcnZlci5jCkBAIC0xODUsMTkgKzE4NSwxNSBAQAogCiBjaGFyIHJhbWR1bXBfc2htX2V4cG9ydF9maWxlW11bUkFNRFVNUF9SQU1DT05GX0ZJTEVOQU1FX01BWExFTl0gPSAKIHsKLSAgICAiYXBfbG9nX2J1ZiIsCi0gICAgInpzcC5jbW0iLCAKLSAgICAicGh5X2lkZHIuYmluIiwKLSAgICAiREREUi5iaW4iLAotICAgICJwaHlfaXRjbS5iaW4iLAotICAgICJEVENNLmJpbiIsIAotICAgICJzaGFyZWRfcmFtLmJpbiIsCi0gICAgImlyYW1faWNwLmJpbiIKKwkiY2FwX2Rkci5iaW4iLAorCSJjYXAuY21tIiwKKwkiY2FwX2Vycl9sb2cudHh0IgogfTsKIAogdW5zaWduZWQgaW50IHJhbWR1bXBfc2htX2ZpbGVfbnVtID0gMDsKIHVuc2lnbmVkIGludCByYW1kdW1wX2V4cHJvdF9maWxlX251bSA9IDA7CiB1bnNpZ25lZCBpbnQgcmFtZHVtcF9leHBvcnRfZmlsZV9pbmRleFtSQU1EVU1QX1JBTUNPTkZfVEFCTEVfTUFYX0VOVFJZU10gPSB7MH07Cit1bnNpZ25lZCBpbnQgKmNhcF9kZHJfc2l6ZSA9ICh1bnNpZ25lZCBpbnQgKilJUkFNX0JBU0VfQUREUl9CT09UX0REUjs7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICC+1rK/uq/K/cq1z9YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtODI4LDE5ICs4MjQsMjUgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5kZXg7CiAJdW5zaWduZWQgaW50IGNudDsKKwlpbnQgc2tpcCA9IDA7CiAKIAlyYW1kdW1wX3NobV9maWxlX251bSA9IHNpemVvZihyYW1kdW1wX3NobV9leHBvcnRfZmlsZSkvc2l6ZW9mKHJhbWR1bXBfc2htX2V4cG9ydF9maWxlWzBdKTsKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHJhbWR1bXBfZmlsZV9udW07IGluZGV4KyspewogI2lmZGVmIF9VU0VfVkVISUNMRV9EQwogCQlpZigqKHVuc2lnbmVkIGludCAqKVJBTURVTVBfRU1NQ19UUkFOU19GTEFHX0FERFIgPT0gMSl7Ci0JCQlmb3IgKGNudCA9IDA7IGNudCA8IHJhbWR1bXBfc2htX2ZpbGVfbnVtOyBjbnQrKykKLQkJCXsKLQkJCQlpZighc3RyY21wKHJhbWR1bXBfdHJhbnNfc2VydmVyX3JhbV9jb25mW2luZGV4XS5uYW1lLCByYW1kdW1wX3NobV9leHBvcnRfZmlsZVtjbnRdKSl7Ci0JCQkJCXJhbWR1bXBfZXhwb3J0X2ZpbGVfaW5kZXhbcmFtZHVtcF9leHByb3RfZmlsZV9udW1dID0gaW5kZXg7Ci0JCQkJCXJhbWR1bXBfZXhwcm90X2ZpbGVfbnVtKys7CisJCQlmb3IgKGNudCA9IDA7IGNudCA8IHJhbWR1bXBfc2htX2ZpbGVfbnVtOyBjbnQrKyl7CisJCQkJaWYoc3RyY21wKHJhbWR1bXBfdHJhbnNfc2VydmVyX3JhbV9jb25mW2luZGV4XS5uYW1lLCByYW1kdW1wX3NobV9leHBvcnRfZmlsZVtjbnRdKSA9PSAwKXsKKwkJCQkJc2tpcCA9IDE7CisJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KKwkJCWlmIChza2lwID09IDApeworCQkJCXJhbWR1bXBfZXhwb3J0X2ZpbGVfaW5kZXhbcmFtZHVtcF9leHByb3RfZmlsZV9udW1dID0gaW5kZXg7CisJCQkJcmFtZHVtcF9leHByb3RfZmlsZV9udW0rKzsKKwkJCX0KKwkJCWVsc2UKKwkJCQlza2lwID0gMDsKIAkJfWVsc2V7CiAjZW5kaWYKIAkJCXJhbWR1bXBfZXhwb3J0X2ZpbGVfaW5kZXhbcmFtZHVtcF9leHByb3RfZmlsZV9udW1dID0gaW5kZXg7CkBAIC05MzQsNyArOTM2LDcgQEAKICAgICAgICAgICAgICAgICByYW1kdW1wX29zc19kYXRhX3RyYW5zX3dyaXRlKAogICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSgmKHNlcnZlcl90b19wY19tc2cuY21kKSksCiAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXJ2ZXJfdG9fcGNfbXNnLmNtZCkpOwotICAgICAgICAgICAgICAgIHJhbWR1bXBfb3NzX2RhdGFfdHJhbnNfd3JpdGUoCisgICAgICAgICAgICAgICAgcmFtZHVtcF9vc3NfZGF0YV90cmFuc193cml0ZV9kYXRhKAogICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKShzZXJ2ZXJfdG9fcGNfbXNnLmJ1Zl9hZGRyKSwgCiAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl90b19wY19tc2cuYnVmX2xlZnRfc2l6ZSk7CiAgICAgICAgICAgICAgICAgCkBAIC0xMTM1LDEyICsxMTM3LDEzIEBACiAjaWZkZWYgX1VTRV9DQVBfU1lTCiAJLyogY2FwIHJhbWR1bXAgY21tICovCiAJcmFtZHVtcF9yYW1fY29uZl90YWJsZV9hZGQoCi0gICAgICAgICJjYXBfZGRyLmJpbiIsIAotICAgICAgICBERFJfQkFTRV9DQVBfQUREUl9QQSwgCi0gICAgICAgIEREUl9CQVNFX0xFTl9DQVAsCi0gICAgICAgIDAsCi0gICAgICAgIFJBTURVTVBfRkxBR19OT05FLAotICAgICAgICAwKTsKKwkJCSJjYXBfZGRyLmJpbiIsIAorCQkJRERSX0JBU0VfQ0FQX0FERFJfUEEsIAorCQkJKmNhcF9kZHJfc2l6ZSwKKwkJCTAsCisJCQlSQU1EVU1QX0ZMQUdfTk9ORSwKKwkJCTApOworCiAJcmFtZHVtcF9yYW1fY29uZl90YWJsZV9hZGQoCiAgICAgICAgICJjYXAuY21tIiwgCiAgICAgICAgIFJBTURVTVBfQ0FQX0NNTV9CVUZfQUREUl9QSFksCkBAIC0xMTYyLDYgKzExNjUsMjAgQEAKICAgICAgICAgMCwKICAgICAgICAgUkFNRFVNUF9GTEFHX05PTkUsCiAgICAgICAgIDApOworCXJhbWR1bXBfcmFtX2NvbmZfdGFibGVfYWRkKAorICAgICAgICAicGh5X2xvZ19idWZmZXIuYmluIiwgCisgICAgICAgIFRPT0xfWlNQX1RPX0NBUF9MT0dfQUREUl9QQSwKKyAgICAgICAgVE9PTF9aU1BfVE9fQ0FQX0xPR19MRU4sCisgICAgICAgIDAsCisgICAgICAgIFJBTURVTVBfRkxBR19OT05FLAorICAgICAgICAwKTsKKwlyYW1kdW1wX3JhbV9jb25mX3RhYmxlX2FkZCgKKyAgICAgICAgIlRFRS5iaW4iLCAKKyAgICAgICAgVEVFX1NIQVJFX0JVRl9BRERSX1BBLAorICAgICAgICBURUVfU0hBUkVfQlVGX0xFTiwKKyAgICAgICAgMCwKKyAgICAgICAgUkFNRFVNUF9GTEFHX05PTkUsCisgICAgICAgIDApOwogI2VuZGlmCiAKICNpZmRlZiBfVVNFX1ZFSElDTEVfREMKQEAgLTExOTAsMTMgKzEyMDcsMTYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIHJhbWR1bXBfaW5mbyh2b2lkKQogewotCWlmKENQUFNfRlVOQyhjcHBzX2NhbGxiYWNrcywgek9zc19HZXRFeGNlcHRSZXNldEZsYWcpKCkgPT0gMSkKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlJhbWR1bXAgaW5mbzogUmFtZHVtcCBFeGNlcHQgUmVib290IGVuYWJsZWQhXG4iKTsKLQllbHNlIGlmKENQUFNfRlVOQyhjcHBzX2NhbGxiYWNrcywgek9zc19HZXRFeGNlcHRSZXNldEZsYWcpKCkgPT0gMikKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlJhbWR1bXAgaW5mbzogUmFtZHVtcCBFeGNlcHQgUmVib290IGFmdGVyIGV4cG9ydCFcbiIpOwotCWlmIChzeXNjdGxfcmFtZHVtcF9vbl9wYW5pYyA9PSBGQUxTRSkKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlJhbWR1bXAgaW5mbzogUmFtZHVtcCBkaXNhYmxlZCFcbiIpOwotCXByaW50ayhLRVJOX0VNRVJHICJSYW1kdW1wIGluZm86IEN1cnJlbnQgUHJvY2VzcyBpczogJXMsIHBpZCBpcyAlaSFcbiIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisgICAgaWYgKENQUFNfRlVOQyhjcHBzX2NhbGxiYWNrcywgek9zc19HZXRFeGNlcHRSZXNldEZsYWcpICE9IE5VTEwpCisgICAgeworICAgICAgICBpZihDUFBTX0ZVTkMoY3Bwc19jYWxsYmFja3MsIHpPc3NfR2V0RXhjZXB0UmVzZXRGbGFnKSgpID09IDEpCisgICAgICAgICAgICBwcmludGsoS0VSTl9FTUVSRyAiUmFtZHVtcCBpbmZvOiBSYW1kdW1wIEV4Y2VwdCBSZWJvb3QgZW5hYmxlZCFcbiIpOworICAgICAgICBlbHNlIGlmKENQUFNfRlVOQyhjcHBzX2NhbGxiYWNrcywgek9zc19HZXRFeGNlcHRSZXNldEZsYWcpKCkgPT0gMikKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VNRVJHICJSYW1kdW1wIGluZm86IFJhbWR1bXAgRXhjZXB0IFJlYm9vdCBhZnRlciBleHBvcnQhXG4iKTsKKyAgICB9CisgICAgaWYgKHN5c2N0bF9yYW1kdW1wX29uX3BhbmljID09IEZBTFNFKQorICAgICAgICBwcmludGsoS0VSTl9FTUVSRyAiUmFtZHVtcCBpbmZvOiBSYW1kdW1wIGRpc2FibGVkIVxuIik7CisgICAgcHJpbnRrKEtFUk5fRU1FUkcgIlJhbWR1bXAgaW5mbzogQ3VycmVudCBQcm9jZXNzIGlzOiAlcywgcGlkIGlzICVpIVxuIiwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL2Zhc3Rwcm9jL2Zhc3RfdHJhY2suYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL2Zhc3Rwcm9jL2Zhc3RfdHJhY2suYwppbmRleCA1ZDU1NDI2Li4zYWQxMGMxIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvY29yZS9mYXN0cHJvYy9mYXN0X3RyYWNrLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L2NvcmUvZmFzdHByb2MvZmFzdF90cmFjay5jCkBAIC0xMTE2LDYgKzExMTYsMjkgQEAKIAlyZXR1cm4gY291bnQ7DQogfQ0KIA0KK3N0YXRpYyBzc2l6ZV90IGRldl9yZXNldF9zZXQoc3RydWN0IGZpbGUgKmZpbGUsDQorCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQ0KK3sNCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7DQorCXNpemVfdCBzaXplOw0KKwljaGFyIGRldl9uYW1lW01BWF9ORVRfREVWSUNFX05BTUVfTEVOICsgMV0gPSB7MH07DQorDQorCS8vY291bnTOsrK/sPy6rMHLMbj2veHK+Lf7DQorCXNpemUgPSBtaW4oY291bnQgLSAxLCBNQVhfTkVUX0RFVklDRV9OQU1FX0xFTik7DQorCWlmIChjb3B5X2Zyb21fdXNlcihkZXZfbmFtZSwgYnVmZmVyLCBzaXplKSkNCisJCXJldHVybiAtRUZBVUxUOw0KKw0KKwkvL8m+s/20y834wufJ6LG4z+C52HN0YXQNCisJZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgZGV2X25hbWUpOw0KKwlpZiAoZGV2KXsNCisJCW1lbXNldCgmZGV2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7DQorCQlhdG9taWNfbG9uZ19zZXQoJmRldi0+cnhfZHJvcHBlZCwgMCk7DQorCQlkZXZfcHV0KGRldik7DQorCX1lbHNlDQorCQlwcmludGsoImRldl9yZXNldF9zZXQgJXMgbm90IGZpbmRcbiIsIGRldl9uYW1lKTsNCisJcmV0dXJuIGNvdW50Ow0KK30NCisNCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYXN0bmF0X2xldmVsX2ZpbGVfb3BzID0gew0KICAgICAub3duZXIgICA9IFRISVNfTU9EVUxFLA0KICAgICAub3BlbiAgICA9IGZhc3RuYXRfbGV2ZWxfb3BlbiwNCkBAIC0xMTk2LDYgKzEyMTksMTEgQEAKIAkud3JpdGUgPSBza2JfZGVidWdfb2ZmX3NldCwNCiB9Ow0KIA0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldl9yZXNldF9maWxlX29wcyA9IHsNCisJLm93bmVyID0gVEhJU19NT0RVTEUsDQorCS53cml0ZSA9IGRldl9yZXNldF9zZXQsDQorfTsNCisNCiAvL7/sy9nXqreicHJvY87EvP61xLP1yry7rw0KIGludCBmYXN0X2Nvbm50cmFja19pbml0X3Byb2Modm9pZCkNCiB7DQpAQCAtMTIyNSw5ICsxMjUzLDEyIEBACiANCiAgICAgLy+2wcihwbS907aqsPzQxc+iDQogICAgIHByb2NfY3JlYXRlKCJwa3RfbG9zdGluZm8iLCAwNDQwLCBpbml0X25ldC5wcm9jX25ldCwgJnBrdF9sb3N0aW5mb19maWxlX29wcyk7DQotCQ0KKw0KICAgICAvL3R1cm4gb2ZmIHNrYiBkZWJ1Zw0KICAgICBwcm9jX2NyZWF0ZSgic2tiX2RlYnVnX29mZiIsIDA0NDAsIGluaXRfbmV0LnByb2NfbmV0LCAmc2tiX2RlYnVnX29mZl9maWxlX29wcyk7DQorDQorICAgIC8vcmVzZXQgZGV2IHN0YXRzDQorICAgIHByb2NfY3JlYXRlKCJkZXZfcmVzZXRfc3RhdHMiLCAwNDQwLCBpbml0X25ldC5wcm9jX25ldCwgJmRldl9yZXNldF9maWxlX29wcyk7DQogICAgIHJldHVybiAxOw0KIH0NCiANCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvc29ja2V0LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvc29ja2V0LmMKaW5kZXggN2VhM2FiZC4uYWExZTA3ZiAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L3NvY2tldC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9zb2NrZXQuYwpAQCAtNDkxLDYgKzQ5MSw3IEBACiAJaW5vZGUtPmlfZ2lkID0gY3VycmVudF9mc2dpZCgpOwogI2lmZGVmIENPTkZJR19JUENfU09DS0VUCQkKIAlJTklUX0hMSVNUX0hFQUQoJnNvY2stPnBlZXIpOworCXNvY2stPnRhc2sgPSBjdXJyZW50OwogI2VuZGlmCiAJcGVyY3B1X2FkZChzb2NrZXRzX2luX3VzZSwgMSk7CiAJcmV0dXJuIHNvY2s7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvc29ja2V0X3JwbXNnLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvc29ja2V0X3JwbXNnLmMKaW5kZXggODY3Yjk0My4uYTQyYmZjMiAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L3NvY2tldF9ycG1zZy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9zb2NrZXRfcnBtc2cuYwpAQCAtNiw2ICs2LDggQEAKICNpbmNsdWRlIDxuZXQvYWZfdW5peC5oPg0KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPg0KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4NCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4NCiAvLyNpbmNsdWRlICJyYW1fY29uZmlnLmgiDQogI2luY2x1ZGUgPGxpbnV4L3NvY2tldF9ycG1zZy5oPg0KIA0KQEAgLTE2LDYgKzE4LDggQEAKICNkZWZpbmUgc29ja19nZXRfc2VtYSBkb3duX2ludGVycnVwdGlibGUNCiAjZGVmaW5lIHNvY2tfcHV0X3NlbWEgdXANCiANCitleHRlcm4gaW50IHNvY2tldF9ycG1zZ19lbmFibGU7DQorDQogc3RydWN0IHNvY2tfY2hhbm5lbCBnX3NvY2tfY2huX2luZm87DQogc3RydWN0IHNvY2tfcnBtc2cgZ19zb2NrX3JwbXNnOw0KIHN0cnVjdCBpcGNfc29ja2V0ICpnX3NvY2tldF9pcGM7DQpAQCAtMjYsNyArMzAsNyBAQAogc3RydWN0IGhsaXN0X2hlYWQgZ19pcGNfc29ja2V0czsNCiBzdHJ1Y3QgaGxpc3RfaGVhZCBnX3NvY2tfcnBtc2dfaW5mbzsNCiBzdHJ1Y3QgaGxpc3RfaGVhZCBnX3NvY2tldHNfaW5mbzsNCi0JDQorc3RydWN0IGhsaXN0X2hlYWQgZ19zdW5hZGRyX2luZm87CQ0KIGNoYXIqIGZsYWdfdmFsdWVbXSA9ew0KIAkiU09DS19ERUFEIiwNCiAJIlNPQ0tfRE9ORSIsDQpAQCAtNzYsNiArODAsOSBAQAogREVGSU5FX1NQSU5MT0NLKHNvY2tfcmVsZWFzZV9wZWVyX2xvY2spOw0KIEVYUE9SVF9TWU1CT0xfR1BMKHNvY2tfcmVsZWFzZV9wZWVyX2xvY2spOw0KIA0KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppcGNzb2NrZXRfZGVidWdmc19kaXJfZW50cnlfcm9vdDsNCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqaXBjc29ja2V0X2RlYnVnZnNfZGlyX2VudHJ5X3Byb2M7DQorDQogI2RlZmluZSB1bml4X3BlZXIoc2spICh1bml4X3NrKHNrKS0+cGVlcikNCiANCiBleHRlcm4gc3RydWN0IHNvY2sgKnVuaXhfZmluZF9vdGhlcl9wcm94eShzdHJ1Y3QgbmV0ICpuZXQsDQpAQCAtOTYsNiArMTAzLDcgQEAKIGV4dGVybiB2b2lkIHVuaXhfZGdyYW1fZGlzY29ubmVjdGVkX3Byb3h5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm90aGVyKTsNCiBleHRlcm4gaW50IHVuaXhfbWtuYW1lX3Byb3h5KHN0cnVjdCBzb2NrYWRkcl91biAqc3VuYWRkciwgaW50IGxlbiwgdW5zaWduZWQgKmhhc2hwKTsNCiBleHRlcm4gdm9pZCB1bml4X3JlbGVhc2Vfc29ja19wcm94eShzdHJ1Y3Qgc29jayAqc2spOw0KK2V4dGVybiB2b2lkIGluaXRfcGVlcmNyZWRfcHJveHkoc3RydWN0IHNvY2sgKnNrKTsNCiANCiAvL3N0YXRpYyB2b2lkIGRlbGF5ZWRfcmVsZWFzZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCk7DQogaW50IHNvY2tfc29jX3NvY2tldF9pc192YWxpZChzdHJ1Y3Qgc29ja2V0KiBwcm94eXNvY2ssIHN0cnVjdCBzb2NrZXQqIGxvY2Fsc29jayk7DQpAQCAtMTAzLDYgKzExMSwyMyBAQAogDQogc3RhdGljIExJU1RfSEVBRChkZWxheWVkX3JlbGVhc2VfbGlzdCk7DQogDQorI2RlZmluZSBERUZJTkVfU0hPV19BVFRSSUJVVEUoX19uYW1lKQkJCQkJXA0KK3N0YXRpYyBpbnQgX19uYW1lIyNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkJXA0KK3sJCQkJCQkJCQlcDQorCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBfX25hbWUjI19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsJXA0KK30JCQkJCQkJCQlcDQorCQkJCQkJCQkJXA0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbmFtZSMjX2ZvcHMgPSB7CQkJXA0KKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJCQlcDQorCS5vcGVuCQk9IF9fbmFtZSMjX29wZW4sCQkJCVwNCisJLnJlYWQJCT0gc2VxX3JlYWQsCQkJCQlcDQorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAkJCQkJXA0KKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAkJCQlcDQorfQ0KKw0KK3N0YXRpYyBpbnQgaXBjX3NvY2tldF9pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpOw0KK0RFRklORV9TSE9XX0FUVFJJQlVURShpcGNfc29ja2V0X2luZm8pOw0KKw0KIGVudW0gc29ja19mbGFnc19jYXAgew0KIAlTT0NLX0RFQURfQ0FQLA0KIAlTT0NLX0RPTkVfQ0FQLA0KQEAgLTIwMiw2ICsyMjcsMzIgQEAKIAl9DQogfQ0KIA0KK3N0YXRpYyBpbnQgaXBjX3NvY2tldF9pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpDQorewkNCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gTlVMTDsNCisJY2hhciB0YXNrbmFtZVtUQVNLX0NPTU1fTEVOXSA9IHswfTsNCisJc3RydWN0IGlwY19zb2NrZXQgKnA7DQorCXN0cnVjdCBobGlzdF9ub2RlICpwb3MsKm47DQorCXN0cnVjdCBzb2NrZXQqIGxvY2Fsc29ja2V0OwkNCisJDQorCXNwaW5fbG9jaygmc29ja190YWJsZV9sb2NrKTsNCisJaWYoaGxpc3RfZW1wdHkoJmdfaXBjX3NvY2tldHMpKQ0KKwl7DQorCQlza19zb2Nfd2Fybigic29ja19wcmludF9pcGNfc29ja2V0X2luZm8gIGdfaXBjX3NvY2tldHMgaXMgZW1wdHkiKTsNCisJCXNwaW5fdW5sb2NrKCZzb2NrX3RhYmxlX2xvY2spOw0KKwkJcmV0dXJuIDA7DQorCX0NCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBwb3MsIG4sICZnX2lwY19zb2NrZXRzLCBobGlzdF9ub2RlKSB7DQorCQltZW1zZXQodGFza25hbWUsIDAsIFRBU0tfQ09NTV9MRU4pOw0KKwkJbG9jYWxzb2NrZXQgPSBwLT5sb2NhbHNvY2tldDsNCisJCXRhc2sgPSBsb2NhbHNvY2tldC0+dGFzazsNCisJCWdldF90YXNrX2NvbW0odGFza25hbWUsIHRhc2spOwkNCisJCXNrX3NvY193YXJuKCJwaWQ9JWQsIHRhc2tuYW1lPSVzIiwgdGFzay0+cGlkLCB0YXNrbmFtZSk7CQkNCisJfQ0KKwlzcGluX3VubG9jaygmc29ja190YWJsZV9sb2NrKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KIHN0YXRpYyBpbnQgc29ja19zb2NfaXNfc29ja2V0X3BlZXIoc3RydWN0IHNvY2tldCogc29ja2V0LCBzdHJ1Y3Qgc29ja2V0KiBwZWVyKQ0KIHsNCiAJc3RydWN0IHNvY2tldF9pbmZvICpwOw0KQEAgLTU2Niw2ICs2MTcsNjggQEAKIAl1cCgmcHNvY2tfcnBtc2dfaW5mby0+c29ja19zZW0pOw0KIAlyZXR1cm4gcHNvY2tfcnBtc2dfaW5mbzsNCiB9DQorDQorYm9vbCBzb2NrX3NvY19pcGNfc3VuYWRkcl9leGlzdChzdHJ1Y3Qgc29ja2FkZHJfdW4gKnBzb2NrYWRkcl91bikNCit7DQorCXN0cnVjdCBzb2NrX3N1bmFkZHJfaW5mbyAqcDsNCisJc3RydWN0IGhsaXN0X25vZGUgKnBvcywqbjsNCisJDQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgcG9zLCBuLCAmZ19zdW5hZGRyX2luZm8sIGhsaXN0X25vZGUpIHsNCisJCWlmKChwLT5zb2NrYWRkci5zdW5fZmFtaWx5ID09IHBzb2NrYWRkcl91bi0+c3VuX2ZhbWlseSkgXA0KKwkJCSYmKDAgPT0gbWVtY21wKHAtPnNvY2thZGRyLnN1bl9wYXRoLCBwc29ja2FkZHJfdW4tPnN1bl9wYXRoLCBVTklYX1BBVEhfTUFYKSkpewkJCQ0KKwkJCQkJCQ0KKwkJCXJldHVybiB0cnVlOw0KKwkJfQ0KKwl9DQorCQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHNvY2tfc29jX2luc2VydF9pcGNfc3VuYWRkcihzdHJ1Y3Qgc29ja2FkZHJfdW4gKnBzb2NrYWRkcl91bikNCit7DQorCXN0cnVjdCBzb2NrX3N1bmFkZHJfaW5mbyAqcHNvY2tfc3VuYWRkcl9pbmZvID0gTlVMTDsNCisNCisJLy/PyLLpv7RzdW5hZGRyyse38dLRvq3U2mdfc3VuYWRkcl9pbmZv1tANCisJaWYodHJ1ZSA9PSBzb2NrX3NvY19pcGNfc3VuYWRkcl9leGlzdChwc29ja2FkZHJfdW4pKXsNCisJCXNrX3NvY19pbmZvKCJzb2NrX3NvY19pbnNlcnRfaXBjX3N1bmFkZHIsIHN1bmFkZHIgYWxyZWFkeSBleGlzdCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCQ0KKwlwc29ja19zdW5hZGRyX2luZm8gPSAoc3RydWN0IHNvY2tfc3VuYWRkcl9pbmZvICopa3phbGxvYyhzaXplb2Yoc3RydWN0IHNvY2tfc3VuYWRkcl9pbmZvKSwgR0ZQX0FUT01JQyk7DQorCWlmKHBzb2NrX3N1bmFkZHJfaW5mbyA9PSBOVUxMKXsNCisJCXNrX3NvY19pbmZvKCJzb2NrX3NvY19pbnNlcnRfaXBjX3N1bmFkZHIsIGFsbG9jIGZhaWxlZCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1lbXNldChwc29ja19zdW5hZGRyX2luZm8sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja19zdW5hZGRyX2luZm8pKTsNCisJbWVtY3B5KCZwc29ja19zdW5hZGRyX2luZm8tPnNvY2thZGRyLCBwc29ja2FkZHJfdW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsJDQorCQkNCisJSU5JVF9ITElTVF9OT0RFKCZwc29ja19zdW5hZGRyX2luZm8tPmhsaXN0X25vZGUpOw0KKwlobGlzdF9hZGRfaGVhZCgmcHNvY2tfc3VuYWRkcl9pbmZvLT5obGlzdF9ub2RlLCAmZ19zdW5hZGRyX2luZm8pOwkNCit9DQorDQorc3RhdGljIGludCBzb2NrX3NvY19kZWxfaXBjX3N1bmFkZHIoc3RydWN0IHNvY2thZGRyX3VuICpwc29ja2FkZHJfdW4pDQorew0KKwlzdHJ1Y3Qgc29ja19zdW5hZGRyX2luZm8gKnA7DQorCXN0cnVjdCBobGlzdF9ub2RlICpwb3MsKm47DQorCWludCByZXQ7DQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgcG9zLCBuLCAmZ19zdW5hZGRyX2luZm8sIGhsaXN0X25vZGUpIHsJCQ0KKwkJaWYocHNvY2thZGRyX3VuLT5zdW5fcGF0aFswXSl7DQorCQkJcmV0ID0gc3RybmNtcChwLT5zb2NrYWRkci5zdW5fcGF0aCwgcHNvY2thZGRyX3VuLT5zdW5fcGF0aCwgc3RybGVuKHBzb2NrYWRkcl91bi0+c3VuX3BhdGgpKTsNCisJCX1lbHNlew0KKwkJCXJldCA9IHN0cm5jbXAoJnAtPnNvY2thZGRyLnN1bl9wYXRoWzFdLCAmcHNvY2thZGRyX3VuLT5zdW5fcGF0aFsxXSwgc3RybGVuKCZwc29ja2FkZHJfdW4tPnN1bl9wYXRoWzFdKSk7DQorCQl9CQkNCisJCQ0KKwkJaWYoKHAtPnNvY2thZGRyLnN1bl9mYW1pbHkgPT0gcHNvY2thZGRyX3VuLT5zdW5fZmFtaWx5KSAmJiAoMCA9PSByZXQpKXsNCisJCQlobGlzdF9kZWwoJnAtPmhsaXN0X25vZGUpOwkJCQ0KKwkJCWtmcmVlKHApOw0KKwkJCXNrX3NvY19pbmZvKCJzdW5fcGF0aD0lcywgZGVsIHN1Y2Vzcy4iLCBwc29ja2FkZHJfdW4tPnN1bl9wYXRoKTsNCisJCQlyZXR1cm4gMDsNCisJCX0NCisJfQ0KKwlza19zb2NfaW5mbygic3VuX3BhdGg9JXMsIGRlbCBmYWlsZWQiLCBwc29ja2FkZHJfdW4tPnN1bl9wYXRoKTsNCisJcmV0dXJuIC0xOw0KK30NCisNCiBpbnQgdW5peF9pc19pcGNfc29ja2V0KHN0cnVjdCBzb2NrICpzb2NrKQ0KIHsNCiAJaW50IHJlc3VsdDsNCkBAIC03NTUsNiArODY4LDE4IEBACiAJdXNvY2stPnJzb2NrLnJlbW90ZXNvY2tldCA9IHJlbW90ZXNvY2tldDsNCiB9DQogDQorLy+xvrXYc29ja2V0uPzQwrrzo6y4/NDCtPrA7XNvY2tldNbQcnNvY2vQxc+iDQordm9pZCB1c29ja191cGRhdGUoc3RydWN0IHNvY2sqIHNvY2ssIGludCBsb2NhbGZkLCBzdHJ1Y3Qgc29ja2V0KiBsb2NhbHNvY2tldCkNCit7DQorCXN0cnVjdCB1bml4X3NvY2sqIHVzb2NrOw0KKwlpZihOVUxMID09IHNvY2spew0KKwkJcmV0dXJuOw0KKwl9DQorCXVzb2NrID0gdW5peF9zayhzb2NrKTsNCisJdXNvY2stPnJzb2NrLmxvY2FsZmQgPSBsb2NhbGZkOw0KKwl1c29jay0+cnNvY2subG9jYWxzb2NrZXQgPSBsb2NhbHNvY2tldDsNCit9DQorDQogdm9pZCB1c29ja191cGRhdGVfcmVtb3RlX3Byb3h5X3NvY2tldChzdHJ1Y3Qgc29jayogc29jaywgc3RydWN0IHNvY2tldCogcmVtb3RlcHJveHlzb2NrZXQpDQogew0KIAlzdHJ1Y3QgdW5peF9zb2NrKiB1c29jazsNCkBAIC03OTcsNiArOTIyLDcgQEAKIAkJcHNvY2tldF9pcGMtPnNvY2stPnNrX2ZkID0gcHNvY2tldF9pcGMtPnNvY2tmZDsNCiAJCS8vc29ja19zb2Nfc2V0X3NvY2tldF9pbmZvKHBzb2NrZXRfaXBjLT5zb2NrZXQsIHBzb2NrX3JwbXNnLT5jbGllbnRzb2NrKTsNCiAJCXNvY2tfaG9sZChwc29ja2V0X2lwYy0+c29jayk7IC8vMDcwNA0KKwkJaW5pdF9wZWVyY3JlZF9wcm94eShwc29ja2V0X2lwYy0+c29jayk7DQogCQkvL7P1yry7r7T6wO1zb2NrZXS1xHVzb2Nr0MXPog0KIAkJdXNvY2tfaW5pdChwc29ja2V0X2lwYy0+c29jaywgcHNvY2tfcnBtc2ctPmNsaWVudGZkLCBwc29ja19ycG1zZy0+Y2xpZW50c29jaywgcHNvY2tldF9pcGMtPnNvY2tmZCwgcHNvY2tldF9pcGMtPnNvY2tldCwgcHNvY2tfcnBtc2ctPnNlcnZlcmZkLCBwc29ja19ycG1zZy0+c2VydmVyc29jayk7DQogCQl1c29ja191cGRhdGVfcmVtb3RlX3Byb3h5X3NvY2tldChwc29ja2V0X2lwYy0+c29jaywgcHNvY2tfcnBtc2ctPnNlcnZlcnByb3h5c29jayk7DQpAQCAtMTA4Nyw3ICsxMjEzLDcgQEAKIAkJaXBjc29ja2V0LT5sb2NhbHNvY2tldCA9IG5ld3NvY2s7DQogCQlza19zb2NfaW5mbygicmVtb3Rlc29ja2V0PSV4LCBsb2NhbHNvY2tldD0leCIsIGlwY3NvY2tldC0+cmVtb3Rlc29ja2V0LCBpcGNzb2NrZXQtPmxvY2Fsc29ja2V0KTsNCiAJfWVsc2V7DQotCQlza19zb2NfaW5mbygic29ja19zb2NfZ2V0X2lwY3NvY2tldF9ieV9wcm94eXNvY2sgZmFpbGVkLCBzb2NrPSV4Iiwgc29jayk7DQorCQlza19zb2NfaW5mbygic29ja19zb2NfZ2V0X2lwY3NvY2tldF9ieV9wcm94eXNvY2sgZmFpbGVkLCBwcm94eXNvY2s9JXgsIHNvY2s9JXgiLCBwcm94eXNvY2ssIHNvY2spOw0KIAkJcmV0dXJuIC0xOw0KIAl9DQogCXNrX3NvY19pbmZvKCJzb2NrPSV4LCBuZXdzb2NrPSV4Iiwgc29jaywgbmV3c29jayk7DQpAQCAtMTA5OCw2ICsxMjI0LDcgQEAKIAlzb2NrX3JwbXNnLm5ld3NvY2sgPSBuZXdzb2NrOw0KIAlzb2NrX3NvY19kZWxfc29ja2V0X3BlZXIoc29jaywgaXBjc29ja2V0LT5wcm94eXNvY2tldCk7DQogCXNvY2tfc29jX2luc2VydF9zb2NrZXRfcGVlcihuZXdzb2NrLCBpcGNzb2NrZXQtPnByb3h5c29ja2V0KTsNCisJdXNvY2tfdXBkYXRlKGlwY3NvY2tldC0+c29jaywgbmV3c29jay0+ZmQsIG5ld3NvY2spOw0KIAkvL25ld3NvY2stPnBlZXIgPSBzb2NrLT5wZWVyOyAvLzA3MDYNCiAJLy9zb2NrLT5wZWVyID0gTlVMTDsgLy8wNzA2DQogCXNvY2tfcnBtc2cua2V5ID0gc29ja19ycG1zZy5zZXJ2ZXJzb2NrOw0KQEAgLTE5MTgsMTQgKzIwNDUsMTkgQEAKIHsNCiAJc3RydWN0IGlwY19zb2NrZXQqIGlwY19zb2NrZXQ7DQogCXN0cnVjdCBzb2NrZXQqIHNlcnZlcnByb3h5c29jazsNCi0JaXBjX3NvY2tldCA9IHNvY2tfc29jX2dldF9pcGNzb2NrZXRfYnlfcHJveHlzb2NrKHBzb2NrX3JwbXNnLT5zZXJ2ZXJwcm94eXNvY2spOw0KKwlzZXJ2ZXJwcm94eXNvY2sgPSAoc3RydWN0IHNvY2tldCopcHNvY2tfcnBtc2ctPnNlcnZlcnByb3h5c29jazsNCisJaXBjX3NvY2tldCA9IHNvY2tfc29jX2dldF9pcGNzb2NrZXRfYnlfcHJveHlzb2NrKHNlcnZlcnByb3h5c29jay0+c2spOw0KKwlza19zb2NfaW5mbygic29ja19zb2Nfbm90aWZ5X3Byb3h5X2NoYW5nZV90b19zZXJ2ZXJfcHJvYyBzZXJ2ZXJwcm94eXNvY2s9JXgiLCBwc29ja19ycG1zZy0+c2VydmVycHJveHlzb2NrKTsNCiAJaWYoTlVMTCAhPSBpcGNfc29ja2V0KXsNCiAJCXNrX3NvY19pbmZvKCJzb2NrX3NvY19ub3RpZnlfcHJveHlfY2hhbmdlX3RvX3NlcnZlcl9wcm9jIHJlbW90ZXByb3h5c29ja2V0PSV4IiwgcHNvY2tfcnBtc2ctPmNsaWVudHByb3h5c29jayk7DQogCQlpcGNfc29ja2V0LT5yZW1vdGVwcm94eWZkID0gcHNvY2tfcnBtc2ctPmNsaWVudHByb3h5ZmQ7DQogCQlpcGNfc29ja2V0LT5yZW1vdGVwcm94eXNvY2tldCA9IHBzb2NrX3JwbXNnLT5jbGllbnRwcm94eXNvY2s7DQogCQlzZXJ2ZXJwcm94eXNvY2sgPSAoc3RydWN0IHNvY2tldCopcHNvY2tfcnBtc2ctPnNlcnZlcnByb3h5c29jazsNCiAJCXVzb2NrX3VwZGF0ZV9yZW1vdGVfcHJveHlfc29ja2V0KHNlcnZlcnByb3h5c29jay0+c2ssIHBzb2NrX3JwbXNnLT5jbGllbnRwcm94eXNvY2spOw0KLQl9CQ0KKwl9ZWxzZXsNCisJCXNrX3NvY19pbmZvKCJzb2NrX3NvY19ub3RpZnlfcHJveHlfY2hhbmdlX3RvX3NlcnZlcl9wcm9jIGlwY19zb2NrZXQgaXMgTlVMTCIpOw0KKwl9DQorCQ0KIH0NCiANCiBzdHJ1Y3Qgc29jayAqc29ja19zb2NfZmluZF9vdGhlcihzdHJ1Y3Qgc29ja2V0ICogc29ja2V0LyppbnQgZmQqLywNCkBAIC0xOTM2LDYgKzIwNjgsMTUgQEAKIAlzdHJ1Y3QgaXBjX3NvY2tldCAqcHNvY2tldF9pcGMgPSBOVUxMOw0KIAlzdHJ1Y3Qgc29ja19ycG1zZ19pbmZvICpwc29ja19ycG1zZ19pbmZvID0gTlVMTDsNCiAJaW50IGVycjsNCisJDQorCWlmKDAgPT0gc29ja2V0X3JwbXNnX2VuYWJsZSl7DQorCQlyZXR1cm4gTlVMTDsNCisJfQkNCisJCQ0KKwlpZihmYWxzZSA9PSBzb2NrX3NvY19pcGNfc3VuYWRkcl9leGlzdChzdW5uYW1lKSl7DQorCQlza19zb2NfaW5mbygic29ja19zb2NfaXBjX3N1bmFkZHJfZXhpc3QgaXMgZmFsc2UsIHN1bm5hbWU9JXMiLCBzdW5uYW1lLT5zdW5fcGF0aCk7DQorCQlyZXR1cm4gTlVMTDsgDQorCX0NCiAJLy9zdHJ1Y3Qgc29ja2V0ICpjbGlzb2NrZXQgPSBzb2NrX2dldF9sb2NhbF9zb2NrZXQoZmQsICZlcnIpOw0KIAltZW1jcHkoJnNvY2tfcnBtc2cuc29ja2FkZHIsIHN1bm5hbWUsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsNCiAJc29ja19ycG1zZy5hZGRyX2xlbiA9IGxlbjsNCkBAIC0xOTUyLDYgKzIwOTMsMTAgQEAKIAl9DQogCQ0KIAlwc29ja19ycG1zZ19pbmZvID0gc29ja19zb2NfY3JlYXRlX3JwbXNnX2luZm8oc29ja19ycG1zZy5rZXkpOw0KKwlpZihOVUxMID09IHBzb2NrX3JwbXNnX2luZm8pew0KKwkJc2tfc29jX2luZm8oInNvY2tfc29jX2ZpbmRfb3RoZXIgY3JlYXRlIHJwbXNnIGZhaWxkIFxuIik7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KIAlza19zb2NfaW5mbygic29ja19zb2NfZmluZF9vdGhlciBjbGllbnRmZD0lZCwga2V5PSV4Iiwgc29ja19ycG1zZy5jbGllbnRmZCwgc29ja19ycG1zZy5rZXkpOw0KIAlzb2NrX3NlbmRfaXBjX21zZygmc29ja19ycG1zZyk7DQogCWRvd25fdGltZW91dCgmcHNvY2tfcnBtc2dfaW5mby0+c29ja19zZW0sIG1zZWNzX3RvX2ppZmZpZXMoZ19zb2NrX3RpbWVvdXQpKTsNCkBAIC0yMzIxLDYgKzI0NjYsNDYgQEAKIAlyZXR1cm4gMDsNCiB9DQogDQordm9pZCBzb2NrX3NvY191bml4X2JpbmQoc3RydWN0IHNvY2thZGRyX3VuICpzdW5hZGRyKQ0KK3sNCisJc3RydWN0IGlwY19zb2NrZXQgKnBzb2NrZXRfaXBjID0gTlVMTDsNCisJc3RydWN0IHNvY2tfcnBtc2cgc29ja19ycG1zZyA9IHswfTsNCisJc29ja19ycG1zZy5tc2dfdHlwZSA9IE1TR19UWVBFX1VOSVhfQklORDsJCQ0KKwkNCisJbWVtY3B5KCZzb2NrX3JwbXNnLnNvY2thZGRyLCBzdW5hZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSk7DQorCXNrX3NvY19pbmZvKCJzb2NrX3NvY191bml4X2JpbmQgIHN1bmFkZHI9JXNcbiIsIHN1bmFkZHItPnN1bl9wYXRoKTsNCisJc29ja19zZW5kX2lwY19tc2coJnNvY2tfcnBtc2cpOyANCit9DQorDQoraW50IHNvY2tfc29jX3VuaXhfYmluZF9wcm9jKHN0cnVjdCBzb2NrX3JwbXNnKiBwc29ja19ycG1zZykNCit7DQorCXN0cnVjdCBzb2NrYWRkcl91biBzdW5hZGRyID0gezB9Ow0KKwltZW1jcHkoJnN1bmFkZHIsICZwc29ja19ycG1zZy0+c29ja2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsNCisJc2tfc29jX2luZm8oInNvY2tfc29jX3VuaXhfYmluZF9wcm9jICBzdW5hZGRyPSVzXG4iLCBzdW5hZGRyLnN1bl9wYXRoKTsNCisJc29ja19zb2NfaW5zZXJ0X2lwY19zdW5hZGRyKCZzdW5hZGRyKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgc29ja19zb2NfdW5peF91bmJpbmQoc3RydWN0IHNvY2thZGRyX3VuICpzdW5hZGRyKQ0KK3sNCisJc3RydWN0IGlwY19zb2NrZXQgKnBzb2NrZXRfaXBjID0gTlVMTDsNCisJc3RydWN0IHNvY2tfcnBtc2cgc29ja19ycG1zZyA9IHswfTsNCisJc29ja19ycG1zZy5tc2dfdHlwZSA9IE1TR19UWVBFX1VOSVhfVU5CSU5EOwkJDQorCQ0KKwltZW1jcHkoJnNvY2tfcnBtc2cuc29ja2FkZHIsIHN1bmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsNCisJc2tfc29jX2luZm8oInNvY2tfc29jX3VuaXhfdW5iaW5kICBzdW5hZGRyPSVzXG4iLCBzdW5hZGRyLT5zdW5fcGF0aCk7DQorCXNvY2tfc2VuZF9pcGNfbXNnKCZzb2NrX3JwbXNnKTsgDQorfQ0KKw0KK2ludCBzb2NrX3NvY191bml4X3VuYmluZF9wcm9jKHN0cnVjdCBzb2NrX3JwbXNnKiBwc29ja19ycG1zZykNCit7DQorCXN0cnVjdCBzb2NrYWRkcl91biBzdW5hZGRyID0gezB9Ow0KKwltZW1jcHkoJnN1bmFkZHIsICZwc29ja19ycG1zZy0+c29ja2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsNCisJc2tfc29jX2luZm8oInNvY2tfc29jX3VuaXhfdW5iaW5kX3Byb2MgIHN1bmFkZHI9JXNcbiIsIHN1bmFkZHIuc3VuX3BhdGgpOw0KKwlzb2NrX3NvY19kZWxfaXBjX3N1bmFkZHIoJnN1bmFkZHIpOw0KKwlyZXR1cm4gMDsNCit9DQorDQogc3RhdGljIGludCBzb2NrX2NyZWF0ZV9pY3BfY2hhbm5lbChUX1pEcnZScE1zZ19BY3RvcklEIGNvcmVfaWQsIFRfWkRydlJwTXNnX0NoSUQgY2hhbm5lbF9pZCwgdW5zaWduZWQgaW50IGNoYW5uZWxfc2l6ZSkNCiB7DQogICAgIGludCByZXR2YWw7DQpAQCAtMjQzOCw2ICsyNjIzLDEyIEBACiAJCWNhc2UgTVNHX1RZUEVfTk9USUZZX1BST1hZX0NIQU5HRToNCiAJCQlzb2NrX3NvY19ub3RpZnlfcHJveHlfY2hhbmdlX3RvX3NlcnZlcl9wcm9jKHNvY2tfcnBtc2cpOw0KIAkJCWJyZWFrOw0KKwkJY2FzZSBNU0dfVFlQRV9VTklYX0JJTkQ6DQorCQkJc29ja19zb2NfdW5peF9iaW5kX3Byb2Moc29ja19ycG1zZyk7DQorCQkJYnJlYWs7DQorCQljYXNlIE1TR19UWVBFX1VOSVhfVU5CSU5EOg0KKwkJCXNvY2tfc29jX3VuaXhfdW5iaW5kX3Byb2Moc29ja19ycG1zZyk7DQorCQkJYnJlYWs7DQogCQlkZWZhdWx0Og0KIAkJICAgIGJyZWFrOw0KIAl9DQpAQCAtMjYxOCw2ICsyODA5LDcgQEAKIAlJTklUX0hMSVNUX0hFQUQoJmdfaXBjX3NvY2tldHMpOw0KIAlJTklUX0hMSVNUX0hFQUQoJmdfc29ja19ycG1zZ19pbmZvKTsNCiAJSU5JVF9ITElTVF9IRUFEKCZnX3NvY2tldHNfaW5mbyk7DQorCUlOSVRfSExJU1RfSEVBRCgmZ19zdW5hZGRyX2luZm8pOw0KIAlyZXR2YWwgPSBzb2NrX2NyZWF0ZV9pY3BfY2hhbm5lbChDQVBfSUQsIElDUF9DSE5fU09DS0VULCBJQ1BfQ0hBTk5FTF9TSVpFKTsNCiAJaWYocmV0dmFsIDwgMCkgew0KIAkJc2tfc29jX2VycigiQ3JlYXRlIEljcENoYW5uZWwgY2hhbm5lbF8zMiBmYWlsLiIpOw0KQEAgLTI2NDMsNyArMjgzNSwxOSBAQAogCQlyZXR1cm4gUFRSX0VSUih0aCk7DQogCX0NCiAJZ19zb2NrX2Nobl9pbmZvLnJlY3ZfdGhyZWFkX2luZm8ucF90aHJlYWQgPSB0aDsNCi0JDQorDQorCWlwY3NvY2tldF9kZWJ1Z2ZzX2Rpcl9lbnRyeV9yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJpcGNfc29ja2V0IiwgTlVMTCk7DQorCWlmIChpcGNzb2NrZXRfZGVidWdmc19kaXJfZW50cnlfcm9vdCkNCisJCWlwY3NvY2tldF9kZWJ1Z2ZzX2Rpcl9lbnRyeV9wcm9jID0gZGVidWdmc19jcmVhdGVfZGlyKCJwcm9jIiwNCisJCQkJCQkgaXBjc29ja2V0X2RlYnVnZnNfZGlyX2VudHJ5X3Jvb3QpOw0KKw0KKwlpZiAoaXBjc29ja2V0X2RlYnVnZnNfZGlyX2VudHJ5X3Jvb3QpIHsNCisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImlwY19zb2NrZXRfaW5mbyIsDQorCQkJCSAgICAwNDQ0LA0KKwkJCQkgICAgaXBjc29ja2V0X2RlYnVnZnNfZGlyX2VudHJ5X3Jvb3QsDQorCQkJCSAgICBOVUxMLA0KKwkJCQkgICAgJmlwY19zb2NrZXRfaW5mb19mb3BzKTsNCisJfQ0KIAlyZXR1cm4gMDsNCiB9DQogDQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L3VuaXgvYWZfdW5peC5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IDAxM2I2ODUuLjMwYTM3ZDAgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC91bml4L2FmX3VuaXguYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvdW5peC9hZl91bml4LmMKQEAgLTExOSw2ICsxMTksOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldF9ycG1zZy5oPgogaW50IHNvY2tldF9ycG1zZ19kZWJ1ZyA9IDA7CiBtb2R1bGVfcGFyYW0oc29ja2V0X3JwbXNnX2RlYnVnLCBpbnQsIDA2NDQpOworCitpbnQgc29ja2V0X3JwbXNnX2VuYWJsZSA9IDE7Cittb2R1bGVfcGFyYW0oc29ja2V0X3JwbXNnX2VuYWJsZSwgaW50LCAwNjQ0KTsKICNlbmRpZgogc3RydWN0IGhsaXN0X2hlYWQgdW5peF9zb2NrZXRfdGFibGVbVU5JWF9IQVNIX1NJWkUgKyAxXTsKIEVYUE9SVF9TWU1CT0xfR1BMKHVuaXhfc29ja2V0X3RhYmxlKTsKQEAgLTIwMCw4ICsyMDMsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHVuaXhfcmVsZWFzZV9hZGRyKHN0cnVjdCB1bml4X2FkZHJlc3MgKmFkZHIpCiB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFkZHItPnJlZmNudCkpCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFkZHItPnJlZmNudCkpeworI2lmZGVmIENPTkZJR19JUENfU09DS0VUCisJCQlzb2NrX3NvY191bml4X3VuYmluZChhZGRyLT5uYW1lKTsKKyNlbmRpZgogCQlrZnJlZShhZGRyKTsKKwl9CisJCQogfQogCiAvKgpAQCAtOTQzLDcgKzk1MSw5IEBACiAJX191bml4X3JlbW92ZV9zb2NrZXQoc2spOwogCXUtPmFkZHIgPSBhZGRyOwogCV9fdW5peF9pbnNlcnRfc29ja2V0KGxpc3QsIHNrKTsKLQorI2lmZGVmIENPTkZJR19JUENfU09DS0VUCisJCXNvY2tfc29jX3VuaXhfYmluZChzdW5hZGRyKTsKKyNlbmRpZgogb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmdW5peF90YWJsZV9sb2NrKTsKIG91dF91cDoKQEAgLTI2MTcsNiArMjYyNywxMCBAQAogCXVuaXhfcmVsZWFzZV9zb2NrKHNrLCAwKTsKIH0KIAordm9pZCBpbml0X3BlZXJjcmVkX3Byb3h5KHN0cnVjdCBzb2NrICpzayl7CisJaW5pdF9wZWVyY3JlZChzayk7Cit9CisKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgdW5peF9mYW1pbHlfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggNDAzYWY2Mi4uMzNmZDllNSAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L3hmcm0veGZybV9wb2xpY3kuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC04MTMsNyArODEzLDcgQEAKIAkgICAgd2Fsay0+dHlwZSAhPSBYRlJNX1BPTElDWV9UWVBFX0FOWSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobGlzdF9lbXB0eSgmd2Fsay0+d2Fsay5hbGwpICYmIHdhbGstPnNlcSAhPSAwKQorCWlmICgobGlzdF9lbXB0eSgmd2Fsay0+d2Fsay5hbGwpICYmIHdhbGstPnNlcSAhPSAwKSB8fCB3YWxrLT53YWxrLmFsbC5uZXh0ID09IDApCiAJCXJldHVybiAwOwogCiAJd3JpdGVfbG9ja19iaCgmeGZybV9wb2xpY3lfbG9jayk7CkBAIC04NTgsNyArODU4LDcgQEAKIAogdm9pZCB4ZnJtX3BvbGljeV93YWxrX2RvbmUoc3RydWN0IHhmcm1fcG9saWN5X3dhbGsgKndhbGspCiB7Ci0JaWYgKGxpc3RfZW1wdHkoJndhbGstPndhbGsuYWxsKSkKKwlpZiAobGlzdF9lbXB0eSgmd2Fsay0+d2Fsay5hbGwpIHx8IHdhbGstPndhbGsuYWxsLm5leHQgPT0gMCkKIAkJcmV0dXJuOwogCiAJd3JpdGVfbG9ja19iaCgmeGZybV9wb2xpY3lfbG9jayk7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggYmM1MTJkMy4uODU2M2Y0ZSAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L3hmcm0veGZybV9zdGF0ZS5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtMTU2Niw3ICsxNTY2LDcgQEAKIAlzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp4OwogCWludCBlcnIgPSAwOwogCi0JaWYgKHdhbGstPnNlcSAhPSAwICYmIGxpc3RfZW1wdHkoJndhbGstPmFsbCkpCisJaWYgKCh3YWxrLT5zZXEgIT0gMCAmJiBsaXN0X2VtcHR5KCZ3YWxrLT5hbGwpKSB8fCB3YWxrLT5hbGwubmV4dCA9PSAwKQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKQEAgLTE2MDksNyArMTYwOSw3IEBACiAKIHZvaWQgeGZybV9zdGF0ZV93YWxrX2RvbmUoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqd2FsaykKIHsKLQlpZiAobGlzdF9lbXB0eSgmd2Fsay0+YWxsKSkKKwlpZiAobGlzdF9lbXB0eSgmd2Fsay0+YWxsKSB8fCB3YWxrLT5hbGwubmV4dCA9PSAwKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQveGZybS94ZnJtX3VzZXIuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IDA4ODk4NTUuLmMyZDFlOTMgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC94ZnJtL3hmcm1fdXNlci5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC04NTgsNyArODU4LDYgQEAKIHN0YXRpYyBpbnQgeGZybV9kdW1wX3NhX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCXN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKndhbGsgPSAoc3RydWN0IHhmcm1fc3RhdGVfd2FsayAqKSAmY2ItPmFyZ3NbMV07Ci0JaWYoY2ItPmFyZ3NbMV0pCiAJeGZybV9zdGF0ZV93YWxrX2RvbmUod2Fsayk7CiAJcmV0dXJuIDA7CiB9CkBAIC04NjksOCArODY4LDYgQEAKIAlzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrICp3YWxrID0gKHN0cnVjdCB4ZnJtX3N0YXRlX3dhbGsgKikgJmNiLT5hcmdzWzFdOwogCXN0cnVjdCB4ZnJtX2R1bXBfaW5mbyBpbmZvOwogCi0JaWYoY2ItPmFyZ3NbMV0gPT0gMCkKLQkJcmV0dXJuIDA7CiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGZybV9zdGF0ZV93YWxrKSA+CiAJCSAgICAgc2l6ZW9mKGNiLT5hcmdzKSAtIHNpemVvZihjYi0+YXJnc1swXSkpOwogCkBAIC0xNTM4LDcgKzE1MzUsNyBAQAogc3RhdGljIGludCB4ZnJtX2R1bXBfcG9saWN5X2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCXN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICp3YWxrID0gKHN0cnVjdCB4ZnJtX3BvbGljeV93YWxrICopICZjYi0+YXJnc1sxXTsKLQlpZihjYi0+YXJnc1sxXSkKKwogCXhmcm1fcG9saWN5X3dhbGtfZG9uZSh3YWxrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NDksOCArMTU0Niw2IEBACiAJc3RydWN0IHhmcm1fcG9saWN5X3dhbGsgKndhbGsgPSAoc3RydWN0IHhmcm1fcG9saWN5X3dhbGsgKikgJmNiLT5hcmdzWzFdOwogCXN0cnVjdCB4ZnJtX2R1bXBfaW5mbyBpbmZvOwogCi0JaWYoY2ItPmFyZ3NbMV0gPT0gMCkKLQkJcmV0dXJuIDA7CiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsaykgPgogCQkgICAgIHNpemVvZihjYi0+YXJncykgLSBzaXplb2YoY2ItPmFyZ3NbMF0pKTsKIAo=