ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDZkYTFjZGIuLmE0MzQ0NGYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjMsNiArMjMsNyBAQAogZ2l0LWNsb25lCiBnaXQtY29tbWl0CiBnaXQtY29tbWl0LXRyZWUKK2dpdC1jb25maWcKIGdpdC1jb252ZXJ0LW9iamVjdHMKIGdpdC1jb3VudC1vYmplY3RzCiBnaXQtY3ZzZXhwb3J0Y29tbWl0CkBAIC00MSw2ICs0Miw3IEBACiBnaXQtZm10LW1lcmdlLW1zZwogZ2l0LWZvci1lYWNoLXJlZgogZ2l0LWZvcm1hdC1wYXRjaAorZ2l0LWZzY2sKIGdpdC1mc2NrLW9iamVjdHMKIGdpdC1nYwogZ2l0LWdldC10YXItY29tbWl0LWlkCmRpZmYgLS1naXQgYS8ubWFpbG1hcCBiLy5tYWlsbWFwCmluZGV4IDJjNjU4ZjQuLmM3YTNhNzUgMTAwNjQ0Ci0tLSBhLy5tYWlsbWFwCisrKyBiLy5tYWlsbWFwCkBAIC0zMCw3ICszMCw5IEBACiBTYW50aSBCw6lqYXIgPHNiZWphckBnbWFpbC5jb20+CiBTZWFuIEVzdGFicm9va3MgPHNlYW5sa21sQHN5bXBhdGljby5jYT4KIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KK1RoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CiBUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+CitVd2UgS2xlaW5lLUvDtm5pZyA8emVpc2JlcmdAaW5mb3JtYXRpay51bmktZnJlaWJ1cmcuZGU+CiBWaWxsZSBTa3l0dMOkIDxzY29wQHhlbWFjcy5vcmc+CiBZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CiBhbm9ueW1vdXMgPGxpbnV4QGhvcml6b24uY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlCmluZGV4IGM4N2M2MWEuLjZhNTEzMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vLmdpdGlnbm9yZQorKysgYi9Eb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKQEAgLTQsNCArNCw0IEBACiAqLjcKIGhvd3RvLWluZGV4LnR4dAogZG9jLmRlcAotUkVBRE1FCitjbWRzLSoudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQppbmRleCBjMmVlNWI0Li41ZTAxMmY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTcxLDE0ICs3MSwyNCBAQAogCiAtaW5jbHVkZSBkb2MuZGVwCiAKLWdpdC43OiBSRUFETUUKK2NtZHNfdHh0ID0gY21kcy1hbmNpbGxhcnlpbnRlcnJvZ2F0b3JzLnR4dCBcCisJY21kcy1hbmNpbGxhcnltYW5pcHVsYXRvcnMudHh0IFwKKwljbWRzLW1haW5wb3JjZWxhaW4udHh0IFwKKwljbWRzLXBsdW1iaW5naW50ZXJyb2dhdG9ycy50eHQgXAorCWNtZHMtcGx1bWJpbmdtYW5pcHVsYXRvcnMudHh0IFwKKwljbWRzLXN5bmNoaW5ncmVwb3NpdG9yaWVzLnR4dCBcCisJY21kcy1zeW5jaGVscGVycy50eHQgXAorCWNtZHMtcHVyZWhlbHBlcnMudHh0IFwKKwljbWRzLWZvcmVpZ25zY21pbnRlcmZhY2UudHh0CiAKLVJFQURNRTogLi4vUkVBRE1FCi0JY3AgJDwgJEAKKyQoY21kc190eHQpOiBjbWQtbGlzdC5wZXJsICQoTUFOMV9UWFQpCisJcGVybCAuL2NtZC1saXN0LnBlcmwKIAorZ2l0LjcgZ2l0Lmh0bWw6IGdpdC50eHQgY29yZS1pbnRyby50eHQKIAogY2xlYW46Ci0Jcm0gLWYgKi54bWwgKi5odG1sICouMSAqLjcgaG93dG8taW5kZXgudHh0IGhvd3RvLyouaHRtbCBkb2MuZGVwIFJFQURNRQorCXJtIC1mICoueG1sICouaHRtbCAqLjEgKi43IGhvd3RvLWluZGV4LnR4dCBob3d0by8qLmh0bWwgZG9jLmRlcAorCXJtIC1mICQoY21kc190eHQpCiAKICUuaHRtbCA6ICUudHh0CiAJYXNjaWlkb2MgLWIgeGh0bWwxMSAtZCBtYW5wYWdlIC1mIGFzY2lpZG9jLmNvbmYgJDwKQEAgLTk1LDggKzEwNSw2IEBACiB1c2VyLW1hbnVhbC5odG1sOiB1c2VyLW1hbnVhbC54bWwKIAl4bWx0byAtbSAvZXRjL2FzY2lpZG9jL2RvY2Jvb2steHNsL3hodG1sLnhzbCBodG1sLW5vY2h1bmtzICQ8CiAKLWdpdC5odG1sOiBnaXQudHh0IFJFQURNRQotCiBnbG9zc2FyeS5odG1sIDogZ2xvc3NhcnkudHh0IHNvcnRfZ2xvc3NhcnkucGwKIAljYXQgJDwgfCBcCiAJcGVybCBzb3J0X2dsb3NzYXJ5LnBsIHwgXApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggNjQ2YjZlNy4uY2U4NWQwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0yMyw3ICsyMyw4IEBACiAKIE9oLCBhbm90aGVyIHRoaW5nLiAgSSBhbSBwaWNreSBhYm91dCB3aGl0ZXNwYWNlcy4gIE1ha2Ugc3VyZSB5b3VyCiBjaGFuZ2VzIGRvIG5vdCB0cmlnZ2VyIGVycm9ycyB3aXRoIHRoZSBzYW1wbGUgcHJlLWNvbW1pdCBob29rIHNoaXBwZWQKLWluIHRlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC4KK2luIHRlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC4gIFRvIGhlbHAgZW5zdXJlIHRoaXMgZG9lcyBub3QgaGFwcGVuLAorcnVuIGdpdCBkaWZmIC0tY2hlY2sgb24geW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY29tbWl0LgogCiAKICgyKSBHZW5lcmF0ZSB5b3VyIHBhdGNoIHVzaW5nIGdpdCB0b29scyBvdXQgb2YgeW91ciBjb21taXRzLgpAQCAtNzIsNyArNzMsOSBAQAogbWF0ZXJpYWwgYmV0d2VlbiB0aGUgdGhyZWUgZGFzaCBsaW5lcyBhbmQgdGhlIGRpZmZzdGF0LgogCiBEbyBub3QgYXR0YWNoIHRoZSBwYXRjaCBhcyBhIE1JTUUgYXR0YWNobWVudCwgY29tcHJlc3NlZCBvciBub3QuCi1EbyBub3QgbGV0IHlvdXIgZS1tYWlsIGNsaWVudCBzZW5kIHF1b3RlZC1wcmludGFibGUuICBNYW55CitEbyBub3QgbGV0IHlvdXIgZS1tYWlsIGNsaWVudCBzZW5kIHF1b3RlZC1wcmludGFibGUuICBEbyBub3QgbGV0Cit5b3VyIGUtbWFpbCBjbGllbnQgc2VuZCBmb3JtYXQ9Zmxvd2VkIHdoaWNoIHdvdWxkIGRlc3Ryb3kKK3doaXRlc3BhY2VzIGluIHlvdXIgcGF0Y2hlcy4gTWFueQogcG9wdWxhciBlLW1haWwgYXBwbGljYXRpb25zIHdpbGwgbm90IGFsd2F5cyB0cmFuc21pdCBhIE1JTUUKIGF0dGFjaG1lbnQgYXMgcGxhaW4gdGV4dCwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gY29tbWVudCBvbgogeW91ciBjb2RlLiAgQSBNSU1FIGF0dGFjaG1lbnQgYWxzbyB0YWtlcyBhIGJpdCBtb3JlIHRpbWUgdG8KQEAgLTMxMiwzICszMTUsMTkgQEAKIAltYWlsLmlkZW50aXR5LmRlZmF1bHQuY29tcG9zZV9odG1sCT0+IGZhbHNlCiAJbWFpbC5pZGVudGl0eS5pZD8uY29tcG9zZV9odG1sCQk9PiBmYWxzZQogCisKKworR251cworLS0tLQorCisnfCcgaW4gdGhlICpTdW1tYXJ5KiBidWZmZXIgY2FuIGJlIHVzZWQgdG8gcGlwZSB0aGUgY3VycmVudAorbWVzc2FnZSB0byBhbiBleHRlcm5hbCBwcm9ncmFtLCBhbmQgdGhpcyBpcyBhIGhhbmR5IHdheSB0byBkcml2ZQorImdpdCBhbSIuICBIb3dldmVyLCBpZiB0aGUgbWVzc2FnZSBpcyBNSU1FIGVuY29kZWQsIHdoYXQgaXMKK3BpcGVkIGludG8gdGhlIHByb2dyYW0gaXMgdGhlIHJlcHJlc2VudGF0aW9uIHlvdSBzZWUgaW4geW91cgorKkFydGljbGUqIGJ1ZmZlciBhZnRlciB1bndyYXBwaW5nIE1JTUUuICBUaGlzIGlzIG9mdGVuIG5vdCB3aGF0Cit5b3Ugd291bGQgd2FudCBmb3IgdHdvIHJlYXNvbnMuICBJdCB0ZW5kcyB0byBzY3JldyB1cCBub24gQVNDSUkKK2NoYXJhY3RlcnMgKG1vc3Qgbm90YWJseSBpbiBwZW9wbGUncyBuYW1lcyksIGFuZCBhbHNvCit3aGl0ZXNwYWNlcyAoZmF0YWwgaW4gcGF0Y2hlcykuICBSdW5uaW5nICdDLXUgZycgdG8gZGlzcGxheSB0aGUKK21lc3NhZ2UgaW4gcmF3IGZvcm0gYmVmb3JlIHVzaW5nICd8JyB0byBydW4gdGhlIHBpcGUgY2FuIHdvcmsKK3RoaXMgcHJvYmxlbSBhcm91bmQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY21kLWxpc3QucGVybCBiL0RvY3VtZW50YXRpb24vY21kLWxpc3QucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZGJhOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jbWQtbGlzdC5wZXJsCkBAIC0wLDAgKzEsMTg2IEBACisjCisKK3N1YiBmb3JtYXRfb25lIHsKKwlteSAoJG91dCwgJG5hbWUpID0gQF87CisJbXkgKCRzdGF0ZSwgJGRlc2NyaXB0aW9uKTsKKwlvcGVuIEksICc8JywgIiRuYW1lLnR4dCIgb3IgZGllICJObyBzdWNoIGZpbGUgJG5hbWUudHh0IjsKKwl3aGlsZSAoPEk+KSB7CisJCWlmICgvXk5BTUUkLykgeworCQkJJHN0YXRlID0gMTsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRzdGF0ZSA9PSAxICYmIC9eLS0tLSQvKSB7CisJCQkkc3RhdGUgPSAyOworCQkJbmV4dDsKKwkJfQorCQluZXh0IGlmICgkc3RhdGUgIT0gMik7CisJCWNob21wOworCQkkZGVzY3JpcHRpb24gPSAkXzsKKwkJbGFzdDsKKwl9CisJY2xvc2UgSTsKKwlpZiAoIWRlZmluZWQgJGRlc2NyaXB0aW9uKSB7CisJCWRpZSAiTm8gZGVzY3JpcHRpb24gZm91bmQgaW4gJG5hbWUudHh0IjsKKwl9CisJaWYgKG15ICgkdmVyaWZ5X25hbWUsICR0ZXh0KSA9ICgkZGVzY3JpcHRpb24gPX4gL14oJG5hbWUpIC0gKC4qKS8pKSB7CisJCXByaW50ICRvdXQgImdpdGxpbms6JG5hbWVcWzFcXTo6XG4iOworCQlwcmludCAkb3V0ICJcdCR0ZXh0LlxuXG4iOworCX0KKwllbHNlIHsKKwkJZGllICJEZXNjcmlwdGlvbiBkb2VzIG5vdCBtYXRjaCAkbmFtZTogJGRlc2NyaXB0aW9uIjsKKwl9Cit9CisKK215ICVjbWRzID0gKCk7Cit3aGlsZSAoPERBVEE+KSB7CisJbmV4dCBpZiAvXiMvOworCisJY2hvbXA7CisJbXkgKCRuYW1lLCAkY2F0KSA9IC9eKFxTKylccysoLiopJC87CisJcHVzaCBAeyRjbWRzeyRjYXR9fSwgJG5hbWU7Cit9CisKK2ZvciBteSAkY2F0IChxdyhhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCisJCWFuY2lsbGFyeW1hbmlwdWxhdG9ycworCQltYWlucG9yY2VsYWluCisJCXBsdW1iaW5naW50ZXJyb2dhdG9ycworCQlwbHVtYmluZ21hbmlwdWxhdG9ycworCQlzeW5jaGluZ3JlcG9zaXRvcmllcworCQlmb3JlaWduc2NtaW50ZXJmYWNlCisJCXB1cmVoZWxwZXJzCisJCXN5bmNoZWxwZXJzKSkgeworCW15ICRvdXQgPSAiY21kcy0kY2F0LnR4dCI7CisJb3BlbiBPLCAnPicsICIkb3V0KyIgb3IgZGllICJDYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAkb3V0KyI7CisJZm9yIChAeyRjbWRzeyRjYXR9fSkgeworCQlmb3JtYXRfb25lKFwqTywgJF8pOworCX0KKwljbG9zZSBPOworCXJlbmFtZSAiJG91dCsiLCAiJG91dCI7Cit9CisKK19fREFUQV9fCitnaXQtYWRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1hbm5vdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtYXBwbHltYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWFwcGx5cGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtYXBwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1hcmNoaW1wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtYXJjaGl2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWJpc2VjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1ibGFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWNhdC1maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWNoZWNrb3V0LWluZGV4ICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtY2hlY2tvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWNoZWNrLXJlZi1mb3JtYXQgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY2hlcnJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWNoZXJyeS1waWNrICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2xvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWNvbW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jb21taXQtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LWNvbnZlcnQtb2JqZWN0cyAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LWNvdW50LW9iamVjdHMgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1jdnNleHBvcnRjb21taXQgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtY3ZzaW1wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LWN2c3NlcnZlciAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1kYWVtb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LWRlc2NyaWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1kaWZmLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmLWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtZGlmZi1zdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZGlmZi10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWZldGNoLXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtZm10LW1lcmdlLW1zZyAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1mb3ItZWFjaC1yZWYgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1mb3JtYXQtcGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtZnNjawkgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtZ2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWdldC10YXItY29tbWl0LWlkICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1ncmVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtaGFzaC1vYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1odHRwLWZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LWh0dHAtcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtaW1hcC1zZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LWluZGV4LXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWluc3Rhd2ViICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtbG9jYWwtZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hpbmdyZXBvc2l0b3JpZXMKK2dpdC1sb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtbG9zdC1mb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtbHMtZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtbHMtcmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtbHMtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtbWFpbGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1tYWlsc3BsaXQgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LW1lcmdlLWJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW1lcmdlLWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtbWVyZ2UtaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1tZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtbWVyZ2Utb25lLWZpbGUgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1tZXJnZS10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtbWt0YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1ta3RyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LW12ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1uYW1lLXJldiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1wYWNrLW9iamVjdHMgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXBhY2stcmVkdW5kYW50ICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXBhY2stcmVmcyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LXBhcnNlLXJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtcGF0Y2gtaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1wZWVrLXJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LXBydW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeW1hbmlwdWxhdG9ycworZ2l0LXBydW5lLXBhY2tlZCAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1xdWlsdGltcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcmVhZC10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1yZWJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtcmVjZWl2ZS1wYWNrICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1yZWZsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1yZWxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1yZXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1yZXF1ZXN0LXB1bGwgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcmVyZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1yZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXJldi1saXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXJldi1wYXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtcnVuc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXNlbmQtZW1haWwgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1zZW5kLXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LXNoZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtc2hvcnRsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXNob3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1zaG93LWJyYW5jaCAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtc2hvdy1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtc2hvdy1yZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtc2gtc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1zc2gtZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LXNzaC11cGxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXN0cmlwc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtc3ZuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LXN2bmltcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1zeW1ib2xpYy1yZWYgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC10YXItdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC11bnBhY2stZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC11bnBhY2stb2JqZWN0cyAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXVwZGF0ZS1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtdXBkYXRlLXJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC11cGRhdGUtc2VydmVyLWluZm8gICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LXVwbG9hZC1hcmNoaXZlICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtdXBsb2FkLXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC12YXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC12ZXJpZnktcGFjayAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC12ZXJpZnktdGFnICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtd2hhdGNoYW5nZWQgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXdyaXRlLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKaW5kZXggZjdkYmE4OS4uZTVlMDE5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dApAQCAtMiwyMSArMiw4NCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBnaXQgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIHZhcmlhYmxlcyB0aGF0IGFmZmVjdAotdGhlIGdpdCBjb21tYW5kJ3MgYmVoYXZpb3IuIFRoZXkgY2FuIGJlIHVzZWQgYnkgYm90aCB0aGUgZ2l0IHBsdW1iaW5nCit0aGUgZ2l0IGNvbW1hbmQncyBiZWhhdmlvci4gYC5naXQvY29uZmlnYCBmaWxlIGZvciBlYWNoIHJlcG9zaXRvcnkKK2lzIHVzZWQgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aGF0IHJlcG9zaXRvcnksIGFuZAorYCRIT01FLy5naXRjb25maWdgIGlzIHVzZWQgdG8gc3RvcmUgcGVyIHVzZXIgaW5mb3JtYXRpb24gdG8gZ2l2ZQorZmFsbGJhY2sgdmFsdWVzIGZvciBgLmdpdC9jb25maWdgIGZpbGUuCisKK1RoZXkgY2FuIGJlIHVzZWQgYnkgYm90aCB0aGUgZ2l0IHBsdW1iaW5nCiBhbmQgdGhlIHBvcmNlbGFpbnMuIFRoZSB2YXJpYWJsZXMgYXJlIGRpdmlkZWQgaW50byBzZWN0aW9ucywgd2hlcmUKIGluIHRoZSBmdWxseSBxdWFsaWZpZWQgdmFyaWFibGUgbmFtZSB0aGUgdmFyaWFibGUgaXRzZWxmIGlzIHRoZSBsYXN0CiBkb3Qtc2VwYXJhdGVkIHNlZ21lbnQgYW5kIHRoZSBzZWN0aW9uIG5hbWUgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGxhc3QKIGRvdC4gVGhlIHZhcmlhYmxlIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBvbmx5IGFscGhhbnVtZXJpYwogY2hhcmFjdGVycyBhcmUgYWxsb3dlZC4gU29tZSB2YXJpYWJsZXMgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcy4KIAorU3ludGF4Cit+fn5+fn4KKwogVGhlIHN5bnRheCBpcyBmYWlybHkgZmxleGlibGUgYW5kIHBlcm1pc3NpdmU7IHdoaXRlc3BhY2VzIGFyZSBtb3N0bHkKLWlnbm9yZWQuIFRoZSAnIycgYW5kICc7JyBjaGFyYWN0ZXJzIGJlZ2luIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgbGluZSwKLWJsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLCBsaW5lcyBjb250YWluaW5nIHN0cmluZ3MgZW5jbG9zZWQgaW4gc3F1YXJlCi1icmFja2V0cyBzdGFydCBzZWN0aW9ucyBhbmQgYWxsIHRoZSBvdGhlciBsaW5lcyBhcmUgcmVjb2duaXplZAotYXMgc2V0dGluZyB2YXJpYWJsZXMsIGluIHRoZSBmb3JtICduYW1lID0gdmFsdWUnLiBJZiB0aGVyZSBpcyBubyBlcXVhbAotc2lnbiBvbiB0aGUgbGluZSwgdGhlIGVudGlyZSBsaW5lIGlzIHRha2VuIGFzICduYW1lJyBhbmQgdGhlIHZhcmlhYmxlCi1pcyByZWNvZ25pemVkIGFzIGJvb2xlYW4gInRydWUiLiBTdHJpbmcgdmFsdWVzIG1heSBiZSBlbnRpcmVseSBvciBwYXJ0aWFsbHkKLWVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXM7IHNvbWUgdmFyaWFibGVzIG1heSByZXF1aXJlIHNwZWNpYWwgdmFsdWUgZm9ybWF0LgoraWdub3JlZC4gIFRoZSAnIycgYW5kICc7JyBjaGFyYWN0ZXJzIGJlZ2luIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgbGluZSwKK2JsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLgorCitUaGUgZmlsZSBjb25zaXN0cyBvZiBzZWN0aW9ucyBhbmQgdmFyaWFibGVzLiAgQSBzZWN0aW9uIGJlZ2lucyB3aXRoCit0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBpbiBzcXVhcmUgYnJhY2tldHMgYW5kIGNvbnRpbnVlcyB1bnRpbCB0aGUgbmV4dAorc2VjdGlvbiBiZWdpbnMuICBTZWN0aW9uIG5hbWVzIGFyZSBub3QgY2FzZSBzZW5zaXRpdmUuICBPbmx5IGFscGhhbnVtZXJpYworY2hhcmFjdGVycywgJ2AtYCcgYW5kICdgLmAnIGFyZSBhbGxvd2VkIGluIHNlY3Rpb24gbmFtZXMuICBFYWNoIHZhcmlhYmxlCittdXN0IGJlbG9uZyB0byBzb21lIHNlY3Rpb24sIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgbXVzdCBiZSBzZWN0aW9uCitoZWFkZXIgYmVmb3JlIGZpcnN0IHNldHRpbmcgb2YgYSB2YXJpYWJsZS4KKworU2VjdGlvbnMgY2FuIGJlIGZ1cnRoZXIgZGl2aWRlZCBpbnRvIHN1YnNlY3Rpb25zLiAgVG8gYmVnaW4gYSBzdWJzZWN0aW9uCitwdXQgaXRzIG5hbWUgaW4gZG91YmxlIHF1b3Rlcywgc2VwYXJhdGVkIGJ5IHNwYWNlIGZyb20gdGhlIHNlY3Rpb24gbmFtZSwKK2luIHRoZSBzZWN0aW9uIGhlYWRlciwgbGlrZSBpbiBleGFtcGxlIGJlbG93OgorCistLS0tLS0tLQorCVtzZWN0aW9uICJzdWJzZWN0aW9uIl0KKworLS0tLS0tLS0KKworU3Vic2VjdGlvbiBuYW1lcyBjYW4gY29udGFpbiBhbnkgY2hhcmFjdGVycyBleGNlcHQgbmV3bGluZSAoZG91YmxlcXVvdGUKKydgImAnIGFuZCBiYWNrc2xhc2ggaGF2ZSB0byBiZSBlc2NhcGVkIGFzICdgXCJgJyBhbmQgJ2BcXGAnLAorcmVzcGVjaXR2ZWx5KSBhbmQgYXJlIGNhc2Ugc2Vuc2l0aXZlLiAgU2VjdGlvbiBoZWFkZXIgY2Fubm90IHNwYW4gbXVsdGlwbGUKK2xpbmVzLiAgVmFyaWFibGVzIG1heSBiZWxvbmcgZGlyZWN0bHkgdG8gYSBzZWN0aW9uIG9yIHRvIGEgZ2l2ZW4gc3Vic2VjdGlvbi4KK1lvdSBjYW4gaGF2ZSBgW3NlY3Rpb25dYCBpZiB5b3UgaGF2ZSBgW3NlY3Rpb24gInN1YnNlY3Rpb24iXWAsIGJ1dCB5b3UKK2Rvbid0IG5lZWQgdG8uCisKK1RoZXJlIGlzIGFsc28gKGNhc2UgaW5zZW5zaXRpdmUpIGFsdGVybmF0aXZlIGBbc2VjdGlvbi5zdWJzZWN0aW9uXWAgc3ludGF4LgorSW4gdGhpcyBzeW50YXggc3Vic2VjdGlvbiBuYW1lcyBmb2xsb3cgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZvciBzZWN0aW9uCituYW1lLgorCitBbGwgdGhlIG90aGVyIGxpbmVzIGFyZSByZWNvZ25pemVkIGFzIHNldHRpbmcgdmFyaWFibGVzLCBpbiB0aGUgZm9ybQorJ25hbWUgPSB2YWx1ZScuICBJZiB0aGVyZSBpcyBubyBlcXVhbCBzaWduIG9uIHRoZSBsaW5lLCB0aGUgZW50aXJlIGxpbmUKK2lzIHRha2VuIGFzICduYW1lJyBhbmQgdGhlIHZhcmlhYmxlIGlzIHJlY29nbml6ZWQgYXMgYm9vbGVhbiAidHJ1ZSIuCitUaGUgdmFyaWFibGUgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIG9ubHkgYWxwaGFudW1lcmljCitjaGFyYWN0ZXJzIGFuZCAnYC1gJyBhcmUgYWxsb3dlZC4gIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIHZhbHVlCitmb3IgYSBnaXZlbiB2YXJpYWJsZTsgd2Ugc2F5IHRoZW4gdGhhdCB2YXJpYWJsZSBpcyBtdWx0aXZhbHVlZC4KKworTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBhIHZhcmlhYmxlIHZhbHVlIGlzIGRpc2NhcmRlZC4KK0ludGVybmFsIHdoaXRlc3BhY2Ugd2l0aGluIGEgdmFyaWFibGUgdmFsdWUgaXMgcmV0YWluZWQgdmVyYmF0aW0uCisKK1RoZSB2YWx1ZXMgZm9sbG93aW5nIHRoZSBlcXVhbHMgc2lnbiBpbiB2YXJpYWJsZSBhc3NpZ24gYXJlIGFsbCBlaXRoZXIKK2Egc3RyaW5nLCBhbiBpbnRlZ2VyLCBvciBhIGJvb2xlYW4uICBCb29sZWFuIHZhbHVlcyBtYXkgYmUgZ2l2ZW4gYXMgeWVzL25vLAorMC8xIG9yIHRydWUvZmFsc2UuICBDYXNlIGlzIG5vdCBzaWduaWZpY2FudCBpbiBib29sZWFuIHZhbHVlcywgd2hlbgorY29udmVydGluZyB2YWx1ZSB0byB0aGUgY2Fub25pY2FsIGZvcm0gdXNpbmcgJy0tYm9vbCcgdHlwZSBzcGVjaWZpZXI7CitgZ2l0LWNvbmZpZ2Agd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzICJ0cnVlIiBvciAiZmFsc2UiLgorCitTdHJpbmcgdmFsdWVzIG1heSBiZSBlbnRpcmVseSBvciBwYXJ0aWFsbHkgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rlcy4KK1lvdSBuZWVkIHRvIGVuY2xvc2UgdmFyaWFibGUgdmFsdWUgaW4gZG91YmxlIHF1b3RlcyBpZiB5b3Ugd2FudCB0bworcHJlc2VydmUgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLCBvciBpZiB2YXJpYWJsZSB2YWx1ZSBjb250YWlucworYmVnaW5uaW5nIG9mIGNvbW1lbnQgY2hhcmFjdGVycyAoaWYgaXQgY29udGFpbnMgJyMnIG9yICc7JykuCitEb3VibGUgcXVvdGUgJ2AiYCcgYW5kIGJhY2tzbGFzaCAnYFxgJyBjaGFyYWN0ZXJzIGluIHZhcmlhYmxlIHZhbHVlIG11c3QKK2JlIGVzY2FwZWQ6IHVzZSAnYFwiYCcgZm9yICdgImAnIGFuZCAnYFxcYCcgZm9yICdgXGAnLgorCitUaGUgZm9sbG93aW5nIGVzY2FwZSBzZXF1ZW5jZXMgKGJlc2lkZSAnYFwiYCcgYW5kICdgXFxgJykgYXJlIHJlY29nbml6ZWQ6CisnYFxuYCcgZm9yIG5ld2xpbmUgY2hhcmFjdGVyIChOTCksICdgXHRgJyBmb3IgaG9yaXpvbnRhbCB0YWJ1bGF0aW9uIChIVCwgVEFCKQorYW5kICdgXGJgJyBmb3IgYmFja3NwYWNlIChCUykuICBObyBvdGhlciBjaGFyIGVzY2FwZSBzZXF1ZW5jZSwgbm9yIG9jdGFsCitjaGFyIHNlcXVlbmNlcyBhcmUgdmFsaWQuCisKK1ZhcmlhYmxlIHZhbHVlIGVuZGluZyBpbiBhICdgXGAnIGlzIGNvbnRpbnVlZCBvbiB0aGUgbmV4dCBsaW5lIGluIHRoZQorY3VzdG9tYXJ5IFVOSVggZmFzaGlvbi4KKworU29tZSB2YXJpYWJsZXMgbWF5IHJlcXVpcmUgc3BlY2lhbCB2YWx1ZSBmb3JtYXQuCiAKIEV4YW1wbGUKIH5+fn5+fn4KQEAgLTM1LDYgKzk4LDEwIEBACiAJCXJlbW90ZSA9IG9yaWdpbgogCQltZXJnZSA9IHJlZnMvaGVhZHMvZGV2ZWwKIAorCSMgUHJveHkgc2V0dGluZ3MKKwlbY29yZV0KKwkJZ2l0UHJveHk9InNzaCIgZm9yICJzc2g6Ly9rZXJuZWwub3JnLyIKKwkJZ2l0UHJveHk9ZGVmYXVsdC1wcm94eSA7IGZvciB0aGUgcmVzdAogCiBWYXJpYWJsZXMKIH5+fn5+fn5+fgpAQCAtMTgzLDEwICsyNTAsMTUgQEAKIAlVc2UgY3VzdG9taXplZCBjb2xvciBmb3IgYnJhbmNoIGNvbG9yYXRpb24uIGA8c2xvdD5gIGlzIG9uZSBvZgogCWBjdXJyZW50YCAodGhlIGN1cnJlbnQgYnJhbmNoKSwgYGxvY2FsYCAoYSBsb2NhbCBicmFuY2gpLAogCWByZW1vdGVgIChhIHRyYWNraW5nIGJyYW5jaCBpbiByZWZzL3JlbW90ZXMvKSwgYHBsYWluYCAob3RoZXIKLQlyZWZzKSwgb3IgYHJlc2V0YCAodGhlIG5vcm1hbCB0ZXJtaW5hbCBjb2xvcikuICBUaGUgdmFsdWUgZm9yCi0JdGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY2FuIGJlIG9uZSBvZjogYG5vcm1hbGAsIGBib2xkYCwKLQlgZGltYCwgYHVsYCwgYGJsaW5rYCwgYHJldmVyc2VgLCBgcmVzZXRgLCBgYmxhY2tgLCBgcmVkYCwKLQlgZ3JlZW5gLCBgeWVsbG93YCwgYGJsdWVgLCBgbWFnZW50YWAsIGBjeWFuYCwgb3IgYHdoaXRlYC4KKwlyZWZzKS4KKysKK1RoZSB2YWx1ZSBmb3IgdGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaXMgYSBsaXN0IG9mIGNvbG9ycyAoYXQgbW9zdAordHdvKSBhbmQgYXR0cmlidXRlcyAoYXQgbW9zdCBvbmUpLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLiAgVGhlIGNvbG9ycworYWNjZXB0ZWQgYXJlIGBub3JtYWxgLCBgYmxhY2tgLCBgcmVkYCwgYGdyZWVuYCwgYHllbGxvd2AsIGBibHVlYCwKK2BtYWdlbnRhYCwgYGN5YW5gIGFuZCBgd2hpdGVgOyB0aGUgYXR0cmlidXRlcyBhcmUgYGJvbGRgLCBgZGltYCwgYHVsYCwKK2BibGlua2AgYW5kIGByZXZlcnNlYC4gIFRoZSBmaXJzdCBjb2xvciBnaXZlbiBpcyB0aGUgZm9yZWdyb3VuZDsgdGhlCitzZWNvbmQgaXMgdGhlIGJhY2tncm91bmQuICBUaGUgcG9zaXRpb24gb2YgdGhlIGF0dHJpYnV0ZSwgaWYgYW55LAorZG9lc24ndCBtYXR0ZXIuCiAKIGNvbG9yLmRpZmY6OgogCVdoZW4gdHJ1ZSAob3IgYGFsd2F5c2ApLCBhbHdheXMgdXNlIGNvbG9ycyBpbiBwYXRjaC4KQEAgLTE5NCwxMiArMjY2LDEzIEBACiAJY29sb3JzIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIHRvIHRoZSB0ZXJtaW5hbC4KIAogY29sb3IuZGlmZi48c2xvdD46OgotCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBkaWZmIGNvbG9yaXphdGlvbi4gIGA8c2xvdD5gCi0Jc3BlY2lmaWVzIHdoaWNoIHBhcnQgb2YgdGhlIHBhdGNoIHRvIHVzZSB0aGUgc3BlY2lmaWVkCi0JY29sb3IsIGFuZCBpcyBvbmUgb2YgYHBsYWluYCAoY29udGV4dCB0ZXh0KSwgYG1ldGFgCi0JKG1ldGFpbmZvcm1hdGlvbiksIGBmcmFnYCAoaHVuayBoZWFkZXIpLCBgb2xkYCAocmVtb3ZlZAotCWxpbmVzKSwgb3IgYG5ld2AgKGFkZGVkIGxpbmVzKS4gIFRoZSB2YWx1ZXMgb2YgdGhlc2UKLQl2YXJpYWJsZXMgbWF5IGJlIHNwZWNpZmllZCBhcyBpbiBjb2xvci5icmFuY2guPHNsb3Q+LgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBkaWZmIGNvbG9yaXphdGlvbi4gIGA8c2xvdD5gIHNwZWNpZmllcworCXdoaWNoIHBhcnQgb2YgdGhlIHBhdGNoIHRvIHVzZSB0aGUgc3BlY2lmaWVkIGNvbG9yLCBhbmQgaXMgb25lCisJb2YgYHBsYWluYCAoY29udGV4dCB0ZXh0KSwgYG1ldGFgIChtZXRhaW5mb3JtYXRpb24pLCBgZnJhZ2AKKwkoaHVuayBoZWFkZXIpLCBgb2xkYCAocmVtb3ZlZCBsaW5lcyksIGBuZXdgIChhZGRlZCBsaW5lcyksCisJYGNvbW1pdGAgKGNvbW1pdCBoZWFkZXJzKSwgb3IgYHdoaXRlc3BhY2VgIChoaWdobGlnaHRpbmcgZHViaW91cworCXdoaXRlc3BhY2UpLiAgVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgbWF5IGJlIHNwZWNpZmllZCBhcworCWluIGNvbG9yLmJyYW5jaC48c2xvdD4uCiAKIGNvbG9yLnBhZ2VyOjoKIAlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3JlZCBvdXRwdXQgd2hlbiB0aGUgcGFnZXIgaXMgaW4KQEAgLTIyOCw2ICszMDEsMTYgQEAKIAl3aWxsIGVuYWJsZSBiYXNpYyByZW5hbWUgZGV0ZWN0aW9uLiAgSWYgc2V0IHRvICJjb3BpZXMiIG9yCiAJImNvcHkiLCBpdCB3aWxsIGRldGVjdCBjb3BpZXMsIGFzIHdlbGwuCiAKK2ZldGNoLnVucGFja0xpbWl0OjoKKwlJZiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgZmV0Y2hlZCBvdmVyIHRoZSBnaXQgbmF0aXZlCisJdHJhbnNmZXIgaXMgYmVsb3cgdGhpcworCWxpbWl0LCB0aGVuIHRoZSBvYmplY3RzIHdpbGwgYmUgdW5wYWNrZWQgaW50byBsb29zZSBvYmplY3QKKwlmaWxlcy4gSG93ZXZlciBpZiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIG9iamVjdHMgZXF1YWxzIG9yCisJZXhjZWVkcyB0aGlzIGxpbWl0IHRoZW4gdGhlIHJlY2VpdmVkIHBhY2sgd2lsbCBiZSBzdG9yZWQgYXMKKwlhIHBhY2ssIGFmdGVyIGFkZGluZyBhbnkgbWlzc2luZyBkZWx0YSBiYXNlcy4gIFN0b3JpbmcgdGhlCisJcGFjayBmcm9tIGEgcHVzaCBjYW4gbWFrZSB0aGUgcHVzaCBvcGVyYXRpb24gY29tcGxldGUgZmFzdGVyLAorCWVzcGVjaWFsbHkgb24gc2xvdyBmaWxlc3lzdGVtcy4KKwogZm9ybWF0LmhlYWRlcnM6OgogCUFkZGl0aW9uYWwgZW1haWwgaGVhZGVycyB0byBpbmNsdWRlIGluIGEgcGF0Y2ggdG8gYmUgc3VibWl0dGVkCiAJYnkgbWFpbC4gIFNlZSBnaXRsaW5rOmdpdC1mb3JtYXQtcGF0Y2hbMV0uCkBAIC0zMjEsNiArNDA0LDEzIEBACiAJV2hldGhlciB0byBpbmNsdWRlIHN1bW1hcmllcyBvZiBtZXJnZWQgY29tbWl0cyBpbiBuZXdseSBjcmVhdGVkCiAJbWVyZ2UgY29tbWl0IG1lc3NhZ2VzLiBGYWxzZSBieSBkZWZhdWx0LgogCittZXJnZS52ZXJib3NpdHk6OgorCUNvbnRyb2xzIHRoZSBhbW91bnQgb2Ygb3V0cHV0IHNob3duIGJ5IHRoZSByZWN1cnNpdmUgbWVyZ2UKKwlzdHJhdGVneS4gIExldmVsIDAgb3V0cHV0cyBub3RoaW5nIGV4Y2VwdCBhIGZpbmFsIGVycm9yCisJbWVzc2FnZSBpZiBjb25mbGljdHMgd2VyZSBkZXRlY3RlZC4gTGV2ZWwgMSBvdXRwdXRzIG9ubHkKKwljb25mbGljdHMsIDIgb3V0cHV0cyBjb25mbGljdHMgYW5kIGZpbGUgY2hhbmdlcy4gIExldmVsIDUgYW5kCisJYWJvdmUgb3V0cHV0cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBUaGUgZGVmYXVsdCBpcyBsZXZlbCAyLgorCiBwYWNrLndpbmRvdzo6CiAJVGhlIHNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGJ5IGdpdGxpbms6Z2l0LXBhY2stb2JqZWN0c1sxXSB3aGVuIG5vCiAJd2luZG93IHNpemUgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gRGVmYXVsdHMgdG8gMTAuCkBAIC0zNDQsNiArNDM0LDE0IEBACiAJVGhlIGRlZmF1bHQgc2V0IG9mICJyZWZzcGVjIiBmb3IgZ2l0bGluazpnaXQtcHVzaFsxXS4gU2VlCiAJZ2l0bGluazpnaXQtcHVzaFsxXS4KIAorcmVtb3RlLjxuYW1lPi5yZWNlaXZlcGFjazo6CisJVGhlIGRlZmF1bHQgcHJvZ3JhbSB0byBleGVjdXRlIG9uIHRoZSByZW1vdGUgc2lkZSB3aGVuIHB1c2hpbmcuICBTZWUKKwlvcHRpb24gXC0tZXhlYyBvZiBnaXRsaW5rOmdpdC1wdXNoWzFdLgorCityZW1vdGUuPG5hbWU+LnVwbG9hZHBhY2s6OgorCVRoZSBkZWZhdWx0IHByb2dyYW0gdG8gZXhlY3V0ZSBvbiB0aGUgcmVtb3RlIHNpZGUgd2hlbiBmZXRjaGluZy4gIFNlZQorCW9wdGlvbiBcLS1leGVjIG9mIGdpdGxpbms6Z2l0LWZldGNoLXBhY2tbMV0uCisKIHJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQ6OgogCUFsbG93IGdpdGxpbms6Z2l0LXJlcGFja1sxXSB0byBjcmVhdGUgcGFja3MgdGhhdCB1c2VzCiAJZGVsdGEtYmFzZSBvZmZzZXQuICBEZWZhdWx0cyB0byBmYWxzZS4KQEAgLTM3Nyw2ICs0NzUsMTMgQEAKIAlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9BVVRIT1JfTkFNRScgYW5kICdHSVRfQ09NTUlUVEVSX05BTUUnCiAJZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgU2VlIGdpdGxpbms6Z2l0LWNvbW1pdC10cmVlWzFdLgogCit1c2VyLnNpZ25pbmdrZXk6OgorCUlmIGdpdGxpbms6Z2l0LXRhZ1sxXSBpcyBub3Qgc2VsZWN0aW5nIHRoZSBrZXkgeW91IHdhbnQgaXQgdG8KKwlhdXRvbWF0aWNhbGx5IHdoZW4gY3JlYXRpbmcgYSBzaWduZWQgdGFnLCB5b3UgY2FuIG92ZXJyaWRlIHRoZQorCWRlZmF1bHQgc2VsZWN0aW9uIHdpdGggdGhpcyB2YXJpYWJsZS4gIFRoaXMgb3B0aW9uIGlzIHBhc3NlZAorCXVuY2hhbmdlZCB0byBncGcncyAtLWxvY2FsLXVzZXIgcGFyYW1ldGVyLCBzbyB5b3UgbWF5IHNwZWNpZnkgYSBrZXkKKwl1c2luZyBhbnkgbWV0aG9kIHRoYXQgZ3BnIHN1cHBvcnRzLgorCiB3aGF0Y2hhbmdlZC5kaWZmdHJlZTo6CiAJVGhlIGRlZmF1bHQgZ2l0bGluazpnaXQtZGlmZi10cmVlWzFdIGFyZ3VtZW50cyB0byBiZSB1c2VkCiAJZm9yIGdpdGxpbms6Z2l0LXdoYXRjaGFuZ2VkWzFdLgpAQCAtNDAwLDMgKzUwNSw4IEBACiAJZXZlbiBpZiB0aGF0IHB1c2ggaXMgZm9yY2VkLiBUaGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMKIAlzZXQgd2hlbiBpbml0aWFsaXppbmcgYSBzaGFyZWQgcmVwb3NpdG9yeS4KIAordHJhbnNmZXIudW5wYWNrTGltaXQ6OgorCVdoZW4gYGZldGNoLnVucGFja0xpbWl0YCBvciBgcmVjZWl2ZS51bnBhY2tMaW1pdGAgYXJlCisJbm90IHNldCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbnN0ZWFkLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1pbnRyby50eHQgYi9Eb2N1bWVudGF0aW9uL2NvcmUtaW50cm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYWZlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtaW50cm8udHh0CkBAIC0wLDAgKzEsNTkwIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwlHSVQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyJnaXQiIGNhbiBtZWFuIGFueXRoaW5nLCBkZXBlbmRpbmcgb24geW91ciBtb29kLgorCisgLSByYW5kb20gdGhyZWUtbGV0dGVyIGNvbWJpbmF0aW9uIHRoYXQgaXMgcHJvbm91bmNlYWJsZSwgYW5kIG5vdAorICAgYWN0dWFsbHkgdXNlZCBieSBhbnkgY29tbW9uIFVOSVggY29tbWFuZC4gIFRoZSBmYWN0IHRoYXQgaXQgaXMgYQorICAgbWlzcHJvbnVuY2lhdGlvbiBvZiAiZ2V0IiBtYXkgb3IgbWF5IG5vdCBiZSByZWxldmFudC4KKyAtIHN0dXBpZC4gY29udGVtcHRpYmxlIGFuZCBkZXNwaWNhYmxlLiBzaW1wbGUuIFRha2UgeW91ciBwaWNrIGZyb20gdGhlCisgICBkaWN0aW9uYXJ5IG9mIHNsYW5nLgorIC0gImdsb2JhbCBpbmZvcm1hdGlvbiB0cmFja2VyIjogeW91J3JlIGluIGEgZ29vZCBtb29kLCBhbmQgaXQgYWN0dWFsbHkKKyAgIHdvcmtzIGZvciB5b3UuIEFuZ2VscyBzaW5nLCBhbmQgYSBsaWdodCBzdWRkZW5seSBmaWxscyB0aGUgcm9vbS4KKyAtICJnb2RkYW1uIGlkaW90aWMgdHJ1Y2tsb2FkIG9mIHNoKnQiOiB3aGVuIGl0IGJyZWFrcworCitUaGlzIGlzIGEgKG5vdCBzbykgc3R1cGlkIGJ1dCBleHRyZW1lbHkgZmFzdCBkaXJlY3RvcnkgY29udGVudCBtYW5hZ2VyLgorSXQgZG9lc24ndCBkbyBhIHdob2xlIGxvdCBhdCBpdHMgY29yZSwgYnV0IHdoYXQgaXQgJ2RvZXMnIGRvIGlzIHRyYWNrCitkaXJlY3RvcnkgY29udGVudHMgZWZmaWNpZW50bHkuCisKK1RoZXJlIGFyZSB0d28gb2JqZWN0IGFic3RyYWN0aW9uczogdGhlICJvYmplY3QgZGF0YWJhc2UiLCBhbmQgdGhlCisiY3VycmVudCBkaXJlY3RvcnkgY2FjaGUiIGFrYSAiaW5kZXgiLgorCitUaGUgT2JqZWN0IERhdGFiYXNlCit+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgb2JqZWN0IGRhdGFiYXNlIGlzIGxpdGVyYWxseSBqdXN0IGEgY29udGVudC1hZGRyZXNzYWJsZSBjb2xsZWN0aW9uCitvZiBvYmplY3RzLiAgQWxsIG9iamVjdHMgYXJlIG5hbWVkIGJ5IHRoZWlyIGNvbnRlbnQsIHdoaWNoIGlzCithcHByb3hpbWF0ZWQgYnkgdGhlIFNIQTEgaGFzaCBvZiB0aGUgb2JqZWN0IGl0c2VsZi4gIE9iamVjdHMgbWF5IHJlZmVyCit0byBvdGhlciBvYmplY3RzIChieSByZWZlcmVuY2luZyB0aGVpciBTSEExIGhhc2gpLCBhbmQgc28geW91IGNhbgorYnVpbGQgdXAgYSBoaWVyYXJjaHkgb2Ygb2JqZWN0cy4KKworQWxsIG9iamVjdHMgaGF2ZSBhIHN0YXRpY2FsbHkgZGV0ZXJtaW5lZCAidHlwZSIgYWthICJ0YWciLCB3aGljaCBpcworZGV0ZXJtaW5lZCBhdCBvYmplY3QgY3JlYXRpb24gdGltZSwgYW5kIHdoaWNoIGlkZW50aWZpZXMgdGhlIGZvcm1hdCBvZgordGhlIG9iamVjdCAoaS5lLiBob3cgaXQgaXMgdXNlZCwgYW5kIGhvdyBpdCBjYW4gcmVmZXIgdG8gb3RoZXIKK29iamVjdHMpLiAgVGhlcmUgYXJlIGN1cnJlbnRseSBmb3VyIGRpZmZlcmVudCBvYmplY3QgdHlwZXM6ICJibG9iIiwKKyJ0cmVlIiwgImNvbW1pdCIgYW5kICJ0YWciLgorCitBICJibG9iIiBvYmplY3QgY2Fubm90IHJlZmVyIHRvIGFueSBvdGhlciBvYmplY3QsIGFuZCBpcywgbGlrZSB0aGUgdHlwZQoraW1wbGllcywgYSBwdXJlIHN0b3JhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgc29tZSB1c2VyIGRhdGEuICBJdCBpcyB1c2VkIHRvCithY3R1YWxseSBzdG9yZSB0aGUgZmlsZSBkYXRhLCBpLmUuIGEgYmxvYiBvYmplY3QgaXMgYXNzb2NpYXRlZCB3aXRoIHNvbWUKK3BhcnRpY3VsYXIgdmVyc2lvbiBvZiBzb21lIGZpbGUuCisKK0EgInRyZWUiIG9iamVjdCBpcyBhbiBvYmplY3QgdGhhdCB0aWVzIG9uZSBvciBtb3JlICJibG9iIiBvYmplY3RzIGludG8gYQorZGlyZWN0b3J5IHN0cnVjdHVyZS4gSW4gYWRkaXRpb24sIGEgdHJlZSBvYmplY3QgY2FuIHJlZmVyIHRvIG90aGVyIHRyZWUKK29iamVjdHMsIHRodXMgY3JlYXRpbmcgYSBkaXJlY3RvcnkgaGllcmFyY2h5LgorCitBICJjb21taXQiIG9iamVjdCB0aWVzIHN1Y2ggZGlyZWN0b3J5IGhpZXJhcmNoaWVzIHRvZ2V0aGVyIGludG8KK2EgREFHIG9mIHJldmlzaW9ucyAtIGVhY2ggImNvbW1pdCIgaXMgYXNzb2NpYXRlZCB3aXRoIGV4YWN0bHkgb25lIHRyZWUKKyh0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeSBhdCB0aGUgdGltZSBvZiB0aGUgY29tbWl0KS4gSW4gYWRkaXRpb24sIGEKKyJjb21taXQiIHJlZmVycyB0byBvbmUgb3IgbW9yZSAicGFyZW50IiBjb21taXQgb2JqZWN0cyB0aGF0IGRlc2NyaWJlIHRoZQoraGlzdG9yeSBvZiBob3cgd2UgYXJyaXZlZCBhdCB0aGF0IGRpcmVjdG9yeSBoaWVyYXJjaHkuCisKK0FzIGEgc3BlY2lhbCBjYXNlLCBhIGNvbW1pdCBvYmplY3Qgd2l0aCBubyBwYXJlbnRzIGlzIGNhbGxlZCB0aGUgInJvb3QiCitvYmplY3QsIGFuZCBpcyB0aGUgcG9pbnQgb2YgYW4gaW5pdGlhbCBwcm9qZWN0IGNvbW1pdC4gIEVhY2ggcHJvamVjdAorbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSByb290LCBhbmQgd2hpbGUgeW91IGNhbiB0aWUgc2V2ZXJhbCBkaWZmZXJlbnQKK3Jvb3Qgb2JqZWN0cyB0b2dldGhlciBpbnRvIG9uZSBwcm9qZWN0IGJ5IGNyZWF0aW5nIGEgY29tbWl0IG9iamVjdCB3aGljaAoraGFzIHR3byBvciBtb3JlIHNlcGFyYXRlIHJvb3RzIGFzIGl0cyB1bHRpbWF0ZSBwYXJlbnRzLCB0aGF0J3MgcHJvYmFibHkKK2p1c3QgZ29pbmcgdG8gY29uZnVzZSBwZW9wbGUuICBTbyBhaW0gZm9yIHRoZSBub3Rpb24gb2YgIm9uZSByb290IG9iamVjdAorcGVyIHByb2plY3QiLCBldmVuIGlmIGdpdCBpdHNlbGYgZG9lcyBub3QgZW5mb3JjZSB0aGF0LgorCitBICJ0YWciIG9iamVjdCBzeW1ib2xpY2FsbHkgaWRlbnRpZmllcyBhbmQgY2FuIGJlIHVzZWQgdG8gc2lnbiBvdGhlcgorb2JqZWN0cy4gSXQgY29udGFpbnMgdGhlIGlkZW50aWZpZXIgYW5kIHR5cGUgb2YgYW5vdGhlciBvYmplY3QsIGEKK3N5bWJvbGljIG5hbWUgKG9mIGNvdXJzZSEpIGFuZCwgb3B0aW9uYWxseSwgYSBzaWduYXR1cmUuCisKK1JlZ2FyZGxlc3Mgb2Ygb2JqZWN0IHR5cGUsIGFsbCBvYmplY3RzIHNoYXJlIHRoZSBmb2xsb3dpbmcKK2NoYXJhY3RlcmlzdGljczogdGhleSBhcmUgYWxsIGRlZmxhdGVkIHdpdGggemxpYiwgYW5kIGhhdmUgYSBoZWFkZXIKK3RoYXQgbm90IG9ubHkgc3BlY2lmaWVzIHRoZWlyIHR5cGUsIGJ1dCBhbHNvIHByb3ZpZGVzIHNpemUgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBkYXRhIGluIHRoZSBvYmplY3QuICBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBTSEExIGhhc2gKK3RoYXQgaXMgdXNlZCB0byBuYW1lIHRoZSBvYmplY3QgaXMgdGhlIGhhc2ggb2YgdGhlIG9yaWdpbmFsIGRhdGEKK3BsdXMgdGhpcyBoZWFkZXIsIHNvIGBzaGExc3VtYCAnZmlsZScgZG9lcyBub3QgbWF0Y2ggdGhlIG9iamVjdCBuYW1lCitmb3IgJ2ZpbGUnLgorKEhpc3RvcmljYWwgbm90ZTogaW4gdGhlIGRhd24gb2YgdGhlIGFnZSBvZiBnaXQgdGhlIGhhc2gKK3dhcyB0aGUgc2hhMSBvZiB0aGUgJ2NvbXByZXNzZWQnIG9iamVjdC4pCisKK0FzIGEgcmVzdWx0LCB0aGUgZ2VuZXJhbCBjb25zaXN0ZW5jeSBvZiBhbiBvYmplY3QgY2FuIGFsd2F5cyBiZSB0ZXN0ZWQKK2luZGVwZW5kZW50bHkgb2YgdGhlIGNvbnRlbnRzIG9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3Q6IGFsbCBvYmplY3RzIGNhbgorYmUgdmFsaWRhdGVkIGJ5IHZlcmlmeWluZyB0aGF0IChhKSB0aGVpciBoYXNoZXMgbWF0Y2ggdGhlIGNvbnRlbnQgb2YgdGhlCitmaWxlIGFuZCAoYikgdGhlIG9iamVjdCBzdWNjZXNzZnVsbHkgaW5mbGF0ZXMgdG8gYSBzdHJlYW0gb2YgYnl0ZXMgdGhhdAorZm9ybXMgYSBzZXF1ZW5jZSBvZiA8YXNjaWkgdHlwZSB3aXRob3V0IHNwYWNlPiArIDxzcGFjZT4gKyA8YXNjaWkgZGVjaW1hbAorc2l6ZT4gKyA8Ynl0ZVwwPiArIDxiaW5hcnkgb2JqZWN0IGRhdGE+LgorCitUaGUgc3RydWN0dXJlZCBvYmplY3RzIGNhbiBmdXJ0aGVyIGhhdmUgdGhlaXIgc3RydWN0dXJlIGFuZAorY29ubmVjdGl2aXR5IHRvIG90aGVyIG9iamVjdHMgdmVyaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgd2l0aAordGhlIGBnaXQtZnNja2AgcHJvZ3JhbSwgd2hpY2ggZ2VuZXJhdGVzIGEgZnVsbCBkZXBlbmRlbmN5IGdyYXBoCitvZiBhbGwgb2JqZWN0cywgYW5kIHZlcmlmaWVzIHRoZWlyIGludGVybmFsIGNvbnNpc3RlbmN5IChpbiBhZGRpdGlvbgordG8ganVzdCB2ZXJpZnlpbmcgdGhlaXIgc3VwZXJmaWNpYWwgY29uc2lzdGVuY3kgdGhyb3VnaCB0aGUgaGFzaCkuCisKK1RoZSBvYmplY3QgdHlwZXMgaW4gc29tZSBtb3JlIGRldGFpbDoKKworQmxvYiBPYmplY3QKK35+fn5+fn5+fn5+CitBICJibG9iIiBvYmplY3QgaXMgbm90aGluZyBidXQgYSBiaW5hcnkgYmxvYiBvZiBkYXRhLCBhbmQgZG9lc24ndAorcmVmZXIgdG8gYW55dGhpbmcgZWxzZS4gIFRoZXJlIGlzIG5vIHNpZ25hdHVyZSBvciBhbnkgb3RoZXIKK3ZlcmlmaWNhdGlvbiBvZiB0aGUgZGF0YSwgc28gd2hpbGUgdGhlIG9iamVjdCBpcyBjb25zaXN0ZW50IChpdCAnaXMnCitpbmRleGVkIGJ5IGl0cyBzaGExIGhhc2gsIHNvIHRoZSBkYXRhIGl0c2VsZiBpcyBjZXJ0YWlubHkgY29ycmVjdCksIGl0CitoYXMgYWJzb2x1dGVseSBubyBvdGhlciBhdHRyaWJ1dGVzLiAgTm8gbmFtZSBhc3NvY2lhdGlvbnMsIG5vCitwZXJtaXNzaW9ucy4gIEl0IGlzIHB1cmVseSBhIGJsb2Igb2YgZGF0YSAoaS5lLiBub3JtYWxseSAiZmlsZQorY29udGVudHMiKS4KKworSW4gcGFydGljdWxhciwgc2luY2UgdGhlIGJsb2IgaXMgZW50aXJlbHkgZGVmaW5lZCBieSBpdHMgZGF0YSwgaWYgdHdvCitmaWxlcyBpbiBhIGRpcmVjdG9yeSB0cmVlIChvciBpbiBtdWx0aXBsZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlCityZXBvc2l0b3J5KSBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLCB0aGV5IHdpbGwgc2hhcmUgdGhlIHNhbWUgYmxvYgorb2JqZWN0LiBUaGUgb2JqZWN0IGlzIHRvdGFsbHkgaW5kZXBlbmRlbnQgb2YgaXRzIGxvY2F0aW9uIGluIHRoZQorZGlyZWN0b3J5IHRyZWUsIGFuZCByZW5hbWluZyBhIGZpbGUgZG9lcyBub3QgY2hhbmdlIHRoZSBvYmplY3QgdGhhdAorZmlsZSBpcyBhc3NvY2lhdGVkIHdpdGggaW4gYW55IHdheS4KKworQSBibG9iIGlzIHR5cGljYWxseSBjcmVhdGVkIHdoZW4gZ2l0bGluazpnaXQtdXBkYXRlLWluZGV4WzFdCitpcyBydW4sIGFuZCBpdHMgZGF0YSBjYW4gYmUgYWNjZXNzZWQgYnkgZ2l0bGluazpnaXQtY2F0LWZpbGVbMV0uCisKK1RyZWUgT2JqZWN0Cit+fn5+fn5+fn5+fgorVGhlIG5leHQgaGllcmFyY2hpY2FsIG9iamVjdCB0eXBlIGlzIHRoZSAidHJlZSIgb2JqZWN0LiAgQSB0cmVlIG9iamVjdAoraXMgYSBsaXN0IG9mIG1vZGUvbmFtZS9ibG9iIGRhdGEsIHNvcnRlZCBieSBuYW1lLiAgQWx0ZXJuYXRpdmVseSwgdGhlCittb2RlIGRhdGEgbWF5IHNwZWNpZnkgYSBkaXJlY3RvcnkgbW9kZSwgaW4gd2hpY2ggY2FzZSBpbnN0ZWFkIG9mCituYW1pbmcgYSBibG9iLCB0aGF0IG5hbWUgaXMgYXNzb2NpYXRlZCB3aXRoIGFub3RoZXIgVFJFRSBvYmplY3QuCisKK0xpa2UgdGhlICJibG9iIiBvYmplY3QsIGEgdHJlZSBvYmplY3QgaXMgdW5pcXVlbHkgZGV0ZXJtaW5lZCBieSB0aGUKK3NldCBjb250ZW50cywgYW5kIHNvIHR3byBzZXBhcmF0ZSBidXQgaWRlbnRpY2FsIHRyZWVzIHdpbGwgYWx3YXlzCitzaGFyZSB0aGUgZXhhY3Qgc2FtZSBvYmplY3QuIFRoaXMgaXMgdHJ1ZSBhdCBhbGwgbGV2ZWxzLCBpLmUuIGl0J3MKK3RydWUgZm9yIGEgImxlYWYiIHRyZWUgKHdoaWNoIGRvZXMgbm90IHJlZmVyIHRvIGFueSBvdGhlciB0cmVlcywgb25seQorYmxvYnMpIGFzIHdlbGwgYXMgZm9yIGEgd2hvbGUgc3ViZGlyZWN0b3J5LgorCitGb3IgdGhhdCByZWFzb24gYSAidHJlZSIgb2JqZWN0IGlzIGp1c3QgYSBwdXJlIGRhdGEgYWJzdHJhY3Rpb246IGl0CitoYXMgbm8gaGlzdG9yeSwgbm8gc2lnbmF0dXJlcywgbm8gdmVyaWZpY2F0aW9uIG9mIHZhbGlkaXR5LCBleGNlcHQKK3RoYXQgc2luY2UgdGhlIGNvbnRlbnRzIGFyZSBhZ2FpbiBwcm90ZWN0ZWQgYnkgdGhlIGhhc2ggaXRzZWxmLCB3ZSBjYW4KK3RydXN0IHRoYXQgdGhlIHRyZWUgaXMgaW1tdXRhYmxlIGFuZCBpdHMgY29udGVudHMgbmV2ZXIgY2hhbmdlLgorCitTbyB5b3UgY2FuIHRydXN0IHRoZSBjb250ZW50cyBvZiBhIHRyZWUgdG8gYmUgdmFsaWQsIHRoZSBzYW1lIHdheSB5b3UKK2NhbiB0cnVzdCB0aGUgY29udGVudHMgb2YgYSBibG9iLCBidXQgeW91IGRvbid0IGtub3cgd2hlcmUgdGhvc2UKK2NvbnRlbnRzICdjYW1lJyBmcm9tLgorCitTaWRlIG5vdGUgb24gdHJlZXM6IHNpbmNlIGEgInRyZWUiIG9iamVjdCBpcyBhIHNvcnRlZCBsaXN0IG9mCisiZmlsZW5hbWUrY29udGVudCIsIHlvdSBjYW4gY3JlYXRlIGEgZGlmZiBiZXR3ZWVuIHR3byB0cmVlcyB3aXRob3V0CithY3R1YWxseSBoYXZpbmcgdG8gdW5wYWNrIHR3byB0cmVlcy4gIEp1c3QgaWdub3JlIGFsbCBjb21tb24gcGFydHMsCithbmQgeW91ciBkaWZmIHdpbGwgbG9vayByaWdodC4gIEluIG90aGVyIHdvcmRzLCB5b3UgY2FuIGVmZmVjdGl2ZWx5CisoYW5kIGVmZmljaWVudGx5KSB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYW55IHR3byByYW5kb20gdHJlZXMgYnkKK08obikgd2hlcmUgIm4iIGlzIHRoZSBzaXplIG9mIHRoZSBkaWZmZXJlbmNlLCByYXRoZXIgdGhhbiB0aGUgc2l6ZSBvZgordGhlIHRyZWUuCisKK1NpZGUgbm90ZSAyIG9uIHRyZWVzOiBzaW5jZSB0aGUgbmFtZSBvZiBhICJibG9iIiBkZXBlbmRzIGVudGlyZWx5IGFuZAorZXhjbHVzaXZlbHkgb24gaXRzIGNvbnRlbnRzIChpLmUuIHRoZXJlIGFyZSBubyBuYW1lcyBvciBwZXJtaXNzaW9ucworaW52b2x2ZWQpLCB5b3UgY2FuIHNlZSB0cml2aWFsIHJlbmFtZXMgb3IgcGVybWlzc2lvbiBjaGFuZ2VzIGJ5Citub3RpY2luZyB0aGF0IHRoZSBibG9iIHN0YXllZCB0aGUgc2FtZS4gIEhvd2V2ZXIsIHJlbmFtZXMgd2l0aCBkYXRhCitjaGFuZ2VzIG5lZWQgYSBzbWFydGVyICJkaWZmIiBpbXBsZW1lbnRhdGlvbi4KKworQSB0cmVlIGlzIGNyZWF0ZWQgd2l0aCBnaXRsaW5rOmdpdC13cml0ZS10cmVlWzFdIGFuZAoraXRzIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGJ5IGdpdGxpbms6Z2l0LWxzLXRyZWVbMV0uCitUd28gdHJlZXMgY2FuIGJlIGNvbXBhcmVkIHdpdGggZ2l0bGluazpnaXQtZGlmZi10cmVlWzFdLgorCitDb21taXQgT2JqZWN0Cit+fn5+fn5+fn5+fn5+CitUaGUgImNvbW1pdCIgb2JqZWN0IGlzIGFuIG9iamVjdCB0aGF0IGludHJvZHVjZXMgdGhlIG5vdGlvbiBvZgoraGlzdG9yeSBpbnRvIHRoZSBwaWN0dXJlLiAgSW4gY29udHJhc3QgdG8gdGhlIG90aGVyIG9iamVjdHMsIGl0Citkb2Vzbid0IGp1c3QgZGVzY3JpYmUgdGhlIHBoeXNpY2FsIHN0YXRlIG9mIGEgdHJlZSwgaXQgZGVzY3JpYmVzIGhvdword2UgZ290IHRoZXJlLCBhbmQgd2h5LgorCitBICJjb21taXQiIGlzIGRlZmluZWQgYnkgdGhlIHRyZWUtb2JqZWN0IHRoYXQgaXQgcmVzdWx0cyBpbiwgdGhlCitwYXJlbnQgY29tbWl0cyAoemVybywgb25lIG9yIG1vcmUpIHRoYXQgbGVkIHVwIHRvIHRoYXQgcG9pbnQsIGFuZCBhCitjb21tZW50IG9uIHdoYXQgaGFwcGVuZWQuICBBZ2FpbiwgYSBjb21taXQgaXMgbm90IHRydXN0ZWQgcGVyIHNlOgordGhlIGNvbnRlbnRzIGFyZSB3ZWxsLWRlZmluZWQgYW5kICJzYWZlIiBkdWUgdG8gdGhlIGNyeXB0b2dyYXBoaWNhbGx5CitzdHJvbmcgc2lnbmF0dXJlcyBhdCBhbGwgbGV2ZWxzLCBidXQgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGJlbGlldmUKK3RoYXQgdGhlIHRyZWUgaXMgImdvb2QiIG9yIHRoYXQgdGhlIG1lcmdlIGluZm9ybWF0aW9uIG1ha2VzIHNlbnNlLgorVGhlIHBhcmVudHMgZG8gbm90IGhhdmUgdG8gYWN0dWFsbHkgaGF2ZSBhbnkgcmVsYXRpb25zaGlwIHdpdGggdGhlCityZXN1bHQsIGZvciBleGFtcGxlLgorCitOb3RlIG9uIGNvbW1pdHM6IHVubGlrZSByZWFsIFNDTSdzLCBjb21taXRzIGRvIG5vdCBjb250YWluCityZW5hbWUgaW5mb3JtYXRpb24gb3IgZmlsZSBtb2RlIGNoYW5nZSBpbmZvcm1hdGlvbi4gIEFsbCBvZiB0aGF0IGlzCitpbXBsaWNpdCBpbiB0aGUgdHJlZXMgaW52b2x2ZWQgKHRoZSByZXN1bHQgdHJlZSwgYW5kIHRoZSByZXN1bHQgdHJlZXMKK29mIHRoZSBwYXJlbnRzKSwgYW5kIGRlc2NyaWJpbmcgdGhhdCBtYWtlcyBubyBzZW5zZSBpbiB0aGlzIGlkaW90aWMKK2ZpbGUgbWFuYWdlci4KKworQSBjb21taXQgaXMgY3JlYXRlZCB3aXRoIGdpdGxpbms6Z2l0LWNvbW1pdC10cmVlWzFdIGFuZAoraXRzIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGJ5IGdpdGxpbms6Z2l0LWNhdC1maWxlWzFdLgorCitUcnVzdAorfn5+fn4KK0FuIGFzaWRlIG9uIHRoZSBub3Rpb24gb2YgInRydXN0Ii4gVHJ1c3QgaXMgcmVhbGx5IG91dHNpZGUgdGhlIHNjb3BlCitvZiAiZ2l0IiwgYnV0IGl0J3Mgd29ydGggbm90aW5nIGEgZmV3IHRoaW5ncy4gIEZpcnN0IG9mZiwgc2luY2UKK2V2ZXJ5dGhpbmcgaXMgaGFzaGVkIHdpdGggU0hBMSwgeW91ICdjYW4nIHRydXN0IHRoYXQgYW4gb2JqZWN0IGlzCitpbnRhY3QgYW5kIGhhcyBub3QgYmVlbiBtZXNzZWQgd2l0aCBieSBleHRlcm5hbCBzb3VyY2VzLiAgU28gdGhlIG5hbWUKK29mIGFuIG9iamVjdCB1bmlxdWVseSBpZGVudGlmaWVzIGEga25vd24gc3RhdGUgLSBqdXN0IG5vdCBhIHN0YXRlIHRoYXQKK3lvdSBtYXkgd2FudCB0byB0cnVzdC4KKworRnVydGhlcm1vcmUsIHNpbmNlIHRoZSBTSEExIHNpZ25hdHVyZSBvZiBhIGNvbW1pdCByZWZlcnMgdG8gdGhlCitTSEExIHNpZ25hdHVyZXMgb2YgdGhlIHRyZWUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFuZCB0aGUgc2lnbmF0dXJlcworb2YgdGhlIHBhcmVudCwgYSBzaW5nbGUgbmFtZWQgY29tbWl0IHNwZWNpZmllcyB1bmlxdWVseSBhIHdob2xlIHNldAorb2YgaGlzdG9yeSwgd2l0aCBmdWxsIGNvbnRlbnRzLiAgWW91IGNhbid0IGxhdGVyIGZha2UgYW55IHN0ZXAgb2YgdGhlCit3YXkgb25jZSB5b3UgaGF2ZSB0aGUgbmFtZSBvZiBhIGNvbW1pdC4KKworU28gdG8gaW50cm9kdWNlIHNvbWUgcmVhbCB0cnVzdCBpbiB0aGUgc3lzdGVtLCB0aGUgb25seSB0aGluZyB5b3UgbmVlZAordG8gZG8gaXMgdG8gZGlnaXRhbGx5IHNpZ24ganVzdCAnb25lJyBzcGVjaWFsIG5vdGUsIHdoaWNoIGluY2x1ZGVzIHRoZQorbmFtZSBvZiBhIHRvcC1sZXZlbCBjb21taXQuICBZb3VyIGRpZ2l0YWwgc2lnbmF0dXJlIHNob3dzIG90aGVycwordGhhdCB5b3UgdHJ1c3QgdGhhdCBjb21taXQsIGFuZCB0aGUgaW1tdXRhYmlsaXR5IG9mIHRoZSBoaXN0b3J5IG9mCitjb21taXRzIHRlbGxzIG90aGVycyB0aGF0IHRoZXkgY2FuIHRydXN0IHRoZSB3aG9sZSBoaXN0b3J5LgorCitJbiBvdGhlciB3b3JkcywgeW91IGNhbiBlYXNpbHkgdmFsaWRhdGUgYSB3aG9sZSBhcmNoaXZlIGJ5IGp1c3QKK3NlbmRpbmcgb3V0IGEgc2luZ2xlIGVtYWlsIHRoYXQgdGVsbHMgdGhlIHBlb3BsZSB0aGUgbmFtZSAoU0hBMSBoYXNoKQorb2YgdGhlIHRvcCBjb21taXQsIGFuZCBkaWdpdGFsbHkgc2lnbiB0aGF0IGVtYWlsIHVzaW5nIHNvbWV0aGluZworbGlrZSBHUEcvUEdQLgorCitUbyBhc3Npc3QgaW4gdGhpcywgZ2l0IGFsc28gcHJvdmlkZXMgdGhlIHRhZyBvYmplY3QuLi4KKworVGFnIE9iamVjdAorfn5+fn5+fn5+fgorR2l0IHByb3ZpZGVzIHRoZSAidGFnIiBvYmplY3QgdG8gc2ltcGxpZnkgY3JlYXRpbmcsIG1hbmFnaW5nIGFuZAorZXhjaGFuZ2luZyBzeW1ib2xpYyBhbmQgc2lnbmVkIHRva2Vucy4gIFRoZSAidGFnIiBvYmplY3QgYXQgaXRzCitzaW1wbGVzdCBzaW1wbHkgc3ltYm9saWNhbGx5IGlkZW50aWZpZXMgYW5vdGhlciBvYmplY3QgYnkgY29udGFpbmluZwordGhlIHNoYTEsIHR5cGUgYW5kIHN5bWJvbGljIG5hbWUuCisKK0hvd2V2ZXIgaXQgY2FuIG9wdGlvbmFsbHkgY29udGFpbiBhZGRpdGlvbmFsIHNpZ25hdHVyZSBpbmZvcm1hdGlvbgorKHdoaWNoIGdpdCBkb2Vzbid0IGNhcmUgYWJvdXQgYXMgbG9uZyBhcyB0aGVyZSdzIGxlc3MgdGhhbiA4ayBvZgoraXQpLiBUaGlzIGNhbiB0aGVuIGJlIHZlcmlmaWVkIGV4dGVybmFsbHkgdG8gZ2l0LgorCitOb3RlIHRoYXQgZGVzcGl0ZSB0aGUgdGFnIGZlYXR1cmVzLCAiZ2l0IiBpdHNlbGYgb25seSBoYW5kbGVzIGNvbnRlbnQKK2ludGVncml0eTsgdGhlIHRydXN0IGZyYW1ld29yayAoYW5kIHNpZ25hdHVyZSBwcm92aXNpb24gYW5kCit2ZXJpZmljYXRpb24pIGhhcyB0byBjb21lIGZyb20gb3V0c2lkZS4KKworQSB0YWcgaXMgY3JlYXRlZCB3aXRoIGdpdGxpbms6Z2l0LW1rdGFnWzFdLAoraXRzIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGJ5IGdpdGxpbms6Z2l0LWNhdC1maWxlWzFdLAorYW5kIHRoZSBzaWduYXR1cmUgY2FuIGJlIHZlcmlmaWVkIGJ5CitnaXRsaW5rOmdpdC12ZXJpZnktdGFnWzFdLgorCisKK1RoZSAiaW5kZXgiIGFrYSAiQ3VycmVudCBEaXJlY3RvcnkgQ2FjaGUiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGluZGV4IGlzIGEgc2ltcGxlIGJpbmFyeSBmaWxlLCB3aGljaCBjb250YWlucyBhbiBlZmZpY2llbnQKK3JlcHJlc2VudGF0aW9uIG9mIGEgdmlydHVhbCBkaXJlY3RvcnkgY29udGVudCBhdCBzb21lIHJhbmRvbSB0aW1lLiAgSXQKK2RvZXMgc28gYnkgYSBzaW1wbGUgYXJyYXkgdGhhdCBhc3NvY2lhdGVzIGEgc2V0IG9mIG5hbWVzLCBkYXRlcywKK3Blcm1pc3Npb25zIGFuZCBjb250ZW50IChha2EgImJsb2IiKSBvYmplY3RzIHRvZ2V0aGVyLiAgVGhlIGNhY2hlIGlzCithbHdheXMga2VwdCBvcmRlcmVkIGJ5IG5hbWUsIGFuZCBuYW1lcyBhcmUgdW5pcXVlICh3aXRoIGEgZmV3IHZlcnkKK3NwZWNpZmljIHJ1bGVzKSBhdCBhbnkgcG9pbnQgaW4gdGltZSwgYnV0IHRoZSBjYWNoZSBoYXMgbm8gbG9uZy10ZXJtCittZWFuaW5nLCBhbmQgY2FuIGJlIHBhcnRpYWxseSB1cGRhdGVkIGF0IGFueSB0aW1lLgorCitJbiBwYXJ0aWN1bGFyLCB0aGUgaW5kZXggY2VydGFpbmx5IGRvZXMgbm90IG5lZWQgdG8gYmUgY29uc2lzdGVudCB3aXRoCit0aGUgY3VycmVudCBkaXJlY3RvcnkgY29udGVudHMgKGluIGZhY3QsIG1vc3Qgb3BlcmF0aW9ucyB3aWxsIGRlcGVuZCBvbgorZGlmZmVyZW50IHdheXMgdG8gbWFrZSB0aGUgaW5kZXggJ25vdCcgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBkaXJlY3RvcnkKK2hpZXJhcmNoeSksIGJ1dCBpdCBoYXMgdGhyZWUgdmVyeSBpbXBvcnRhbnQgYXR0cmlidXRlczoKKworJyhhKSBpdCBjYW4gcmUtZ2VuZXJhdGUgdGhlIGZ1bGwgc3RhdGUgaXQgY2FjaGVzIChub3QganVzdCB0aGUKK2RpcmVjdG9yeSBzdHJ1Y3R1cmU6IGl0IGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSAiYmxvYiIgb2JqZWN0cyBzbwordGhhdCBpdCBjYW4gcmVnZW5lcmF0ZSB0aGUgZGF0YSB0b28pJworCitBcyBhIHNwZWNpYWwgY2FzZSwgdGhlcmUgaXMgYSBjbGVhciBhbmQgdW5hbWJpZ3VvdXMgb25lLXdheSBtYXBwaW5nCitmcm9tIGEgY3VycmVudCBkaXJlY3RvcnkgY2FjaGUgdG8gYSAidHJlZSBvYmplY3QiLCB3aGljaCBjYW4gYmUKK2VmZmljaWVudGx5IGNyZWF0ZWQgZnJvbSBqdXN0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjYWNoZSB3aXRob3V0CithY3R1YWxseSBsb29raW5nIGF0IGFueSBvdGhlciBkYXRhLiAgU28gYSBkaXJlY3RvcnkgY2FjaGUgYXQgYW55IG9uZQordGltZSB1bmlxdWVseSBzcGVjaWZpZXMgb25lIGFuZCBvbmx5IG9uZSAidHJlZSIgb2JqZWN0IChidXQgaGFzCithZGRpdGlvbmFsIGRhdGEgdG8gbWFrZSBpdCBlYXN5IHRvIG1hdGNoIHVwIHRoYXQgdHJlZSBvYmplY3Qgd2l0aCB3aGF0CitoYXMgaGFwcGVuZWQgaW4gdGhlIGRpcmVjdG9yeSkKKworJyhiKSBpdCBoYXMgZWZmaWNpZW50IG1ldGhvZHMgZm9yIGZpbmRpbmcgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhhdAorY2FjaGVkIHN0YXRlICgidHJlZSBvYmplY3Qgd2FpdGluZyB0byBiZSBpbnN0YW50aWF0ZWQiKSBhbmQgdGhlCitjdXJyZW50IHN0YXRlLicKKworJyhjKSBpdCBjYW4gYWRkaXRpb25hbGx5IGVmZmljaWVudGx5IHJlcHJlc2VudCBpbmZvcm1hdGlvbiBhYm91dCBtZXJnZQorY29uZmxpY3RzIGJldHdlZW4gZGlmZmVyZW50IHRyZWUgb2JqZWN0cywgYWxsb3dpbmcgZWFjaCBwYXRobmFtZSB0byBiZQorYXNzb2NpYXRlZCB3aXRoIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRyZWVzIGludm9sdmVkIHRoYXQKK3lvdSBjYW4gY3JlYXRlIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gdGhlbS4nCisKK1Rob3NlIGFyZSB0aGUgdGhyZWUgT05MWSB0aGluZ3MgdGhhdCB0aGUgZGlyZWN0b3J5IGNhY2hlIGRvZXMuICBJdCdzIGEKK2NhY2hlLCBhbmQgdGhlIG5vcm1hbCBvcGVyYXRpb24gaXMgdG8gcmUtZ2VuZXJhdGUgaXQgY29tcGxldGVseSBmcm9tIGEKK2tub3duIHRyZWUgb2JqZWN0LCBvciB1cGRhdGUvY29tcGFyZSBpdCB3aXRoIGEgbGl2ZSB0cmVlIHRoYXQgaXMgYmVpbmcKK2RldmVsb3BlZC4gIElmIHlvdSBibG93IHRoZSBkaXJlY3RvcnkgY2FjaGUgYXdheSBlbnRpcmVseSwgeW91IGdlbmVyYWxseQoraGF2ZW4ndCBsb3N0IGFueSBpbmZvcm1hdGlvbiBhcyBsb25nIGFzIHlvdSBoYXZlIHRoZSBuYW1lIG9mIHRoZSB0cmVlCit0aGF0IGl0IGRlc2NyaWJlZC4KKworQXQgdGhlIHNhbWUgdGltZSwgdGhlIGluZGV4IGlzIGF0IHRoZSBzYW1lIHRpbWUgYWxzbyB0aGUKK3N0YWdpbmcgYXJlYSBmb3IgY3JlYXRpbmcgbmV3IHRyZWVzLCBhbmQgY3JlYXRpbmcgYSBuZXcgdHJlZSBhbHdheXMKK2ludm9sdmVzIGEgY29udHJvbGxlZCBtb2RpZmljYXRpb24gb2YgdGhlIGluZGV4IGZpbGUuICBJbiBwYXJ0aWN1bGFyLAordGhlIGluZGV4IGZpbGUgY2FuIGhhdmUgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVybWVkaWF0ZSB0cmVlIHRoYXQKK2hhcyBub3QgeWV0IGJlZW4gaW5zdGFudGlhdGVkLiAgU28gdGhlIGluZGV4IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEKK3dyaXRlLWJhY2sgY2FjaGUsIHdoaWNoIGNhbiBjb250YWluIGRpcnR5IGluZm9ybWF0aW9uIHRoYXQgaGFzIG5vdCB5ZXQKK2JlZW4gd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN0b3JlLgorCisKKworVGhlIFdvcmtmbG93CistLS0tLS0tLS0tLS0KK0dlbmVyYWxseSwgYWxsICJnaXQiIG9wZXJhdGlvbnMgd29yayBvbiB0aGUgaW5kZXggZmlsZS4gU29tZSBvcGVyYXRpb25zCit3b3JrICpwdXJlbHkqIG9uIHRoZSBpbmRleCBmaWxlIChzaG93aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQoraW5kZXgpLCBidXQgbW9zdCBvcGVyYXRpb25zIG1vdmUgZGF0YSB0byBhbmQgZnJvbSB0aGUgaW5kZXggZmlsZS4gRWl0aGVyCitmcm9tIHRoZSBkYXRhYmFzZSBvciBmcm9tIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gVGh1cyB0aGVyZSBhcmUgZm91cgorbWFpbiBjb21iaW5hdGlvbnM6CisKKzEpIHdvcmtpbmcgZGlyZWN0b3J5IC0+IGluZGV4Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgdXBkYXRlIHRoZSBpbmRleCB3aXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGgKK3RoZSBnaXRsaW5rOmdpdC11cGRhdGUtaW5kZXhbMV0gY29tbWFuZC4gIFlvdQorZ2VuZXJhbGx5IHVwZGF0ZSB0aGUgaW5kZXggaW5mb3JtYXRpb24gYnkganVzdCBzcGVjaWZ5aW5nIHRoZSBmaWxlbmFtZQoreW91IHdhbnQgdG8gdXBkYXRlLCBsaWtlIHNvOgorCisJZ2l0LXVwZGF0ZS1pbmRleCBmaWxlbmFtZQorCitidXQgdG8gYXZvaWQgY29tbW9uIG1pc3Rha2VzIHdpdGggZmlsZW5hbWUgZ2xvYmJpbmcgZXRjLCB0aGUgY29tbWFuZAord2lsbCBub3Qgbm9ybWFsbHkgYWRkIHRvdGFsbHkgbmV3IGVudHJpZXMgb3IgcmVtb3ZlIG9sZCBlbnRyaWVzLAoraS5lLiBpdCB3aWxsIG5vcm1hbGx5IGp1c3QgdXBkYXRlIGV4aXN0aW5nIGNhY2hlIGVudHJpZXMuCisKK1RvIHRlbGwgZ2l0IHRoYXQgeWVzLCB5b3UgcmVhbGx5IGRvIHJlYWxpemUgdGhhdCBjZXJ0YWluIGZpbGVzIG5vCitsb25nZXIgZXhpc3QsIG9yIHRoYXQgbmV3IGZpbGVzIHNob3VsZCBiZSBhZGRlZCwgeW91CitzaG91bGQgdXNlIHRoZSBgLS1yZW1vdmVgIGFuZCBgLS1hZGRgIGZsYWdzIHJlc3BlY3RpdmVseS4KKworTk9URSEgQSBgLS1yZW1vdmVgIGZsYWcgZG9lcyAnbm90JyBtZWFuIHRoYXQgc3Vic2VxdWVudCBmaWxlbmFtZXMgd2lsbAorbmVjZXNzYXJpbHkgYmUgcmVtb3ZlZDogaWYgdGhlIGZpbGVzIHN0aWxsIGV4aXN0IGluIHlvdXIgZGlyZWN0b3J5CitzdHJ1Y3R1cmUsIHRoZSBpbmRleCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGVpciBuZXcgc3RhdHVzLCBub3QKK3JlbW92ZWQuIFRoZSBvbmx5IHRoaW5nIGAtLXJlbW92ZWAgbWVhbnMgaXMgdGhhdCB1cGRhdGUtY2FjaGUgd2lsbCBiZQorY29uc2lkZXJpbmcgYSByZW1vdmVkIGZpbGUgdG8gYmUgYSB2YWxpZCB0aGluZywgYW5kIGlmIHRoZSBmaWxlIHJlYWxseQorZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIGl0IHdpbGwgdXBkYXRlIHRoZSBpbmRleCBhY2NvcmRpbmdseS4KKworQXMgYSBzcGVjaWFsIGNhc2UsIHlvdSBjYW4gYWxzbyBkbyBgZ2l0LXVwZGF0ZS1pbmRleCAtLXJlZnJlc2hgLCB3aGljaAord2lsbCByZWZyZXNoIHRoZSAic3RhdCIgaW5mb3JtYXRpb24gb2YgZWFjaCBpbmRleCB0byBtYXRjaCB0aGUgY3VycmVudAorc3RhdCBpbmZvcm1hdGlvbi4gSXQgd2lsbCAnbm90JyB1cGRhdGUgdGhlIG9iamVjdCBzdGF0dXMgaXRzZWxmLCBhbmQKK2l0IHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkcyB0aGF0IGFyZSB1c2VkIHRvIHF1aWNrbHkgdGVzdCB3aGV0aGVyCithbiBvYmplY3Qgc3RpbGwgbWF0Y2hlcyBpdHMgb2xkIGJhY2tpbmcgc3RvcmUgb2JqZWN0LgorCisyKSBpbmRleCAtPiBvYmplY3QgZGF0YWJhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3Ugd3JpdGUgeW91ciBjdXJyZW50IGluZGV4IGZpbGUgdG8gYSAidHJlZSIgb2JqZWN0IHdpdGggdGhlIHByb2dyYW0KKworCWdpdC13cml0ZS10cmVlCisKK3RoYXQgZG9lc24ndCBjb21lIHdpdGggYW55IG9wdGlvbnMgLSBpdCB3aWxsIGp1c3Qgd3JpdGUgb3V0IHRoZQorY3VycmVudCBpbmRleCBpbnRvIHRoZSBzZXQgb2YgdHJlZSBvYmplY3RzIHRoYXQgZGVzY3JpYmUgdGhhdCBzdGF0ZSwKK2FuZCBpdCB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHRvcC1sZXZlbCB0cmVlLiBZb3UgY2FuCit1c2UgdGhhdCB0cmVlIHRvIHJlLWdlbmVyYXRlIHRoZSBpbmRleCBhdCBhbnkgdGltZSBieSBnb2luZyBpbiB0aGUKK290aGVyIGRpcmVjdGlvbjoKKworMykgb2JqZWN0IGRhdGFiYXNlIC0+IGluZGV4Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IHJlYWQgYSAidHJlZSIgZmlsZSBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UsIGFuZCB1c2UgdGhhdCB0bworcG9wdWxhdGUgKGFuZCBvdmVyd3JpdGUgLSBkb24ndCBkbyB0aGlzIGlmIHlvdXIgaW5kZXggY29udGFpbnMgYW55Cit1bnNhdmVkIHN0YXRlIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gcmVzdG9yZSBsYXRlciEpIHlvdXIgY3VycmVudAoraW5kZXguICBOb3JtYWwgb3BlcmF0aW9uIGlzIGp1c3QKKworCQlnaXQtcmVhZC10cmVlIDxzaGExIG9mIHRyZWU+CisKK2FuZCB5b3VyIGluZGV4IGZpbGUgd2lsbCBub3cgYmUgZXF1aXZhbGVudCB0byB0aGUgdHJlZSB0aGF0IHlvdSBzYXZlZAorZWFybGllci4gSG93ZXZlciwgdGhhdCBpcyBvbmx5IHlvdXIgJ2luZGV4JyBmaWxlOiB5b3VyIHdvcmtpbmcKK2RpcmVjdG9yeSBjb250ZW50cyBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkLgorCis0KSBpbmRleCAtPiB3b3JraW5nIGRpcmVjdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IHVwZGF0ZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGZyb20gdGhlIGluZGV4IGJ5ICJjaGVja2luZyBvdXQiCitmaWxlcy4gVGhpcyBpcyBub3QgYSB2ZXJ5IGNvbW1vbiBvcGVyYXRpb24sIHNpbmNlIG5vcm1hbGx5IHlvdSdkIGp1c3QKK2tlZXAgeW91ciBmaWxlcyB1cGRhdGVkLCBhbmQgcmF0aGVyIHRoYW4gd3JpdGUgdG8geW91ciB3b3JraW5nCitkaXJlY3RvcnksIHlvdSdkIHRlbGwgdGhlIGluZGV4IGZpbGVzIGFib3V0IHRoZSBjaGFuZ2VzIGluIHlvdXIKK3dvcmtpbmcgZGlyZWN0b3J5IChpLmUuIGBnaXQtdXBkYXRlLWluZGV4YCkuCisKK0hvd2V2ZXIsIGlmIHlvdSBkZWNpZGUgdG8ganVtcCB0byBhIG5ldyB2ZXJzaW9uLCBvciBjaGVjayBvdXQgc29tZWJvZHkKK2Vsc2UncyB2ZXJzaW9uLCBvciBqdXN0IHJlc3RvcmUgYSBwcmV2aW91cyB0cmVlLCB5b3UnZCBwb3B1bGF0ZSB5b3VyCitpbmRleCBmaWxlIHdpdGggcmVhZC10cmVlLCBhbmQgdGhlbiB5b3UgbmVlZCB0byBjaGVjayBvdXQgdGhlIHJlc3VsdAord2l0aAorCisJCWdpdC1jaGVja291dC1pbmRleCBmaWxlbmFtZQorCitvciwgaWYgeW91IHdhbnQgdG8gY2hlY2sgb3V0IGFsbCBvZiB0aGUgaW5kZXgsIHVzZSBgLWFgLgorCitOT1RFISBnaXQtY2hlY2tvdXQtaW5kZXggbm9ybWFsbHkgcmVmdXNlcyB0byBvdmVyd3JpdGUgb2xkIGZpbGVzLCBzbworaWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gb2YgdGhlIHRyZWUgYWxyZWFkeSBjaGVja2VkIG91dCwgeW91IHdpbGwKK25lZWQgdG8gdXNlIHRoZSAiLWYiIGZsYWcgKCdiZWZvcmUnIHRoZSAiLWEiIGZsYWcgb3IgdGhlIGZpbGVuYW1lKSB0bworJ2ZvcmNlJyB0aGUgY2hlY2tvdXQuCisKKworRmluYWxseSwgdGhlcmUgYXJlIGEgZmV3IG9kZHMgYW5kIGVuZHMgd2hpY2ggYXJlIG5vdCBwdXJlbHkgbW92aW5nCitmcm9tIG9uZSByZXByZXNlbnRhdGlvbiB0byB0aGUgb3RoZXI6CisKKzUpIFR5aW5nIGl0IGFsbCB0b2dldGhlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUbyBjb21taXQgYSB0cmVlIHlvdSBoYXZlIGluc3RhbnRpYXRlZCB3aXRoICJnaXQtd3JpdGUtdHJlZSIsIHlvdSdkCitjcmVhdGUgYSAiY29tbWl0IiBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhhdCB0cmVlIGFuZCB0aGUgaGlzdG9yeQorYmVoaW5kIGl0IC0gbW9zdCBub3RhYmx5IHRoZSAicGFyZW50IiBjb21taXRzIHRoYXQgcHJlY2VkZWQgaXQgaW4KK2hpc3RvcnkuCisKK05vcm1hbGx5IGEgImNvbW1pdCIgaGFzIG9uZSBwYXJlbnQ6IHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgdHJlZQorYmVmb3JlIGEgY2VydGFpbiBjaGFuZ2Ugd2FzIG1hZGUuIEhvd2V2ZXIsIHNvbWV0aW1lcyBpdCBjYW4gaGF2ZSB0d28KK29yIG1vcmUgcGFyZW50IGNvbW1pdHMsIGluIHdoaWNoIGNhc2Ugd2UgY2FsbCBpdCBhICJtZXJnZSIsIGR1ZSB0byB0aGUKK2ZhY3QgdGhhdCBzdWNoIGEgY29tbWl0IGJyaW5ncyB0b2dldGhlciAoIm1lcmdlcyIpIHR3byBvciBtb3JlCitwcmV2aW91cyBzdGF0ZXMgcmVwcmVzZW50ZWQgYnkgb3RoZXIgY29tbWl0cy4KKworSW4gb3RoZXIgd29yZHMsIHdoaWxlIGEgInRyZWUiIHJlcHJlc2VudHMgYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSBzdGF0ZQorb2YgYSB3b3JraW5nIGRpcmVjdG9yeSwgYSAiY29tbWl0IiByZXByZXNlbnRzIHRoYXQgc3RhdGUgaW4gInRpbWUiLAorYW5kIGV4cGxhaW5zIGhvdyB3ZSBnb3QgdGhlcmUuCisKK1lvdSBjcmVhdGUgYSBjb21taXQgb2JqZWN0IGJ5IGdpdmluZyBpdCB0aGUgdHJlZSB0aGF0IGRlc2NyaWJlcyB0aGUKK3N0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBjb21taXQsIGFuZCBhIGxpc3Qgb2YgcGFyZW50czoKKworCWdpdC1jb21taXQtdHJlZSA8dHJlZT4gLXAgPHBhcmVudD4gWy1wIDxwYXJlbnQyPiAuLl0KKworYW5kIHRoZW4gZ2l2aW5nIHRoZSByZWFzb24gZm9yIHRoZSBjb21taXQgb24gc3RkaW4gKGVpdGhlciB0aHJvdWdoCityZWRpcmVjdGlvbiBmcm9tIGEgcGlwZSBvciBmaWxlLCBvciBieSBqdXN0IHR5cGluZyBpdCBhdCB0aGUgdHR5KS4KKworZ2l0LWNvbW1pdC10cmVlIHdpbGwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdGhhdCByZXByZXNlbnRzCit0aGF0IGNvbW1pdCwgYW5kIHlvdSBzaG91bGQgc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UuIE5vcm1hbGx5LAoreW91J2QgY29tbWl0IGEgbmV3IGBIRUFEYCBzdGF0ZSwgYW5kIHdoaWxlIGdpdCBkb2Vzbid0IGNhcmUgd2hlcmUgeW91CitzYXZlIHRoZSBub3RlIGFib3V0IHRoYXQgc3RhdGUsIGluIHByYWN0aWNlIHdlIHRlbmQgdG8ganVzdCB3cml0ZSB0aGUKK3Jlc3VsdCB0byB0aGUgZmlsZSBwb2ludGVkIGF0IGJ5IGAuZ2l0L0hFQURgLCBzbyB0aGF0IHdlIGNhbiBhbHdheXMgc2VlCit3aGF0IHRoZSBsYXN0IGNvbW1pdHRlZCBzdGF0ZSB3YXMuCisKK0hlcmUgaXMgYW4gQVNDSUkgYXJ0IGJ5IEpvbiBMb2VsaWdlciB0aGF0IGlsbHVzdHJhdGVzIGhvdwordmFyaW91cyBwaWVjZXMgZml0IHRvZ2V0aGVyLgorCistLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgY29tbWl0LXRyZWUKKyAgICAgICAgICAgICAgICAgICAgICBjb21taXQgb2JqCisgICAgICAgICAgICAgICAgICAgICAgICstLS0tKworICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIFYgICAgVgorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgT2JqZWN0IERCIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgQmFja2luZyAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgU3RvcmUgICB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICAgICAgICB3cml0ZS10cmVlICB8ICAgICB8CisgICAgICAgICAgICAgdHJlZSBvYmogIHwgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgcmVhZC10cmVlCisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHRyZWUgb2JqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8ICAgSW5kZXggICB8CisgICAgICAgICAgICAgICAgICAgIHwgICJjYWNoZSIgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgdXBkYXRlLWluZGV4ICBeCisgICAgICAgICAgICAgYmxvYiBvYmogIHwgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAorICAgIGNoZWNrb3V0LWluZGV4IC11ICB8ICAgICB8ICBjaGVja291dC1pbmRleAorICAgICAgICAgICAgIHN0YXQgICAgICB8ICAgICB8ICBibG9iIG9iagorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCAgV29ya2luZyAgfAorICAgICAgICAgICAgICAgICAgICB8IERpcmVjdG9yeSB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKworLS0tLS0tLS0tLS0tCisKKworNikgRXhhbWluaW5nIHRoZSBkYXRhCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBleGFtaW5lIHRoZSBkYXRhIHJlcHJlc2VudGVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZQoraW5kZXggd2l0aCB2YXJpb3VzIGhlbHBlciB0b29scy4gRm9yIGV2ZXJ5IG9iamVjdCwgeW91IGNhbiB1c2UKK2dpdGxpbms6Z2l0LWNhdC1maWxlWzFdIHRvIGV4YW1pbmUgZGV0YWlscyBhYm91dCB0aGUKK29iamVjdDoKKworCQlnaXQtY2F0LWZpbGUgLXQgPG9iamVjdG5hbWU+CisKK3Nob3dzIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIGFuZCBvbmNlIHlvdSBoYXZlIHRoZSB0eXBlICh3aGljaCBpcwordXN1YWxseSBpbXBsaWNpdCBpbiB3aGVyZSB5b3UgZmluZCB0aGUgb2JqZWN0KSwgeW91IGNhbiB1c2UKKworCQlnaXQtY2F0LWZpbGUgYmxvYnx0cmVlfGNvbW1pdHx0YWcgPG9iamVjdG5hbWU+CisKK3RvIHNob3cgaXRzIGNvbnRlbnRzLiBOT1RFISBUcmVlcyBoYXZlIGJpbmFyeSBjb250ZW50LCBhbmQgYXMgYSByZXN1bHQKK3RoZXJlIGlzIGEgc3BlY2lhbCBoZWxwZXIgZm9yIHNob3dpbmcgdGhhdCBjb250ZW50LCBjYWxsZWQKK2BnaXQtbHMtdHJlZWAsIHdoaWNoIHR1cm5zIHRoZSBiaW5hcnkgY29udGVudCBpbnRvIGEgbW9yZSBlYXNpbHkKK3JlYWRhYmxlIGZvcm0uCisKK0l0J3MgZXNwZWNpYWxseSBpbnN0cnVjdGl2ZSB0byBsb29rIGF0ICJjb21taXQiIG9iamVjdHMsIHNpbmNlIHRob3NlCit0ZW5kIHRvIGJlIHNtYWxsIGFuZCBmYWlybHkgc2VsZi1leHBsYW5hdG9yeS4gSW4gcGFydGljdWxhciwgaWYgeW91Citmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YgaGF2aW5nIHRoZSB0b3AgY29tbWl0IG5hbWUgaW4gYC5naXQvSEVBRGAsCit5b3UgY2FuIGRvCisKKwkJZ2l0LWNhdC1maWxlIGNvbW1pdCBIRUFECisKK3RvIHNlZSB3aGF0IHRoZSB0b3AgY29tbWl0IHdhcy4KKworNykgTWVyZ2luZyBtdWx0aXBsZSB0cmVlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitHaXQgaGVscHMgeW91IGRvIGEgdGhyZWUtd2F5IG1lcmdlLCB3aGljaCB5b3UgY2FuIGV4cGFuZCB0byBuLXdheSBieQorcmVwZWF0aW5nIHRoZSBtZXJnZSBwcm9jZWR1cmUgYXJiaXRyYXJ5IHRpbWVzIHVudGlsIHlvdSBmaW5hbGx5CisiY29tbWl0IiB0aGUgc3RhdGUuICBUaGUgbm9ybWFsIHNpdHVhdGlvbiBpcyB0aGF0IHlvdSdkIG9ubHkgZG8gb25lCit0aHJlZS13YXkgbWVyZ2UgKHR3byBwYXJlbnRzKSwgYW5kIGNvbW1pdCBpdCwgYnV0IGlmIHlvdSBsaWtlIHRvLCB5b3UKK2NhbiBkbyBtdWx0aXBsZSBwYXJlbnRzIGluIG9uZSBnby4KKworVG8gZG8gYSB0aHJlZS13YXkgbWVyZ2UsIHlvdSBuZWVkIHRoZSB0d28gc2V0cyBvZiAiY29tbWl0IiBvYmplY3RzCit0aGF0IHlvdSB3YW50IHRvIG1lcmdlLCB1c2UgdGhvc2UgdG8gZmluZCB0aGUgY2xvc2VzdCBjb21tb24gcGFyZW50IChhCit0aGlyZCAiY29tbWl0IiBvYmplY3QpLCBhbmQgdGhlbiB1c2UgdGhvc2UgY29tbWl0IG9iamVjdHMgdG8gZmluZCB0aGUKK3N0YXRlIG9mIHRoZSBkaXJlY3RvcnkgKCJ0cmVlIiBvYmplY3QpIGF0IHRoZXNlIHBvaW50cy4KKworVG8gZ2V0IHRoZSAiYmFzZSIgZm9yIHRoZSBtZXJnZSwgeW91IGZpcnN0IGxvb2sgdXAgdGhlIGNvbW1vbiBwYXJlbnQKK29mIHR3byBjb21taXRzIHdpdGgKKworCQlnaXQtbWVyZ2UtYmFzZSA8Y29tbWl0MT4gPGNvbW1pdDI+CisKK3doaWNoIHdpbGwgcmV0dXJuIHlvdSB0aGUgY29tbWl0IHRoZXkgYXJlIGJvdGggYmFzZWQgb24uICBZb3Ugc2hvdWxkCitub3cgbG9vayB1cCB0aGUgInRyZWUiIG9iamVjdHMgb2YgdGhvc2UgY29tbWl0cywgd2hpY2ggeW91IGNhbiBlYXNpbHkKK2RvIHdpdGggKGZvciBleGFtcGxlKQorCisJCWdpdC1jYXQtZmlsZSBjb21taXQgPGNvbW1pdG5hbWU+IHwgaGVhZCAtMQorCitzaW5jZSB0aGUgdHJlZSBvYmplY3QgaW5mb3JtYXRpb24gaXMgYWx3YXlzIHRoZSBmaXJzdCBsaW5lIGluIGEgY29tbWl0CitvYmplY3QuCisKK09uY2UgeW91IGtub3cgdGhlIHRocmVlIHRyZWVzIHlvdSBhcmUgZ29pbmcgdG8gbWVyZ2UgKHRoZSBvbmUKKyJvcmlnaW5hbCIgdHJlZSwgYWthIHRoZSBjb21tb24gY2FzZSwgYW5kIHRoZSB0d28gInJlc3VsdCIgdHJlZXMsIGFrYQordGhlIGJyYW5jaGVzIHlvdSB3YW50IHRvIG1lcmdlKSwgeW91IGRvIGEgIm1lcmdlIiByZWFkIGludG8gdGhlCitpbmRleC4gVGhpcyB3aWxsIGNvbXBsYWluIGlmIGl0IGhhcyB0byB0aHJvdyBhd2F5IHlvdXIgb2xkIGluZGV4IGNvbnRlbnRzLCBzbyB5b3Ugc2hvdWxkCittYWtlIHN1cmUgdGhhdCB5b3UndmUgY29tbWl0dGVkIHRob3NlIC0gaW4gZmFjdCB5b3Ugd291bGQgbm9ybWFsbHkKK2Fsd2F5cyBkbyBhIG1lcmdlIGFnYWluc3QgeW91ciBsYXN0IGNvbW1pdCAod2hpY2ggc2hvdWxkIHRodXMgbWF0Y2gKK3doYXQgeW91IGhhdmUgaW4geW91ciBjdXJyZW50IGluZGV4IGFueXdheSkuCisKK1RvIGRvIHRoZSBtZXJnZSwgZG8KKworCQlnaXQtcmVhZC10cmVlIC1tIC11IDxvcmlndHJlZT4gPHlvdXJ0cmVlPiA8dGFyZ2V0dHJlZT4KKword2hpY2ggd2lsbCBkbyBhbGwgdHJpdmlhbCBtZXJnZSBvcGVyYXRpb25zIGZvciB5b3UgZGlyZWN0bHkgaW4gdGhlCitpbmRleCBmaWxlLCBhbmQgeW91IGNhbiBqdXN0IHdyaXRlIHRoZSByZXN1bHQgb3V0IHdpdGgKK2BnaXQtd3JpdGUtdHJlZWAuCisKK0hpc3RvcmljYWwgbm90ZS4gIFdlIGRpZCBub3QgaGF2ZSBgLXVgIGZhY2lsaXR5IHdoZW4gdGhpcworc2VjdGlvbiB3YXMgZmlyc3Qgd3JpdHRlbiwgc28gd2UgdXNlZCB0byB3YXJuIHRoYXQKK3RoZSBtZXJnZSBpcyBkb25lIGluIHRoZSBpbmRleCBmaWxlLCBub3QgaW4geW91cgord29ya2luZyB0cmVlLCBhbmQgeW91ciB3b3JraW5nIHRyZWUgd2lsbCBub3QgbWF0Y2ggeW91cgoraW5kZXggYWZ0ZXIgdGhpcyBzdGVwLgorVGhpcyBpcyBubyBsb25nZXIgdHJ1ZS4gIFRoZSBhYm92ZSBjb21tYW5kLCB0aGFua3MgdG8gYC11YAorb3B0aW9uLCB1cGRhdGVzIHlvdXIgd29ya2luZyB0cmVlIHdpdGggdGhlIG1lcmdlIHJlc3VsdHMgZm9yCitwYXRocyB0aGF0IGhhdmUgYmVlbiB0cml2aWFsbHkgbWVyZ2VkLgorCisKKzgpIE1lcmdpbmcgbXVsdGlwbGUgdHJlZXMsIGNvbnRpbnVlZAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NhZGx5LCBtYW55IG1lcmdlcyBhcmVuJ3QgdHJpdmlhbC4gSWYgdGhlcmUgYXJlIGZpbGVzIHRoYXQgaGF2ZQorYmVlbiBhZGRlZC5tb3ZlZCBvciByZW1vdmVkLCBvciBpZiBib3RoIGJyYW5jaGVzIGhhdmUgbW9kaWZpZWQgdGhlCitzYW1lIGZpbGUsIHlvdSB3aWxsIGJlIGxlZnQgd2l0aCBhbiBpbmRleCB0cmVlIHRoYXQgY29udGFpbnMgIm1lcmdlCitlbnRyaWVzIiBpbiBpdC4gU3VjaCBhbiBpbmRleCB0cmVlIGNhbiAnTk9UJyBiZSB3cml0dGVuIG91dCB0byBhIHRyZWUKK29iamVjdCwgYW5kIHlvdSB3aWxsIGhhdmUgdG8gcmVzb2x2ZSBhbnkgc3VjaCBtZXJnZSBjbGFzaGVzIHVzaW5nCitvdGhlciB0b29scyBiZWZvcmUgeW91IGNhbiB3cml0ZSBvdXQgdGhlIHJlc3VsdC4KKworWW91IGNhbiBleGFtaW5lIHN1Y2ggaW5kZXggc3RhdGUgd2l0aCBgZ2l0LWxzLWZpbGVzIC0tdW5tZXJnZWRgCitjb21tYW5kLiAgQW4gZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdC1yZWFkLXRyZWUgLW0gJG9yaWcgSEVBRCAkdGFyZ2V0CiskIGdpdC1scy1maWxlcyAtLXVubWVyZ2VkCisxMDA2NDQgMjYzNDE0ZjQyM2QwZTRkNzBkYWU4ZmU1M2ZhMzQ2MTRmZjNlMjg2MCAxCWhlbGxvLmMKKzEwMDY0NCAwNmZhNmEyNDI1NmRjN2U1NjBlZmE1Njg3ZmE4NGI1MWYwMjYzYzNhIDIJaGVsbG8uYworMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsby5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRWFjaCBsaW5lIG9mIHRoZSBgZ2l0LWxzLWZpbGVzIC0tdW5tZXJnZWRgIG91dHB1dCBiZWdpbnMgd2l0aAordGhlIGJsb2IgbW9kZSBiaXRzLCBibG9iIFNIQTEsICdzdGFnZSBudW1iZXInLCBhbmQgdGhlCitmaWxlbmFtZS4gIFRoZSAnc3RhZ2UgbnVtYmVyJyBpcyBnaXQncyB3YXkgdG8gc2F5IHdoaWNoIHRyZWUgaXQKK2NhbWUgZnJvbTogc3RhZ2UgMSBjb3JyZXNwb25kcyB0byBgJG9yaWdgIHRyZWUsIHN0YWdlIDIgYEhFQURgCit0cmVlLCBhbmQgc3RhZ2UzIGAkdGFyZ2V0YCB0cmVlLgorCitFYXJsaWVyIHdlIHNhaWQgdGhhdCB0cml2aWFsIG1lcmdlcyBhcmUgZG9uZSBpbnNpZGUKK2BnaXQtcmVhZC10cmVlIC1tYC4gIEZvciBleGFtcGxlLCBpZiB0aGUgZmlsZSBkaWQgbm90IGNoYW5nZQorZnJvbSBgJG9yaWdgIHRvIGBIRUFEYCBub3IgYCR0YXJnZXRgLCBvciBpZiB0aGUgZmlsZSBjaGFuZ2VkCitmcm9tIGAkb3JpZ2AgdG8gYEhFQURgIGFuZCBgJG9yaWdgIHRvIGAkdGFyZ2V0YCB0aGUgc2FtZSB3YXksCitvYnZpb3VzbHkgdGhlIGZpbmFsIG91dGNvbWUgaXMgd2hhdCBpcyBpbiBgSEVBRGAuICBXaGF0IHRoZQorYWJvdmUgZXhhbXBsZSBzaG93cyBpcyB0aGF0IGZpbGUgYGhlbGxvLmNgIHdhcyBjaGFuZ2VkIGZyb20KK2Akb3JpZ2AgdG8gYEhFQURgIGFuZCBgJG9yaWdgIHRvIGAkdGFyZ2V0YCBpbiBhIGRpZmZlcmVudCB3YXkuCitZb3UgY291bGQgcmVzb2x2ZSB0aGlzIGJ5IHJ1bm5pbmcgeW91ciBmYXZvcml0ZSAzLXdheSBtZXJnZQorcHJvZ3JhbSwgZS5nLiAgYGRpZmYzYCBvciBgbWVyZ2VgLCBvbiB0aGUgYmxvYiBvYmplY3RzIGZyb20KK3RoZXNlIHRocmVlIHN0YWdlcyB5b3Vyc2VsZiwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0LWNhdC1maWxlIGJsb2IgMjYzNDE0Zi4uLiA+aGVsbG8uY34xCiskIGdpdC1jYXQtZmlsZSBibG9iIDA2ZmE2YTIuLi4gPmhlbGxvLmN+MgorJCBnaXQtY2F0LWZpbGUgYmxvYiBjYzQ0YzczLi4uID5oZWxsby5jfjMKKyQgbWVyZ2UgaGVsbG8uY34yIGhlbGxvLmN+MSBoZWxsby5jfjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdvdWxkIGxlYXZlIHRoZSBtZXJnZSByZXN1bHQgaW4gYGhlbGxvLmN+MmAgZmlsZSwgYWxvbmcKK3dpdGggY29uZmxpY3QgbWFya2VycyBpZiB0aGVyZSBhcmUgY29uZmxpY3RzLiAgQWZ0ZXIgdmVyaWZ5aW5nCit0aGUgbWVyZ2UgcmVzdWx0IG1ha2VzIHNlbnNlLCB5b3UgY2FuIHRlbGwgZ2l0IHdoYXQgdGhlIGZpbmFsCittZXJnZSByZXN1bHQgZm9yIHRoaXMgZmlsZSBpcyBieToKKworCW12IC1mIGhlbGxvLmN+MiBoZWxsby5jCisJZ2l0LXVwZGF0ZS1pbmRleCBoZWxsby5jCisKK1doZW4gYSBwYXRoIGlzIGluIHVubWVyZ2VkIHN0YXRlLCBydW5uaW5nIGBnaXQtdXBkYXRlLWluZGV4YCBmb3IKK3RoYXQgcGF0aCB0ZWxscyBnaXQgdG8gbWFyayB0aGUgcGF0aCByZXNvbHZlZC4KKworVGhlIGFib3ZlIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGdpdCBtZXJnZSBhdCB0aGUgbG93ZXN0IGxldmVsLAordG8gaGVscCB5b3UgdW5kZXJzdGFuZCB3aGF0IGNvbmNlcHR1YWxseSBoYXBwZW5zIHVuZGVyIHRoZSBob29kLgorSW4gcHJhY3RpY2UsIG5vYm9keSwgbm90IGV2ZW4gZ2l0IGl0c2VsZiwgdXNlcyB0aHJlZSBgZ2l0LWNhdC1maWxlYAorZm9yIHRoaXMuICBUaGVyZSBpcyBgZ2l0LW1lcmdlLWluZGV4YCBwcm9ncmFtIHRoYXQgZXh0cmFjdHMgdGhlCitzdGFnZXMgdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBjYWxscyBhICJtZXJnZSIgc2NyaXB0IG9uIGl0OgorCisJZ2l0LW1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSBoZWxsby5jCisKK2FuZCB0aGF0IGlzIHdoYXQgaGlnaGVyIGxldmVsIGBnaXQgcmVzb2x2ZWAgaXMgaW1wbGVtZW50ZWQgd2l0aC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS10dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvcmUtdHV0b3JpYWwudHh0CmluZGV4IDBjZDMzZmIuLjg2YTljNzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS10dXRvcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLXR1dG9yaWFsLnR4dApAQCAtOTA2LDE4ICs5MDYsMTMgQEAKIGZpbGUsIHdoaWNoIGhhZCBubyBkaWZmZXJlbmNlcyBpbiB0aGUgYG15YnJhbmNoYCBicmFuY2gpLCBhbmQgc2F5OgogCiAtLS0tLS0tLS0tLS0tLS0tCi0JVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uCi0JZmF0YWw6IE1lcmdlIHJlcXVpcmVzIGZpbGUtbGV2ZWwgbWVyZ2luZwotCU5vcGUuCi0JLi4uCiAJQXV0by1tZXJnaW5nIGhlbGxvIAogCUNPTkZMSUNUIChjb250ZW50KTogTWVyZ2UgY29uZmxpY3QgaW4gaGVsbG8gCiAJQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IHVwIGJ5IGhhbmQKIC0tLS0tLS0tLS0tLS0tLS0KIAotd2hpY2ggaXMgd2F5IHRvbyB2ZXJib3NlLCBidXQgaXQgYmFzaWNhbGx5IHRlbGxzIHlvdSB0aGF0IGl0IGZhaWxlZCB0aGUKLXJlYWxseSB0cml2aWFsIG1lcmdlICgiU2ltcGxlIG1lcmdlIikgYW5kIGRpZCBhbiAiQXV0b21hdGljIG1lcmdlIgotaW5zdGVhZCwgYnV0IHRoYXQgdG9vIGZhaWxlZCBkdWUgdG8gY29uZmxpY3RzIGluIGBoZWxsb2AuCitJdCB0ZWxscyB5b3UgdGhhdCBpdCBkaWQgYW4gIkF1dG9tYXRpYyBtZXJnZSIsIHdoaWNoCitmYWlsZWQgZHVlIHRvIGNvbmZsaWN0cyBpbiBgaGVsbG9gLgogCiBOb3QgdG8gd29ycnkuIEl0IGxlZnQgdGhlICh0cml2aWFsKSBjb25mbGljdCBpbiBgaGVsbG9gIGluIHRoZSBzYW1lIGZvcm0geW91CiBzaG91bGQgYWxyZWFkeSBiZSB3ZWxsIHVzZWQgdG8gaWYgeW91J3ZlIGV2ZXIgdXNlZCBDVlMsIHNvIGxldCdzIGp1c3QKQEAgLTExMjksNDYgKzExMjQsMjYgQEAKIGNvdXJzZSwgeW91IHdpbGwgcGF5IHRoZSBwcmljZSBvZiBtb3JlIGRpc2sgdXNhZ2UgdG8gaG9sZAogbXVsdGlwbGUgd29ya2luZyB0cmVlcywgYnV0IGRpc2sgc3BhY2UgaXMgY2hlYXAgdGhlc2UgZGF5cy4KIAotW05PVEVdCi1Zb3UgY291bGQgZXZlbiBwdWxsIGZyb20geW91ciBvd24gcmVwb3NpdG9yeSBieQotZ2l2aW5nICcuJyBhcyA8cmVtb3RlLXJlcG9zaXRvcnk+IHBhcmFtZXRlciB0byBgZ2l0IHB1bGxgLiAgVGhpcwotaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gbWVyZ2UgYSBsb2NhbCBicmFuY2ggKG9yIG1vcmUsIGlmIHlvdQotYXJlIG1ha2luZyBhbiBPY3RvcHVzKSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4KLQogSXQgaXMgbGlrZWx5IHRoYXQgeW91IHdpbGwgYmUgcHVsbGluZyBmcm9tIHRoZSBzYW1lIHJlbW90ZQogcmVwb3NpdG9yeSBmcm9tIHRpbWUgdG8gdGltZS4gQXMgYSBzaG9ydCBoYW5kLCB5b3UgY2FuIHN0b3JlCi10aGUgcmVtb3RlIHJlcG9zaXRvcnkgVVJMIGluIGEgZmlsZSB1bmRlciAuZ2l0L3JlbW90ZXMvCi1kaXJlY3RvcnksIGxpa2UgdGhpczoKK3RoZSByZW1vdGUgcmVwb3NpdG9yeSBVUkwgaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkncyBjb25maWcgZmlsZQorbGlrZSB0aGlzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgbWtkaXIgLXAgLmdpdC9yZW1vdGVzLwotJCBjYXQgPi5naXQvcmVtb3Rlcy9saW51cyA8PFxFT0YKLVVSTDogaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvCi1FT0YKKyQgZ2l0IGNvbmZpZyByZW1vdGUubGludXMudXJsIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWFuZCB1c2UgdGhlIGZpbGVuYW1lIHRvIGBnaXQgcHVsbGAgaW5zdGVhZCBvZiB0aGUgZnVsbCBVUkwuCi1UaGUgVVJMIHNwZWNpZmllZCBpbiBzdWNoIGZpbGUgY2FuIGV2ZW4gYmUgYSBwcmVmaXgKLW9mIGEgZnVsbCBVUkwsIGxpa2UgdGhpczoKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGNhdCA+LmdpdC9yZW1vdGVzL2pnYXJ6aWsgPDxcRU9GCi1VUkw6IGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2dpdC9qZ2FyemlrLwotRU9GCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQorYW5kIHVzZSB0aGUgImxpbnVzIiBrZXl3b3JkIHdpdGggYGdpdCBwdWxsYCBpbnN0ZWFkIG9mIHRoZSBmdWxsIFVSTC4KIAogRXhhbXBsZXMuCiAKIC4gYGdpdCBwdWxsIGxpbnVzYAogLiBgZ2l0IHB1bGwgbGludXMgdGFnIHYwLjk5LjFgCi0uIGBnaXQgcHVsbCBqZ2FyemlrL25ldGRldi0yLjYuZ2l0LyBlMTAwYAogCiB0aGUgYWJvdmUgYXJlIGVxdWl2YWxlbnQgdG86CiAKIC4gYGdpdCBwdWxsIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LyBIRUFEYAogLiBgZ2l0IHB1bGwgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvIHRhZyB2MC45OS4xYAotLiBgZ2l0IHB1bGwgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi8uLi4vamdhcnppay9uZXRkZXYtMi42LmdpdCBlMTAwYAogCiAKIEhvdyBkb2VzIHRoZSBtZXJnZSB3b3JrPwpAQCAtMTU0Niw3ICsxNTIxLDggQEAKIAogMS4gUHJlcGFyZSB5b3VyIHdvcmsgcmVwb3NpdG9yeSwgYnkgYGdpdCBjbG9uZWAgdGhlIHB1YmxpYwogICAgcmVwb3NpdG9yeSBvZiB0aGUgInByb2plY3QgbGVhZCIuIFRoZSBVUkwgdXNlZCBmb3IgdGhlCi0gICBpbml0aWFsIGNsb25pbmcgaXMgc3RvcmVkIGluIGAuZ2l0L3JlbW90ZXMvb3JpZ2luYC4KKyAgIGluaXRpYWwgY2xvbmluZyBpcyBzdG9yZWQgaW4gdGhlIHJlbW90ZS5vcmlnaW4udXJsCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgogCiAyLiBQcmVwYXJlIGEgcHVibGljIHJlcG9zaXRvcnkgYWNjZXNzaWJsZSB0byBvdGhlcnMsIGp1c3QgbGlrZQogICAgdGhlICJwcm9qZWN0IGxlYWQiIHBlcnNvbiBkb2VzLgpAQCAtMTU4NiwxNCArMTU2MiwxNSBAQAogMS4gUHJlcGFyZSB5b3VyIHdvcmsgcmVwb3NpdG9yeSwgYnkgYGdpdCBjbG9uZWAgdGhlIHB1YmxpYwogICAgcmVwb3NpdG9yeSBvZiB0aGUgInByb2plY3QgbGVhZCIgKG9yIGEgInN1YnN5c3RlbQogICAgbWFpbnRhaW5lciIsIGlmIHlvdSB3b3JrIG9uIGEgc3Vic3lzdGVtKS4gVGhlIFVSTCB1c2VkIGZvcgotICAgdGhlIGluaXRpYWwgY2xvbmluZyBpcyBzdG9yZWQgaW4gYC5naXQvcmVtb3Rlcy9vcmlnaW5gLgorICAgdGhlIGluaXRpYWwgY2xvbmluZyBpcyBzdG9yZWQgaW4gdGhlIHJlbW90ZS5vcmlnaW4udXJsCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgogCiAyLiBEbyB5b3VyIHdvcmsgaW4geW91ciByZXBvc2l0b3J5IG9uICdtYXN0ZXInIGJyYW5jaC4KIAogMy4gUnVuIGBnaXQgZmV0Y2ggb3JpZ2luYCBmcm9tIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBvZiB5b3VyCiAgICB1cHN0cmVhbSBldmVyeSBvbmNlIGluIGEgd2hpbGUuIFRoaXMgZG9lcyBvbmx5IHRoZSBmaXJzdAogICAgaGFsZiBvZiBgZ2l0IHB1bGxgIGJ1dCBkb2VzIG5vdCBtZXJnZS4gVGhlIGhlYWQgb2YgdGhlCi0gICBwdWJsaWMgcmVwb3NpdG9yeSBpcyBzdG9yZWQgaW4gYC5naXQvcmVmcy9oZWFkcy9vcmlnaW5gLgorICAgcHVibGljIHJlcG9zaXRvcnkgaXMgc3RvcmVkIGluIGAuZ2l0L3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyYC4KIAogNC4gVXNlIGBnaXQgY2hlcnJ5IG9yaWdpbmAgdG8gc2VlIHdoaWNoIG9uZXMgb2YgeW91ciBwYXRjaGVzCiAgICB3ZXJlIGFjY2VwdGVkLCBhbmQvb3IgdXNlIGBnaXQgcmViYXNlIG9yaWdpbmAgdG8gcG9ydCB5b3VyCkBAIC0xNjgxLDExICsxNjU4LDExIEBACiAKIFlvdSBjYW4gbWFrZSBzdXJlICdnaXQgc2hvdy1icmFuY2gnIG1hdGNoZXMgdGhlIHN0YXRlIGJlZm9yZQogdGhvc2UgdHdvICdnaXQgbWVyZ2UnIHlvdSBqdXN0IGRpZC4gIFRoZW4sIGluc3RlYWQgb2YgcnVubmluZwotdHdvICdnaXQgbWVyZ2UnIGNvbW1hbmRzIGluIGEgcm93LCB5b3Ugd291bGQgcHVsbCB0aGVzZSB0d28KK3R3byAnZ2l0IG1lcmdlJyBjb21tYW5kcyBpbiBhIHJvdywgeW91IHdvdWxkIG1lcmdlIHRoZXNlIHR3bwogYnJhbmNoIGhlYWRzICh0aGlzIGlzIGtub3duIGFzICdtYWtpbmcgYW4gT2N0b3B1cycpOgogCiAtLS0tLS0tLS0tLS0KLSQgZ2l0IHB1bGwgLiBjb21taXQtZml4IGRpZmYtZml4CiskIGdpdCBtZXJnZSBjb21taXQtZml4IGRpZmYtZml4CiAkIGdpdCBzaG93LWJyYW5jaAogISBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCiAgISBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgpAQCAtMTcwMSw3ICsxNjc4LDcgQEAKIAogTm90ZSB0aGF0IHlvdSBzaG91bGQgbm90IGRvIE9jdG9wdXMgYmVjYXVzZSB5b3UgY2FuLiAgQW4gb2N0b3B1cwogaXMgYSB2YWxpZCB0aGluZyB0byBkbyBhbmQgb2Z0ZW4gbWFrZXMgaXQgZWFzaWVyIHRvIHZpZXcgdGhlCi1jb21taXQgaGlzdG9yeSBpZiB5b3UgYXJlIHB1bGxpbmcgbW9yZSB0aGFuIHR3byBpbmRlcGVuZGVudAorY29tbWl0IGhpc3RvcnkgaWYgeW91IGFyZSBtZXJnaW5nIG1vcmUgdGhhbiB0d28gaW5kZXBlbmRlbnQKIGNoYW5nZXMgYXQgdGhlIHNhbWUgdGltZS4gIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIG1lcmdlIGNvbmZsaWN0cwogd2l0aCBhbnkgb2YgdGhlIGJyYW5jaGVzIHlvdSBhcmUgbWVyZ2luZyBpbiBhbmQgbmVlZCB0byBoYW5kCiByZXNvbHZlLCB0aGF0IGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgZGV2ZWxvcG1lbnQgaGFwcGVuZWQgaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2N2cy1taWdyYXRpb24udHh0CmluZGV4IDc3NWJmNDIuLjc2NGNjNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jdnMtbWlncmF0aW9uLnR4dApAQCAtMzYsNyArMzYsNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFRoZSBgcHVsbGAgY29tbWFuZCBrbm93cyB3aGVyZSB0byBnZXQgdXBkYXRlcyBmcm9tIGJlY2F1c2Ugb2YgY2VydGFpbgogY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCB3ZXJlIHNldCBieSB0aGUgZmlyc3QgYGdpdCBjbG9uZWAKLWNvbW1hbmQ7IHNlZSBgZ2l0IHJlcG8tY29uZmlnIC1sYCBhbmQgdGhlIGdpdGxpbms6Z2l0LXJlcG8tY29uZmlnWzFdIG1hbgorY29tbWFuZDsgc2VlIGBnaXQgY29uZmlnIC1sYCBhbmQgdGhlIGdpdGxpbms6Z2l0LWNvbmZpZ1sxXSBtYW4KIHBhZ2UgZm9yIGRldGFpbHMuCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKaW5kZXggZGExY2M2MC4uMDE5YTM5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dApAQCAtNTgsNiArNTgsMTAgQEAKIAlUdXJuIG9mZiByZW5hbWUgZGV0ZWN0aW9uLCBldmVuIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24KIAlmaWxlIGdpdmVzIHRoZSBkZWZhdWx0IHRvIGRvIHNvLgogCistLWNoZWNrOjoKKwlXYXJuIGlmIGNoYW5nZXMgaW50cm9kdWNlIHRyYWlsaW5nIHdoaXRlc3BhY2UKKwlvciBhbiBpbmRlbnQgdGhhdCB1c2VzIGEgc3BhY2UgYmVmb3JlIGEgdGFiLgorCiAtLWZ1bGwtaW5kZXg6OgogCUluc3RlYWQgb2YgdGhlIGZpcnN0IGhhbmRmdWwgY2hhcmFjdGVycywgc2hvdyBmdWxsCiAJb2JqZWN0IG5hbWUgb2YgcHJlLSBhbmQgcG9zdC1pbWFnZSBibG9iIG9uIHRoZSAiaW5kZXgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2V2ZXJ5ZGF5LnR4dCBiL0RvY3VtZW50YXRpb24vZXZlcnlkYXkudHh0CmluZGV4IDRlODM5OTQuLjA4YzYxYjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZXZlcnlkYXkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZXZlcnlkYXkudHh0CkBAIC0yOCw3ICsyOCw3IEBACiAgICogZ2l0bGluazpnaXQtaW5pdFsxXSBvciBnaXRsaW5rOmdpdC1jbG9uZVsxXSB0byBjcmVhdGUgYQogICAgIG5ldyByZXBvc2l0b3J5LgogCi0gICogZ2l0bGluazpnaXQtZnNjay1vYmplY3RzWzFdIHRvIGNoZWNrIHRoZSByZXBvc2l0b3J5IGZvciBlcnJvcnMuCisgICogZ2l0bGluazpnaXQtZnNja1sxXSB0byBjaGVjayB0aGUgcmVwb3NpdG9yeSBmb3IgZXJyb3JzLgogCiAgICogZ2l0bGluazpnaXQtcHJ1bmVbMV0gdG8gcmVtb3ZlIHVudXNlZCBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LgogCkBAIC00Myw3ICs0Myw3IEBACiBDaGVjayBoZWFsdGggYW5kIHJlbW92ZSBjcnVmdC46OgogKwogLS0tLS0tLS0tLS0tCi0kIGdpdCBmc2NrLW9iamVjdHMgPDE+CiskIGdpdCBmc2NrIDwxPgogJCBnaXQgY291bnQtb2JqZWN0cyA8Mj4KICQgZ2l0IHJlcGFjayA8Mz4KICQgZ2l0IGdjIDw0PgpAQCAtMTQ4LDggKzE0OCw3IEBACiA8OD4gcmVkbyB0aGUgY29tbWl0IHVuZG9uZSBpbiB0aGUgcHJldmlvdXMgc3RlcCwgdXNpbmcgdGhlIG1lc3NhZ2UKIHlvdSBvcmlnaW5hbGx5IHdyb3RlLgogPDk+IHN3aXRjaCB0byB0aGUgbWFzdGVyIGJyYW5jaC4KLTwxMD4gbWVyZ2UgYSB0b3BpYyBicmFuY2ggaW50byB5b3VyIG1hc3RlciBicmFuY2guICBZb3UgY2FuIGFsc28gdXNlCi1gZ2l0IHB1bGwgLiBhbHNhLWF1ZGlvYCwgaS5lLiBwdWxsIGZyb20gdGhlIGxvY2FsIHJlcG9zaXRvcnkuCis8MTA+IG1lcmdlIGEgdG9waWMgYnJhbmNoIGludG8geW91ciBtYXN0ZXIgYnJhbmNoLgogPDExPiByZXZpZXcgY29tbWl0IGxvZ3M7IG90aGVyIGZvcm1zIHRvIGxpbWl0IG91dHB1dCBjYW4gYmUKIGNvbWJpbmVkIGFuZCBpbmNsdWRlIGBcLS1tYXgtY291bnQ9MTBgIChzaG93IDEwIGNvbW1pdHMpLAogYFwtLXVudGlsPTIwMDUtMTItMTBgLCBldGMuCkBAIC0yMTMsMTIgKzIxMiwxMiBAQAogLS0tLS0tLS0tLS0tCiBzYXRlbGxpdGUkIGdpdCBjbG9uZSBtb3RoZXJzaGlwOmZyb3R6IGZyb3R6IDwxPgogc2F0ZWxsaXRlJCBjZCBmcm90egotc2F0ZWxsaXRlJCBnaXQgcmVwby1jb25maWcgLS1nZXQtcmVnZXhwICdeKHJlbW90ZXxicmFuY2gpXC4nIDwyPgorc2F0ZWxsaXRlJCBnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAnXihyZW1vdGV8YnJhbmNoKVwuJyA8Mj4KIHJlbW90ZS5vcmlnaW4udXJsIG1vdGhlcnNoaXA6ZnJvdHoKIHJlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgogYnJhbmNoLm1hc3Rlci5yZW1vdGUgb3JpZ2luCiBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyCi1zYXRlbGxpdGUkIGdpdCByZXBvLWNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2ggXAorc2F0ZWxsaXRlJCBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4ucHVzaCBcCiAgICAgICAgICAgIG1hc3RlcjpyZWZzL3JlbW90ZXMvc2F0ZWxsaXRlL21hc3RlciA8Mz4KIHNhdGVsbGl0ZSQgZWRpdC9jb21waWxlL3Rlc3QvY29tbWl0CiBzYXRlbGxpdGUkIGdpdCBwdXNoIG9yaWdpbiA8ND4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CmluZGV4IDk1YmVhNjYuLmI3M2E5OWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dApAQCAtNyw3ICs3LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWFkZCcgWy1uXSBbLXZdIFstZl0gWy0taW50ZXJhY3RpdmVdIFstLV0gPGZpbGU+Li4uCisnZ2l0LWFkZCcgWy1uXSBbLXZdIFstZl0gWy0taW50ZXJhY3RpdmUgfCAtaV0gWy0tXSA8ZmlsZT4uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC01Miw3ICs1Miw3IEBACiAtZjo6CiAJQWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzLgogCi1cLS1pbnRlcmFjdGl2ZTo6CitcaSwgXC0taW50ZXJhY3RpdmU6OgogCUFkZCBtb2RpZmllZCBjb250ZW50cyBpbiB0aGUgd29ya2luZyB0cmVlIGludGVyYWN0aXZlbHkgdG8KIAl0aGUgaW5kZXguCiAKQEAgLTgzLDcgKzgzLDcgQEAKIEludGVyYWN0aXZlIG1vZGUKIC0tLS0tLS0tLS0tLS0tLS0KIFdoZW4gdGhlIGNvbW1hbmQgZW50ZXJzIHRoZSBpbnRlcmFjdGl2ZSBtb2RlLCBpdCBzaG93cyB0aGUKLW91dHB1dCBvZiB0aGUgJ3N0YXR1cycgc3ViY29tbWFuZCwgYW5kIHRoZW4gZ29lcyBpbnRvIGludHMKK291dHB1dCBvZiB0aGUgJ3N0YXR1cycgc3ViY29tbWFuZCwgYW5kIHRoZW4gZ29lcyBpbnRvIGl0cwogaW50ZXJhY3RpdmUgY29tbWFuZCBsb29wLgogCiBUaGUgY29tbWFuZCBsb29wIHNob3dzIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzIGF2YWlsYWJsZSwgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKaW5kZXggNTNlODFjYi4uYWE0Y2UxZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWFtIC0gQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBpbiBhIG1haWxib3gKK2dpdC1hbSAtIEFwcGx5IGEgc2VyaWVzIG9mIHBhdGNoZXMgZnJvbSBhIG1haWxib3gKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CmluZGV4IDMzYjkzZGIuLjA2NWJhMWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1hcHBseSAtIEFwcGx5IHBhdGNoIG9uIGEgZ2l0IGluZGV4IGZpbGUgYW5kIGEgd29yayB0cmVlCitnaXQtYXBwbHkgLSBBcHBseSBhIHBhdGNoIG9uIGEgZ2l0IGluZGV4IGZpbGUgYW5kIGEgd29ya2luZyB0cmVlCiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5cGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHlwYXRjaC50eHQKaW5kZXggMmIxZmYxNC4uNDUxNDM0YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHlwYXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHlwYXRjaC50eHQKQEAgLTEyLDYgKzEyLDkgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCitUaGlzIGlzIHVzdWFsbHkgbm90IHdoYXQgYW4gZW5kIHVzZXIgd2FudHMgdG8gcnVuIGRpcmVjdGx5LiAgU2VlCitnaXRsaW5rOmdpdC1hbVsxXSBpbnN0ZWFkLgorCiBUYWtlcyB0aHJlZSBmaWxlcyA8bXNnPiwgPHBhdGNoPiwgYW5kIDxpbmZvPiBwcmVwYXJlZCBmcm9tIGFuCiBlLW1haWwgbWVzc2FnZSBieSAnZ2l0LW1haWxpbmZvJywgYW5kIGNyZWF0ZXMgYSBjb21taXQuICBJdCBpcwogdXN1YWxseSBub3QgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzIGNvbW1hbmQgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0CmluZGV4IDAzMWZjZDUuLjQ5MzQ3NGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtYXJjaGl2ZSAtIENyZWF0ZXMgYSBhcmNoaXZlIG9mIHRoZSBmaWxlcyBpbiB0aGUgbmFtZWQgdHJlZQorZ2l0LWFyY2hpdmUgLSBDcmVhdGVzIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKaW5kZXggYWM0YjQ5Ni4uMTZlYzcyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtYmlzZWN0IC0gRmluZCB0aGUgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1ZworZ2l0LWJpc2VjdCAtIEZpbmQgdGhlIGNoYW5nZSB0aGF0IGludHJvZHVjZWQgYSBidWcgYnkgYmluYXJ5IHNlYXJjaAogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKaW5kZXggYmRmYzY2Ni4uMGVlODg3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dApAQCAtOCw3ICs4LDcgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdC1ibGFtZScgWy1jXSBbLWxdIFstdF0gWy1mXSBbLW5dIFstcF0gWy1MIG4sbV0gWy1TIDxyZXZzLWZpbGU+XQorJ2dpdC1ibGFtZScgWy1jXSBbLWxdIFstdF0gWy1mXSBbLW5dIFstcF0gWy0taW5jcmVtZW50YWxdIFstTCBuLG1dIFstUyA8cmV2cy1maWxlPl0KICAgICAgICAgICAgIFstTV0gWy1DXSBbLUNdIFstLXNpbmNlPTxkYXRlPl0gWzxyZXY+XSBbLS1dIDxmaWxlPgogCiBERVNDUklQVElPTgpAQCAtMjQsNyArMjQsNyBAQAogaW50ZXJmYWNlIGJyaWVmbHkgbWVudGlvbmVkIGluIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBoLgogCiBBcGFydCBmcm9tIHN1cHBvcnRpbmcgZmlsZSBhbm5vdGF0aW9uLCBnaXQgYWxzbyBzdXBwb3J0cyBzZWFyY2hpbmcgdGhlCi1kZXZlbG9wbWVudCBoaXN0b3J5IGZvciB3aGVuIGEgY29kZSBzbmlwcGV0IG9jY3VyZWQgaW4gYSBjaGFuZ2UuIFRoaXMgbWFrZXMgaXQKK2RldmVsb3BtZW50IGhpc3RvcnkgZm9yIHdoZW4gYSBjb2RlIHNuaXBwZXQgb2NjdXJyZWQgaW4gYSBjaGFuZ2UuIFRoaXMgbWFrZXMgaXQKIHBvc3NpYmxlIHRvIHRyYWNrIHdoZW4gYSBjb2RlIHNuaXBwZXQgd2FzIGFkZGVkIHRvIGEgZmlsZSwgbW92ZWQgb3IgY29waWVkCiBiZXR3ZWVuIGZpbGVzLCBhbmQgZXZlbnR1YWxseSBkZWxldGVkIG9yIHJlcGxhY2VkLiBJdCB3b3JrcyBieSBzZWFyY2hpbmcgZm9yCiBhIHRleHQgc3RyaW5nIGluIHRoZSBkaWZmLiBBIHNtYWxsIGV4YW1wbGU6CkBAIC02Myw2ICs2MywxMCBAQAogLXAsIC0tcG9yY2VsYWluOjoKIAlTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uLgogCistLWluY3JlbWVudGFsOjoKKwlTaG93IHRoZSByZXN1bHQgaW5jcmVtZW50YWxseSBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IKKwltYWNoaW5lIGNvbnN1bXB0aW9uLgorCiAtTTo6CiAJRGV0ZWN0IG1vdmluZyBsaW5lcyBpbiB0aGUgZmlsZSBhcyB3ZWxsLiAgV2hlbiBhIGNvbW1pdAogCW1vdmVzIGEgYmxvY2sgb2YgbGluZXMgaW4gYSBmaWxlIChlLmcuIHRoZSBvcmlnaW5hbCBmaWxlCkBAIC04OSw3ICs5Myw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJbiB0aGlzIGZvcm1hdCwgZWFjaCBsaW5lIGlzIG91dHB1dCBhZnRlciBhIGhlYWRlcjsgdGhlCi1oZWFkZXIgYXQgdGhlIG1pbnVtdW0gaGFzIHRoZSBmaXJzdCBsaW5lIHdoaWNoIGhhczoKK2hlYWRlciBhdCB0aGUgbWluaW11bSBoYXMgdGhlIGZpcnN0IGxpbmUgd2hpY2ggaGFzOgogCiAtIDQwLWJ5dGUgU0hBLTEgb2YgdGhlIGNvbW1pdCB0aGUgbGluZSBpcyBhdHRyaWJ1dGVkIHRvOwogLSB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxpbmUgaW4gdGhlIG9yaWdpbmFsIGZpbGU7CkBAIC0xMTIsMTUgKzExNiwxOCBAQAogaGVhZGVyIGVsZW1lbnRzIGxhdGVyLgogCiAKLVNQRUNJRklZSU5HIFJBTkdFUwotLS0tLS0tLS0tLS0tLS0tLS0tCitTUEVDSUZZSU5HIFJBTkdFUworLS0tLS0tLS0tLS0tLS0tLS0KIAogVW5saWtlIGBnaXQtYmxhbWVgIGFuZCBgZ2l0LWFubm90YXRlYCBpbiBvbGRlciBnaXQsIHRoZSBleHRlbnQKIG9mIGFubm90YXRpb24gY2FuIGJlIGxpbWl0ZWQgdG8gYm90aCBsaW5lIHJhbmdlcyBhbmQgcmV2aXNpb24KIHJhbmdlcy4gIFdoZW4geW91IGFyZSBpbnRlcmVzdGVkIGluIGZpbmRpbmcgdGhlIG9yaWdpbiBmb3IKLWxsLiA0MC02MCBmb3IgZmlsZSBgZm9vYCwgeW91IGNhbiB1c2UgYC1MYCBvcHRpb24gbGlrZSB0aGlzOgorbGwuIDQwLTYwIGZvciBmaWxlIGBmb29gLCB5b3UgY2FuIHVzZSBgLUxgIG9wdGlvbiBsaWtlIHRoZXNlCisodGhleSBtZWFuIHRoZSBzYW1lIHRoaW5nIC0tIGJvdGggYXNrIGZvciAyMSBsaW5lcyBzdGFydGluZyBhdAorbGluZSA0MCk6CiAKIAlnaXQgYmxhbWUgLUwgNDAsNjAgZm9vCisJZ2l0IGJsYW1lIC1MIDQwLCsyMSBmb28KIAogQWxzbyB5b3UgY2FuIHVzZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3BlY2lmeSB0aGUgbGluZSByYW5nZS4KIApAQCAtMTU1LDYgKzE2Miw0NyBAQAogCWdpdCBibGFtZSAtQyAtQyAtZiAkY29tbWl0XiEgLS0gZm9vCiAKIAorSU5DUkVNRU5UQUwgT1VUUFVUCistLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBjYWxsZWQgd2l0aCBgLS1pbmNyZW1lbnRhbGAgb3B0aW9uLCB0aGUgY29tbWFuZCBvdXRwdXRzIHRoZQorcmVzdWx0IGFzIGl0IGlzIGJ1aWx0LiAgVGhlIG91dHB1dCBnZW5lcmFsbHkgd2lsbCB0YWxrIGFib3V0CitsaW5lcyB0b3VjaGVkIGJ5IG1vcmUgcmVjZW50IGNvbW1pdHMgZmlyc3QgKGkuZS4gdGhlIGxpbmVzIHdpbGwKK2JlIGFubm90YXRlZCBvdXQgb2Ygb3JkZXIpIGFuZCBpcyBtZWFudCB0byBiZSB1c2VkIGJ5CitpbnRlcmFjdGl2ZSB2aWV3ZXJzLgorCitUaGUgb3V0cHV0IGZvcm1hdCBpcyBzaW1pbGFyIHRvIHRoZSBQb3JjZWxhaW4gZm9ybWF0LCBidXQgaXQKK2RvZXMgbm90IGNvbnRhaW4gdGhlIGFjdHVhbCBsaW5lcyBmcm9tIHRoZSBmaWxlIHRoYXQgaXMgYmVpbmcKK2Fubm90YXRlZC4KKworLiBFYWNoIGJsYW1lIGVudHJ5IGFsd2F5cyBzdGFydHMgd2l0aCBhIGxpbmUgb2Y6CisKKwk8NDAtYnl0ZSBoZXggc2hhMT4gPHNvdXJjZWxpbmU+IDxyZXN1bHRsaW5lPiA8bnVtX2xpbmVzPgorKworTGluZSBudW1iZXJzIGNvdW50IGZyb20gMS4KKworLiBUaGUgZmlyc3QgdGltZSB0aGF0IGNvbW1pdCBzaG93cyB1cCBpbiB0aGUgc3RyZWFtLCBpdCBoYXMgdmFyaW91cworICBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBpdCBwcmludGVkIG91dCB3aXRoIGEgb25lLXdvcmQgdGFnIGF0IHRoZQorICBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIGFib3V0IHRoYXQgImV4dGVuZGVkIGNvbW1pdCBpbmZvIiAoYXV0aG9yLAorICBlbWFpbCwgY29tbWl0dGVyLCBkYXRlcywgc3VtbWFyeSBldGMpLgorCisuIFVubGlrZSBQb3JjZWxhaW4gZm9ybWF0LCB0aGUgZmlsZW5hbWUgaW5mb3JtYXRpb24gaXMgYWx3YXlzCisgIGdpdmVuIGFuZCB0ZXJtaW5hdGVzIHRoZSBlbnRyeToKKworCSJmaWxlbmFtZSIgPHdoaXRlc3BhY2UtcXVvdGVkLWZpbGVuYW1lLWdvZXMtaGVyZT4KKysKK2FuZCB0aHVzIGl0J3MgcmVhbGx5IHF1aXRlIGVhc3kgdG8gcGFyc2UgZm9yIHNvbWUgbGluZS0gYW5kIHdvcmQtb3JpZW50ZWQKK3BhcnNlciAod2hpY2ggc2hvdWxkIGJlIHF1aXRlIG5hdHVyYWwgZm9yIG1vc3Qgc2NyaXB0aW5nIGxhbmd1YWdlcykuCisrCitbTk9URV0KK0ZvciBwZW9wbGUgd2hvIGRvIHBhcnNpbmc6IHRvIG1ha2UgaXQgbW9yZSByb2J1c3QsIGp1c3QgaWdub3JlIGFueQorbGluZXMgaW4gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIGxhc3Qgb25lICgiPHNoYTE+IiBhbmQgImZpbGVuYW1lIiBsaW5lcykKK3doZXJlIHlvdSBkb24ndCByZWNvZ25pemUgdGhlIHRhZy13b3JkcyAob3IgY2FyZSBhYm91dCB0aGF0IHBhcnRpY3VsYXIKK29uZSkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgImV4dGVuZGVkIGluZm9ybWF0aW9uIiBsaW5lcy4gVGhhdCB3YXksIGlmCit0aGVyZSBpcyBldmVyIGFkZGVkIGluZm9ybWF0aW9uIChsaWtlIHRoZSBjb21taXQgZW5jb2Rpbmcgb3IgZXh0ZW5kZWQKK2NvbW1pdCBjb21tZW50YXJ5KSwgYSBibGFtZSB2aWV3ZXIgd29uJ3QgZXZlciBjYXJlLgorCisKIFNFRSBBTFNPCiAtLS0tLS0tLQogZ2l0bGluazpnaXQtYW5ub3RhdGVbMV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CmluZGV4IGU4NzJmYzguLmFhMWZkZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWJyYW5jaCAtIExpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzLgorZ2l0LWJyYW5jaCAtIExpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQpAQCAtNzQsNyArNzQsNyBAQAogCUxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYW5kIGxvY2FsIGJyYW5jaGVzLgogCiAtdjo6Ci0JU2hvdyBzaGExIGFuZCBjb21taXQgc3ViamVjdGxpbmUgZm9yIGVhY2ggaGVhZC4KKwlTaG93IHNoYTEgYW5kIGNvbW1pdCBzdWJqZWN0IGxpbmUgZm9yIGVhY2ggaGVhZC4KIAogLS1hYmJyZXY9PGxlbmd0aD46OgogCUFsdGVyIG1pbmltdW0gZGlzcGxheSBsZW5ndGggZm9yIHNoYTEgaW4gb3V0cHV0IGxpc3RpbmcsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKaW5kZXggNWU5Y2JmOC4uMDc1YzBkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWNhdC1maWxlIC0gUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cworZ2l0LWNhdC1maWxlIC0gUHJvdmlkZSBjb250ZW50IG9yIHR5cGUvc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVwb3NpdG9yeSBvYmplY3RzCiAKIAogU1lOT1BTSVMKQEAgLTE5LDcgKzE5LDkgQEAKIE9QVElPTlMKIC0tLS0tLS0KIDxvYmplY3Q+OjoKLQlUaGUgc2hhMSBpZGVudGlmaWVyIG9mIHRoZSBvYmplY3QuCisJVGhlIG5hbWUgb2YgdGhlIG9iamVjdCB0byBzaG93LgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIG9iamVjdCBuYW1lcywgc2VlCisJIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluIGdpdGxpbms6Z2l0LXJldi1wYXJzZVsxXS4KIAogLXQ6OgogCUluc3RlYWQgb2YgdGhlIGNvbnRlbnQsIHNob3cgdGhlIG9iamVjdCB0eXBlIGlkZW50aWZpZWQgYnkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dAppbmRleCA3NjVjMTczLi42ZGQ2ZGIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtY2hlY2tvdXQtaW5kZXggLSBDb3B5IGZpbGVzIGZyb20gdGhlIGluZGV4IHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorZ2l0LWNoZWNrb3V0LWluZGV4IC0gQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlCiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dAppbmRleCBmYmRiYWRjLi40ZWEyYjMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CkBAIC05LDcgKzksNyBAQAogLS0tLS0tLS0KIFt2ZXJzZV0KICdnaXQtY2hlY2tvdXQnIFstZl0gWy1iIDxuZXdfYnJhbmNoPiBbLWxdXSBbLW1dIFs8YnJhbmNoPl0KLSdnaXQtY2hlY2tvdXQnIFstbV0gWzxicmFuY2g+XSA8cGF0aHM+Li4uCisnZ2l0LWNoZWNrb3V0JyBbPHRyZWUtaXNoPl0gPHBhdGhzPi4uLgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTIyLDExICsyMiwxMyBAQAogCiBXaGVuIDxwYXRocz4gYXJlIGdpdmVuLCB0aGlzIGNvbW1hbmQgZG9lcyAqbm90KiBzd2l0Y2gKIGJyYW5jaGVzLiAgSXQgdXBkYXRlcyB0aGUgbmFtZWQgcGF0aHMgaW4gdGhlIHdvcmtpbmcgdHJlZSBmcm9tCi10aGUgaW5kZXggZmlsZSAoaS5lLiBpdCBydW5zIGBnaXQtY2hlY2tvdXQtaW5kZXggLWYgLXVgKS4gIEluCit0aGUgaW5kZXggZmlsZSAoaS5lLiBpdCBydW5zIGBnaXQtY2hlY2tvdXQtaW5kZXggLWYgLXVgKSwgb3IgYQorbmFtZWQgY29tbWl0LiAgSW4KIHRoaXMgY2FzZSwgYC1mYCBhbmQgYC1iYCBvcHRpb25zIGFyZSBtZWFuaW5nbGVzcyBhbmQgZ2l2aW5nCi1laXRoZXIgb2YgdGhlbSByZXN1bHRzIGluIGFuIGVycm9yLiAgPGJyYW5jaD4gYXJndW1lbnQgY2FuIGJlCi11c2VkIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyB0cmVlLWlzaCB0byB1cGRhdGUgdGhlIGluZGV4IGZvciB0aGUKLWdpdmVuIHBhdGhzIGJlZm9yZSB1cGRhdGluZyB0aGUgd29ya2luZyB0cmVlLgorZWl0aGVyIG9mIHRoZW0gcmVzdWx0cyBpbiBhbiBlcnJvci4gIDx0cmVlLWlzaD4gYXJndW1lbnQgY2FuIGJlCit1c2VkIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyB0cmVlLWlzaCAoaS5lLiBjb21taXQsIHRhZyBvciB0cmVlKQordG8gdXBkYXRlIHRoZSBpbmRleCBmb3IgdGhlIGdpdmVuIHBhdGhzIGJlZm9yZSB1cGRhdGluZyB0aGUKK3dvcmtpbmcgdHJlZS4KIAogCiBPUFRJT05TCkBAIC02Myw3ICs2NSw1NyBAQAogCiA8YnJhbmNoPjo6CiAJQnJhbmNoIHRvIGNoZWNrb3V0OyBtYXkgYmUgYW55IG9iamVjdCBJRCB0aGF0IHJlc29sdmVzIHRvIGEKLQljb21taXQuIERlZmF1bHRzIHRvIEhFQUQuCisJY29tbWl0LiAgRGVmYXVsdHMgdG8gSEVBRC4KKysKK1doZW4gdGhpcyBwYXJhbWV0ZXIgbmFtZXMgYSBub24tYnJhbmNoIChidXQgc3RpbGwgYSB2YWxpZCBjb21taXQgb2JqZWN0KSwKK3lvdXIgSEVBRCBiZWNvbWVzICdkZXRhY2hlZCcuCisKKworRGV0YWNoZWQgSEVBRAorLS0tLS0tLS0tLS0tLQorCitJdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gJ2NoZWNrb3V0JyBhIGNvbW1pdCB0aGF0IGlzCitub3QgYXQgdGhlIHRpcCBvZiBvbmUgb2YgeW91ciBicmFuY2hlcy4gIFRoZSBtb3N0IG9idmlvdXMKK2V4YW1wbGUgaXMgdG8gY2hlY2sgb3V0IHRoZSBjb21taXQgYXQgYSB0YWdnZWQgb2ZmaWNpYWwgcmVsZWFzZQorcG9pbnQsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCB2Mi42LjE4CistLS0tLS0tLS0tLS0KKworRWFybGllciB2ZXJzaW9ucyBvZiBnaXQgZGlkIG5vdCBhbGxvdyB0aGlzIGFuZCBhc2tlZCB5b3UgdG8KK2NyZWF0ZSBhIHRlbXBvcmFyeSBicmFuY2ggdXNpbmcgYC1iYCBvcHRpb24sIGJ1dCBzdGFydGluZyBmcm9tCit2ZXJzaW9uIDEuNS4wLCB0aGUgYWJvdmUgY29tbWFuZCAnZGV0YWNoZXMnIHlvdXIgSEVBRCBmcm9tIHRoZQorY3VycmVudCBicmFuY2ggYW5kIGRpcmVjdGx5IHBvaW50IGF0IHRoZSBjb21taXQgbmFtZWQgYnkgdGhlIHRhZworKGB2Mi42LjE4YCBpbiB0aGUgYWJvdmUgZXhhbXBsZSkuCisKK1lvdSBjYW4gdXNlIHVzdWFsIGdpdCBjb21tYW5kcyB3aGlsZSBpbiB0aGlzIHN0YXRlLiAgWW91IGNhbiB1c2UKK2BnaXQtcmVzZXQgLS1oYXJkICRvdGhlcmNvbW1pdGAgdG8gZnVydGhlciBtb3ZlIGFyb3VuZCwgZm9yCitleGFtcGxlLiAgWW91IGNhbiBtYWtlIGNoYW5nZXMgYW5kIGNyZWF0ZSBhIG5ldyBjb21taXQgb24gdG9wIG9mCithIGRldGFjaGVkIEhFQUQuICBZb3UgY2FuIGV2ZW4gY3JlYXRlIGEgbWVyZ2UgYnkgdXNpbmcgYGdpdAorbWVyZ2UgJG90aGVyY29tbWl0YC4KKworVGhlIHN0YXRlIHlvdSBhcmUgaW4gd2hpbGUgeW91ciBIRUFEIGlzIGRldGFjaGVkIGlzIG5vdCByZWNvcmRlZAorYnkgYW55IGJyYW5jaCAod2hpY2ggaXMgbmF0dXJhbCAtLS0geW91IGFyZSBub3Qgb24gYW55IGJyYW5jaCkuCitXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB5b3UgY2FuIGRpc2NhcmQgeW91ciB0ZW1wb3JhcnkgY29tbWl0cworYW5kIG1lcmdlcyBieSBzd2l0Y2hpbmcgYmFjayB0byBhbiBleGlzdGluZyBicmFuY2ggKGUuZy4gYGdpdAorY2hlY2tvdXQgbWFzdGVyYCksIGFuZCBhIGxhdGVyIGBnaXQgcHJ1bmVgIG9yIGBnaXQgZ2NgIHdvdWxkCitnYXJiYWdlLWNvbGxlY3QgdGhlbS4KKworVGhlIGNvbW1hbmQgd291bGQgcmVmdXNlIHRvIHN3aXRjaCBiYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBkbworbm90IGRpc2NhcmQgeW91ciB0ZW1wb3Jhcnkgc3RhdGUgYnkgbWlzdGFrZSB3aGVuIHlvdXIgZGV0YWNoZWQKK0hFQUQgaXMgbm90IHBvaW50ZWQgYXQgYnkgYW55IGV4aXN0aW5nIHJlZi4gIElmIHlvdSBkaWQgd2FudCB0bworc2F2ZSB5b3VyIHN0YXRlIChlLmcuICJJIHdhcyBpbnRlcmVzdGVkIGluIHRoZSBmaWZ0aCBjb21taXQgZnJvbQordGhlIHRvcCBvZiAnbWFzdGVyJyBicmFuY2giLCBvciAiSSBtYWRlIHR3byBjb21taXRzIHRvIGZpeCBtaW5vcgorYnVncyB3aGlsZSBvbiBhIGRldGFjaGVkIEhFQUQiIC0tIGFuZCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gbG9zZQordGhlc2UgZmFjdHMpLCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBicmFuY2ggYW5kIHN3aXRjaCB0byBpdCB3aXRoCitgZ2l0IGNoZWNrb3V0IC1iIG5ld2JyYW5jaGAgc28gdGhhdCB5b3UgY2FuIGtlZXAgYnVpbGRpbmcgb24KK3RoYXQgc3RhdGUsIG9yIHRhZyBpdCBmaXJzdCBzbyB0aGF0IHlvdSBjYW4gY29tZSBiYWNrIHRvIGl0CitsYXRlciBhbmQgc3dpdGNoIHRvIHRoZSBicmFuY2ggeW91IHdhbnRlZCB0byBzd2l0Y2ggdG8gd2l0aCBgZ2l0Cit0YWcgdGhhdF9zdGF0ZTsgZ2l0IGNoZWNrb3V0IG1hc3RlcmAuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91CitkaWQgd2FudCB0byBkaXNjYXJkIHRoZSB0ZW1wb3Jhcnkgc3RhdGUsIHlvdSBjYW4gZ2l2ZSBgLWZgCitvcHRpb24gKGUuZy4gYGdpdCBjaGVja291dCAtZiBtYXN0ZXJgKSB0byBvdmVycmlkZSB0aGlzCitiZWhhdmlvdXIuCiAKIAogRVhBTVBMRVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dAppbmRleCA4NzVlZGI2Li4zMTQ5ZDA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0CkBAIC0xOSw2ICsxOSw4IEBACiAtLS0tLS0tCiA8Y29tbWl0Pjo6CiAJQ29tbWl0IHRvIGNoZXJyeS1waWNrLgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIGNvbW1pdHMsIHNlZQorCSJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBpbiBnaXRsaW5rOmdpdC1yZXYtcGFyc2VbMV0uCiAKIC1lfC0tZWRpdDo6CiAJV2l0aCB0aGlzIG9wdGlvbiwgYGdpdC1jaGVycnktcGlja2Agd2lsbCBsZXQgeW91IGVkaXQgdGhlIGNvbW1pdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CmluZGV4IGE3ODIwNzQuLjcwNzM3NmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1jbG9uZSAtIENsb25lcyBhIHJlcG9zaXRvcnkKK2dpdC1jbG9uZSAtIENsb25lcyBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0CmluZGV4IDc3YmE5NmUuLmNmMjU1MDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1jb21taXQtdHJlZSAtIENyZWF0ZXMgYSBuZXcgY29tbWl0IG9iamVjdAorZ2l0LWNvbW1pdC10cmVlIC0gQ3JlYXRlIGEgbmV3IGNvbW1pdCBvYmplY3QKIAogCiBTWU5PUFNJUwpAQCAtMTIsNiArMTIsOSBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KK1RoaXMgaXMgdXN1YWxseSBub3Qgd2hhdCBhbiBlbmQgdXNlciB3YW50cyB0byBydW4gZGlyZWN0bHkuICBTZWUKK2dpdGxpbms6Z2l0LWNvbW1pdFsxXSBpbnN0ZWFkLgorCiBDcmVhdGVzIGEgbmV3IGNvbW1pdCBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRyZWUgb2JqZWN0IGFuZAogZW1pdHMgdGhlIG5ldyBjb21taXQgb2JqZWN0IGlkIG9uIHN0ZG91dC4gSWYgbm8gcGFyZW50IGlzIGdpdmVuIHRoZW4KIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gaW5pdGlhbCB0cmVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKaW5kZXggYjQ1MjhkNy4uMjE4N2VlZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CkBAIC0zLDEzICszLDEzIEBACiAKIE5BTUUKIC0tLS0KLWdpdC1jb21taXQgLSBSZWNvcmQgeW91ciBjaGFuZ2VzCitnaXQtY29tbWl0IC0gUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkKIAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0LWNvbW1pdCcgWy1hXSBbLXNdIFstdl0gWygtYyB8IC1DKSA8Y29tbWl0PiB8IC1GIDxmaWxlPiB8IC1tIDxtc2c+XQotCSAgIFstLW5vLXZlcmlmeV0gWy0tYW1lbmRdIFstZV0gWy0tYXV0aG9yIDxhdXRob3I+XQorJ2dpdC1jb21taXQnIFstYV0gWy1zXSBbLXZdIFsoLWMgfCAtQykgPGNvbW1pdD4gfCAtRiA8ZmlsZT4gfCAtbSA8bXNnPiB8CisJICAgIC0tYW1lbmRdIFstLW5vLXZlcmlmeV0gWy1lXSBbLS1hdXRob3IgPGF1dGhvcj5dCiAJICAgWy0tXSBbWy1pIHwgLW8gXTxmaWxlPi4uLl0KIAogREVTQ1JJUFRJT04KQEAgLTExMSw3ICsxMTEsNyBAQAogCWFyZSBjb25jbHVkaW5nIGEgY29uZmxpY3RlZCBtZXJnZS4KIAogLXF8LS1xdWlldDo6Ci0JU3VwcmVzcyBjb21taXQgc3VtbWFyeSBtZXNzYWdlLgorCVN1cHByZXNzIGNvbW1pdCBzdW1tYXJ5IG1lc3NhZ2UuCiAKIFwtLTo6CiAJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KQEAgLTE0MiwxMSArMTQyLDYgQEAKICQgZ2l0IGNvbW1pdAogLS0tLS0tLS0tLS0tCiAKLS8vLy8vLy8vLy8vLwotV2Ugc2hvdWxkIGZpeCAnZ2l0IHJtJyB0byByZW1vdmUgZ29vZGJ5ZS5jIGZyb20gYm90aCBpbmRleCBhbmQKLXdvcmtpbmcgdHJlZSBmb3IgdGhlIGFib3ZlIGV4YW1wbGUuCi0vLy8vLy8vLy8vLy8KLQogSW5zdGVhZCBvZiBzdGFnaW5nIGZpbGVzIGFmdGVyIGVhY2ggaW5kaXZpZHVhbCBjaGFuZ2UsIHlvdSBjYW4KIHRlbGwgYGdpdCBjb21taXRgIHRvIG5vdGljZSB0aGUgY2hhbmdlcyB0byB0aGUgZmlsZXMgd2hvc2UKIGNvbnRlbnRzIGFyZSB0cmFja2VkIGluCkBAIC0yMjMsNiArMjE4LDEyIEBACiBESVNDVVNTSU9OCiAtLS0tLS0tLS0tCiAKK1Rob3VnaCBub3QgcmVxdWlyZWQsIGl0J3MgYSBnb29kIGlkZWEgdG8gYmVnaW4gdGhlIGNvbW1pdCBtZXNzYWdlCit3aXRoIGEgc2luZ2xlIHNob3J0IChsZXNzIHRoYW4gNTAgY2hhcmFjdGVyKSBsaW5lIHN1bW1hcml6aW5nIHRoZQorY2hhbmdlLCBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUgYW5kIHRoZW4gYSBtb3JlIHRob3JvdWdoIGRlc2NyaXB0aW9uLgorVG9vbHMgdGhhdCB0dXJuIGNvbW1pdHMgaW50byBlbWFpbCwgZm9yIGV4YW1wbGUsIHVzZSB0aGUgZmlyc3QgbGluZQorb24gdGhlIFN1YmplY3Q6IGxpbmUgYW5kIHRoZSByZXN0IG9mIHRoZSBjb21taXQgaW4gdGhlIGJvZHkuCisKIGluY2x1ZGU6OmkxOG4udHh0W10KIAogRU5WSVJPTk1FTlQgVkFSSUFCTEVTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI0NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dApAQCAtMCwwICsxLDIyNyBAQAorZ2l0LWNvbmZpZygxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29uZmlnIC0gR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC1jb25maWcnIFstLWdsb2JhbF0gW3R5cGVdIG5hbWUgW3ZhbHVlIFt2YWx1ZV9yZWdleF1dCisnZ2l0LWNvbmZpZycgWy0tZ2xvYmFsXSBbdHlwZV0gLS1hZGQgbmFtZSB2YWx1ZQorJ2dpdC1jb25maWcnIFstLWdsb2JhbF0gW3R5cGVdIC0tcmVwbGFjZS1hbGwgbmFtZSBbdmFsdWUgW3ZhbHVlX3JlZ2V4XV0KKydnaXQtY29uZmlnJyBbLS1nbG9iYWxdIFt0eXBlXSAtLWdldCBuYW1lIFt2YWx1ZV9yZWdleF0KKydnaXQtY29uZmlnJyBbLS1nbG9iYWxdIFt0eXBlXSAtLWdldC1hbGwgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0LWNvbmZpZycgWy0tZ2xvYmFsXSBbdHlwZV0gLS11bnNldCBuYW1lIFt2YWx1ZV9yZWdleF0KKydnaXQtY29uZmlnJyBbLS1nbG9iYWxdIFt0eXBlXSAtLXVuc2V0LWFsbCBuYW1lIFt2YWx1ZV9yZWdleF0KKydnaXQtY29uZmlnJyBbLS1nbG9iYWxdIC1sIHwgLS1saXN0CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorWW91IGNhbiBxdWVyeS9zZXQvcmVwbGFjZS91bnNldCBvcHRpb25zIHdpdGggdGhpcyBjb21tYW5kLiBUaGUgbmFtZSBpcworYWN0dWFsbHkgdGhlIHNlY3Rpb24gYW5kIHRoZSBrZXkgc2VwYXJhdGVkIGJ5IGEgZG90LCBhbmQgdGhlIHZhbHVlIHdpbGwgYmUKK2VzY2FwZWQuCisKK011bHRpcGxlIGxpbmVzIGNhbiBiZSBhZGRlZCB0byBhbiBvcHRpb24gYnkgdXNpbmcgdGhlICctLWFkZCcgb3B0aW9uLgorSWYgeW91IHdhbnQgdG8gdXBkYXRlIG9yIHVuc2V0IGFuIG9wdGlvbiB3aGljaCBjYW4gb2NjdXIgb24gbXVsdGlwbGUKK2xpbmVzLCBhIFBPU0lYIHJlZ2V4cCBgdmFsdWVfcmVnZXhgIG5lZWRzIHRvIGJlIGdpdmVuLiAgT25seSB0aGUKK2V4aXN0aW5nIHZhbHVlcyB0aGF0IG1hdGNoIHRoZSByZWdleHAgYXJlIHVwZGF0ZWQgb3IgdW5zZXQuICBJZgoreW91IHdhbnQgdG8gaGFuZGxlIHRoZSBsaW5lcyB0aGF0IGRvICpub3QqIG1hdGNoIHRoZSByZWdleCwganVzdAorcHJlcGVuZCBhIHNpbmdsZSBleGNsYW1hdGlvbiBtYXJrIGluIGZyb250IChzZWUgRVhBTVBMRVMpLgorCitUaGUgdHlwZSBzcGVjaWZpZXIgY2FuIGJlIGVpdGhlciAnLS1pbnQnIG9yICctLWJvb2wnLCB3aGljaCB3aWxsIG1ha2UKKydnaXQtY29uZmlnJyBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGUocykgYXJlIG9mIHRoZSBnaXZlbiB0eXBlIGFuZAorY29udmVydCB0aGUgdmFsdWUgdG8gdGhlIGNhbm9uaWNhbCBmb3JtIChzaW1wbGUgZGVjaW1hbCBudW1iZXIgZm9yIGludCwKK2EgInRydWUiIG9yICJmYWxzZSIgc3RyaW5nIGZvciBib29sKS4gSWYgbm8gdHlwZSBzcGVjaWZpZXIgaXMgcGFzc2VkLAorbm8gY2hlY2tzIG9yIHRyYW5zZm9ybWF0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIHRoZSB2YWx1ZS4KKworVGhpcyBjb21tYW5kIHdpbGwgZmFpbCBpZjoKKworLiBUaGUgLmdpdC9jb25maWcgZmlsZSBpcyBpbnZhbGlkLAorLiBDYW4gbm90IHdyaXRlIHRvIC5naXQvY29uZmlnLAorLiBubyBzZWN0aW9uIHdhcyBwcm92aWRlZCwKKy4gdGhlIHNlY3Rpb24gb3Iga2V5IGlzIGludmFsaWQsCisuIHlvdSB0cnkgdG8gdW5zZXQgYW4gb3B0aW9uIHdoaWNoIGRvZXMgbm90IGV4aXN0LAorLiB5b3UgdHJ5IHRvIHVuc2V0L3NldCBhbiBvcHRpb24gZm9yIHdoaWNoIG11bHRpcGxlIGxpbmVzIG1hdGNoLCBvcgorLiB5b3UgdXNlIC0tZ2xvYmFsIG9wdGlvbiB3aXRob3V0ICRIT01FIGJlaW5nIHByb3Blcmx5IHNldC4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tcmVwbGFjZS1hbGw6OgorCURlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVwbGFjZSBhdCBtb3N0IG9uZSBsaW5lLiBUaGlzIHJlcGxhY2VzCisJYWxsIGxpbmVzIG1hdGNoaW5nIHRoZSBrZXkgKGFuZCBvcHRpb25hbGx5IHRoZSB2YWx1ZV9yZWdleCkuCisKKy0tYWRkOjoKKwlBZGRzIGEgbmV3IGxpbmUgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGFsdGVyaW5nIGFueSBleGlzdGluZworCXZhbHVlcy4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgcHJvdmlkaW5nICdeJCcgYXMgdGhlIHZhbHVlX3JlZ2V4LgorCistLWdldDo6CisJR2V0IHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBrZXkgKG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSByZWdleAorCW1hdGNoaW5nIHRoZSB2YWx1ZSkuIFJldHVybnMgZXJyb3IgY29kZSAxIGlmIHRoZSBrZXkgd2FzIG5vdAorCWZvdW5kIGFuZCBlcnJvciBjb2RlIDIgaWYgbXVsdGlwbGUga2V5IHZhbHVlcyB3ZXJlIGZvdW5kLgorCistLWdldC1hbGw6OgorCUxpa2UgZ2V0LCBidXQgZG9lcyBub3QgZmFpbCBpZiB0aGUgbnVtYmVyIG9mIHZhbHVlcyBmb3IgdGhlIGtleQorCWlzIG5vdCBleGFjdGx5IG9uZS4KKworLS1nZXQtcmVnZXhwOjoKKwlMaWtlIC0tZ2V0LWFsbCwgYnV0IGludGVycHJldHMgdGhlIG5hbWUgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24uCisKKy0tZ2xvYmFsOjoKKwlVc2UgZ2xvYmFsIH4vLmdpdGNvbmZpZyBmaWxlIHJhdGhlciB0aGFuIHRoZSByZXBvc2l0b3J5IC5naXQvY29uZmlnLgorCistLXVuc2V0OjoKKwlSZW1vdmUgdGhlIGxpbmUgbWF0Y2hpbmcgdGhlIGtleSBmcm9tIGNvbmZpZyBmaWxlLgorCistLXVuc2V0LWFsbDo6CisJUmVtb3ZlIGFsbCBtYXRjaGluZyBsaW5lcyBmcm9tIGNvbmZpZyBmaWxlLgorCistbCwgLS1saXN0OjoKKwlMaXN0IGFsbCB2YXJpYWJsZXMgc2V0IGluIGNvbmZpZyBmaWxlLgorCistLWJvb2w6OgorCWdpdC1jb25maWcgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzICJ0cnVlIiBvciAiZmFsc2UiCisKKy0taW50OjoKKwlnaXQtY29uZmlnIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG91dHB1dCBpcyBhIHNpbXBsZQorCWRlY2ltYWwgbnVtYmVyLiAgQW4gb3B0aW9uYWwgdmFsdWUgc3VmZml4IG9mICdrJywgJ20nLCBvciAnZycKKwlpbiB0aGUgY29uZmlnIGZpbGUgd2lsbCBjYXVzZSB0aGUgdmFsdWUgdG8gYmUgbXVsdGlwbGllZAorCWJ5IDEwMjQsIDEwNDg1NzYsIG9yIDEwNzM3NDE4MjQgcHJpb3IgdG8gb3V0cHV0LgorCisKK0VOVklST05NRU5UCistLS0tLS0tLS0tLQorCitHSVRfQ09ORklHOjoKKwlUYWtlIHRoZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIGdpdmVuIGZpbGUgaW5zdGVhZCBvZiAuZ2l0L2NvbmZpZy4KKwlVc2luZyB0aGUgIi0tZ2xvYmFsIiBvcHRpb24gZm9yY2VzIHRoaXMgdG8gfi8uZ2l0Y29uZmlnLgorCitHSVRfQ09ORklHX0xPQ0FMOjoKKwlDdXJyZW50bHkgdGhlIHNhbWUgYXMgJEdJVF9DT05GSUc7IHdoZW4gR2l0IHdpbGwgc3VwcG9ydCBnbG9iYWwKKwljb25maWd1cmF0aW9uIGZpbGVzLCB0aGlzIHdpbGwgY2F1c2UgaXQgdG8gdGFrZSB0aGUgY29uZmlndXJhdGlvbgorCWZyb20gdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIGZpbGUgaW4gYWRkaXRpb24gdG8gdGhlIGdpdmVuIGZpbGUuCisKKworRVhBTVBMRQorLS0tLS0tLQorCitHaXZlbiBhIC5naXQvY29uZmlnIGxpa2UgdGhpczoKKworCSMKKwkjIFRoaXMgaXMgdGhlIGNvbmZpZyBmaWxlLCBhbmQKKwkjIGEgJyMnIG9yICc7JyBjaGFyYWN0ZXIgaW5kaWNhdGVzCisJIyBhIGNvbW1lbnQKKwkjCisKKwk7IGNvcmUgdmFyaWFibGVzCisJW2NvcmVdCisJCTsgRG9uJ3QgdHJ1c3QgZmlsZSBtb2RlcworCQlmaWxlbW9kZSA9IGZhbHNlCisKKwk7IE91ciBkaWZmIGFsZ29yaXRobQorCVtkaWZmXQorCQlleHRlcm5hbCA9ICIvdXNyL2xvY2FsL2Jpbi9nbnUtZGlmZiAtdSIKKwkJcmVuYW1lcyA9IHRydWUKKworCTsgUHJveHkgc2V0dGluZ3MKKwlbY29yZV0KKwkJZ2l0cHJveHk9InNzaCIgZm9yICJzc2g6Ly9rZXJuZWwub3JnLyIKKwkJZ2l0cHJveHk9InByb3h5LWNvbW1hbmQiIGZvciBrZXJuZWwub3JnCisJCWdpdHByb3h5PSJteXByb3RvY29sLWNvbW1hbmQiIGZvciAibXk6Ly8iCisJCWdpdHByb3h5PWRlZmF1bHQtcHJveHkgOyBmb3IgYWxsIHRoZSByZXN0CisKK3lvdSBjYW4gc2V0IHRoZSBmaWxlbW9kZSB0byB0cnVlIHdpdGgKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgY29yZS5maWxlbW9kZSB0cnVlCistLS0tLS0tLS0tLS0KKworVGhlIGh5cG90aGV0aWNhbCBwcm94eSBjb21tYW5kIGVudHJpZXMgYWN0dWFsbHkgaGF2ZSBhIHBvc3RmaXggdG8gZGlzY2Vybgord2hhdCBVUkwgdGhleSBhcHBseSB0by4gSGVyZSBpcyBob3cgdG8gY2hhbmdlIHRoZSBlbnRyeSBmb3Iga2VybmVsLm9yZwordG8gInNzaCIuCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIGNvcmUuZ2l0cHJveHkgJyJzc2giIGZvciBrZXJuZWwub3JnJyAnZm9yIGtlcm5lbC5vcmckJworLS0tLS0tLS0tLS0tCisKK1RoaXMgbWFrZXMgc3VyZSB0aGF0IG9ubHkgdGhlIGtleS92YWx1ZSBwYWlyIGZvciBrZXJuZWwub3JnIGlzIHJlcGxhY2VkLgorCitUbyBkZWxldGUgdGhlIGVudHJ5IGZvciByZW5hbWVzLCBkbworCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYucmVuYW1lcworLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIGRlbGV0ZSBhbiBlbnRyeSBmb3IgYSBtdWx0aXZhciAobGlrZSBjb3JlLmdpdHByb3h5IGFib3ZlKSwKK3lvdSBoYXZlIHRvIHByb3ZpZGUgYSByZWdleCBtYXRjaGluZyB0aGUgdmFsdWUgb2YgZXhhY3RseSBvbmUgbGluZS4KKworVG8gcXVlcnkgdGhlIHZhbHVlIGZvciBhIGdpdmVuIGtleSwgZG8KKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1nZXQgY29yZS5maWxlbW9kZQorLS0tLS0tLS0tLS0tCisKK29yCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUKKy0tLS0tLS0tLS0tLQorCitvciwgdG8gcXVlcnkgYSBtdWx0aXZhcjoKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1nZXQgY29yZS5naXRwcm94eSAiZm9yIGtlcm5lbC5vcmckIgorLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIGtub3cgYWxsIHRoZSB2YWx1ZXMgZm9yIGEgbXVsdGl2YXIsIGRvOgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyAtLWdldC1hbGwgY29yZS5naXRwcm94eQorLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBsaWtlIHRvIGxpdmUgZGFuZ2Vyb3VzLCB5b3UgY2FuIHJlcGxhY2UgKmFsbCogY29yZS5naXRwcm94eSBieSBhCituZXcgb25lIHdpdGgKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBjb3JlLmdpdHByb3h5IHNzaAorLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIGlmIHlvdSByZWFsbHkgb25seSB3YW50IHRvIHJlcGxhY2UgdGhlIGxpbmUgZm9yIHRoZSBkZWZhdWx0IHByb3h5LAoraS5lLiB0aGUgb25lIHdpdGhvdXQgYSAiZm9yIC4uLiIgcG9zdGZpeCwgZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgY29yZS5naXRwcm94eSBzc2ggJyEgZm9yICcKKy0tLS0tLS0tLS0tLQorCitUbyBhY3R1YWxseSBtYXRjaCBvbmx5IHZhbHVlcyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmssIHlvdSBoYXZlIHRvCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIHNlY3Rpb24ua2V5IHZhbHVlICdbIV0nCistLS0tLS0tLS0tLS0KKworVG8gYWRkIGEgbmV3IHByb3h5LCB3aXRob3V0IGFsdGVyaW5nIGFueSBvZiB0aGUgZXhpc3Rpbmcgb25lcywgdXNlCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIGNvcmUuZ2l0cHJveHkgJyJwcm94eSIgZm9yIGV4YW1wbGUuY29tJworLS0tLS0tLS0tLS0tCisKKworaW5jbHVkZTo6Y29uZmlnLnR4dFtdCisKKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgSm9oYW5uZXMgU2NoaW5kZWxpbiA8Sm9oYW5uZXMuU2NoaW5kZWxpbkBnbXguZGU+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IEpvaGFubmVzIFNjaGluZGVsaW4sIFBldHIgQmF1ZGlzIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY291bnQtb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb3VudC1vYmplY3RzLnR4dAppbmRleCBjNTlkZjY0Li45MWM4YzkyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb3VudC1vYmplY3RzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb3VudC1vYmplY3RzLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWNvdW50LW9iamVjdHMgLSBSZXBvcnRzIG9uIHVucGFja2VkIG9iamVjdHMKK2dpdC1jb3VudC1vYmplY3RzIC0gQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24KIAogU1lOT1BTSVMKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dAppbmRleCAwOTJkMGQ2Li4zNDdjYmNlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1jdnNleHBvcnRjb21taXQgLSBFeHBvcnQgYSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQKK2dpdC1jdnNleHBvcnRjb21taXQgLSBFeHBvcnQgYSBzaW5nbGUgY29tbWl0IHRvIGEgQ1ZTIGNoZWNrb3V0CiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CmluZGV4IDVjNDAyZGUuLmY1NDUwZGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWN2c2ltcG9ydCAtIEltcG9ydCBhIENWUyByZXBvc2l0b3J5IGludG8gZ2l0CitnaXQtY3ZzaW1wb3J0IC0gU2FsdmFnZSB5b3VyIGRhdGEgb3V0IG9mIGFub3RoZXIgU0NNIHBlb3BsZSBsb3ZlIHRvIGhhdGUKIAogCiBTWU5PUFNJUwpAQCAtOTcsNyArOTcsNyBAQAogCVN1YnN0aXR1dGUgdGhlIGNoYXJhY3RlciAiLyIgaW4gYnJhbmNoIG5hbWVzIHdpdGggPHN1YnN0PgogCiAtQSA8YXV0aG9yLWNvbnYtZmlsZT46OgotCUNWUyBieSBkZWZhdWx0IHVzZXMgdGhlIHVuaXggdXNlcm5hbWUgd2hlbiB3cml0aW5nIGl0cworCUNWUyBieSBkZWZhdWx0IHVzZXMgdGhlIFVuaXggdXNlcm5hbWUgd2hlbiB3cml0aW5nIGl0cwogCWNvbW1pdCBsb2dzLiBVc2luZyB0aGlzIG9wdGlvbiBhbmQgYW4gYXV0aG9yLWNvbnYtZmlsZQogCWluIHRoaXMgZm9ybWF0CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CmluZGV4IDk5M2FkYzcuLjlkZGFiNzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dApAQCAtMTMxLDE0ICsxMzEsMTQgQEAKIHRoZSBmYWNpbGl0eSBvZiBpbmV0IGRhZW1vbiB0byBhY2hpZXZlIHRoZSBzYW1lIGJlZm9yZSBzcGF3bmluZwogYGdpdC1kYWVtb25gIGlmIG5lZWRlZC4KIAotLS1lbmFibGUtc2VydmljZSwgLS1kaXNhYmxlLXNlcnZpY2U6OgorLS1lbmFibGU9c2VydmljZSwgLS1kaXNhYmxlPXNlcnZpY2U6OgogCUVuYWJsZS9kaXNhYmxlIHRoZSBzZXJ2aWNlIHNpdGUtd2lkZSBwZXIgZGVmYXVsdC4gIE5vdGUKIAl0aGF0IGEgc2VydmljZSBkaXNhYmxlZCBzaXRlLXdpZGUgY2FuIHN0aWxsIGJlIGVuYWJsZWQKIAlwZXIgcmVwb3NpdG9yeSBpZiBpdCBpcyBtYXJrZWQgb3ZlcnJpZGFibGUgYW5kIHRoZQogCXJlcG9zaXRvcnkgZW5hYmxlcyB0aGUgc2VydmljZSB3aXRoIGFuIGNvbmZpZ3VyYXRpb24KIAlpdGVtLgogCi0tLWFsbG93LW92ZXJyaWRlLCAtLWZvcmJpZC1vdmVycmlkZTo6CistLWFsbG93LW92ZXJyaWRlPXNlcnZpY2UsIC0tZm9yYmlkLW92ZXJyaWRlPXNlcnZpY2U6OgogCUFsbG93L2ZvcmJpZCBvdmVycmlkaW5nIHRoZSBzaXRlLXdpZGUgZGVmYXVsdCB3aXRoIHBlcgogCXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbi4gIEJ5IGRlZmF1bHQsIGFsbCB0aGUgc2VydmljZXMKIAlhcmUgb3ZlcnJpZGFibGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKaW5kZXggMjcwMGYzNS4uNDdhNTgzZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dApAQCAtMTQsOCArMTQsOCBAQAogLS0tLS0tLS0tLS0KIFRoZSBjb21tYW5kIGZpbmRzIHRoZSBtb3N0IHJlY2VudCB0YWcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhCiBjb21taXQsIGFuZCBpZiB0aGUgY29tbWl0IGl0c2VsZiBpcyBwb2ludGVkIGF0IGJ5IHRoZSB0YWcsIHNob3dzCi10aGUgdGFnLiAgT3RoZXJ3aXNlLCBpdCBzdWZmaXhlcyB0aGUgdGFnIG5hbWUgd2l0aCBhYmJyZXZpYXRlZAotb2JqZWN0IG5hbWUgb2YgdGhlIGNvbW1pdC4KK3RoZSB0YWcuICBPdGhlcndpc2UsIGl0IHN1ZmZpeGVzIHRoZSB0YWcgbmFtZSB3aXRoIHRoZSBudW1iZXIgb2YKK2FkZGl0aW9uYWwgY29tbWl0cyBhbmQgdGhlIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lIG9mIHRoZSBjb21taXQuCiAKIAogT1BUSU9OUwpAQCAtMzUsNiArMzUsMTYgQEAKIAlJbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IDggaGV4YWRlY2ltYWwgZGlnaXRzIGFzIHRoZQogCWFiYnJldmlhdGVkIG9iamVjdCBuYW1lLCB1c2UgPG4+IGRpZ2l0cy4KIAorLS1jYW5kaWRhdGVzPTxuPjo6CisJSW5zdGVhZCBvZiBjb25zaWRlcmluZyBvbmx5IHRoZSAxMCBtb3N0IHJlY2VudCB0YWdzIGFzCisJY2FuZGlkYXRlcyB0byBkZXNjcmliZSB0aGUgaW5wdXQgY29tbWl0dGlzaCBjb25zaWRlcgorCXVwIHRvIDxuPiBjYW5kaWRhdGVzLiAgSW5jcmVhc2luZyA8bj4gYWJvdmUgMTAgd2lsbCB0YWtlCisJc2xpZ2h0bHkgbG9uZ2VyIGJ1dCBtYXkgcHJvZHVjZSBhIG1vcmUgYWNjdXJhdGUgcmVzdWx0LgorCistLWRlYnVnOjoKKwlWZXJib3NlbHkgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VhcmNoaW5nIHN0cmF0ZWd5CisJYmVpbmcgZW1wbG95ZWQgdG8gc3RhbmRhcmQgZXJyb3IuICBUaGUgdGFnIG5hbWUgd2lsbCBzdGlsbAorCWJlIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0LgogCiBFWEFNUExFUwogLS0tLS0tLS0KQEAgLTQyLDEyICs1MiwxOCBAQAogV2l0aCBzb21ldGhpbmcgbGlrZSBnaXQuZ2l0IGN1cnJlbnQgdHJlZSwgSSBnZXQ6CiAKIAlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0LWRlc2NyaWJlIHBhcmVudAotCXYxLjAuNC1nMjQxNDcyMWIKKwl2MS4wLjQtMTQtZzI0MTQ3MjEKIAogaS5lLiB0aGUgY3VycmVudCBoZWFkIG9mIG15ICJwYXJlbnQiIGJyYW5jaCBpcyBiYXNlZCBvbiB2MS4wLjQsCi1idXQgc2luY2UgaXQgaGFzIGEgZmV3IGNvbW1pdHMgb24gdG9wIG9mIHRoYXQsIGl0IGhhcyBhZGRlZCB0aGUKLWdpdCBoYXNoIG9mIHRoZSB0aGluZyB0byB0aGUgZW5kOiAiLWciICsgOC1jaGFyIHNob3J0aGFuZCBmb3IKLXRoZSBjb21taXQgYDI0MTQ3MjFiMTk0NDUzZjA1ODA3OWQ4OTdkMTNjNGUzNzdmOTJkYzZgLgorYnV0IHNpbmNlIGl0IGhhcyBhIGhhbmRmdWwgY29tbWl0cyBvbiB0b3Agb2YgdGhhdCwKK2Rlc2NyaWJlIGhhcyBhZGRlZCB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29tbWl0cyAoIjE0IikgYW5kCithbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSBmb3IgdGhlIGNvbW1pdCBpdHNlbGYgKCIyNDE0NzIxIikKK2F0IHRoZSBlbmQuCisKK1RoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb21taXRzIGlzIHRoZSBudW1iZXIKK29mIGNvbW1pdHMgd2hpY2ggd291bGQgYmUgZGlzcGxheWVkIGJ5ICJnaXQgbG9nIHYxLjAuNC4ucGFyZW50Ii4KK1RoZSBoYXNoIHN1ZmZpeCBpcyAiLWciICsgNy1jaGFyIGFiYnJldmlhdGlvbiBmb3IgdGhlIHRpcCBjb21taXQKK29mIHBhcmVudCAod2hpY2ggd2FzIGAyNDE0NzIxYjE5NDQ1M2YwNTgwNzlkODk3ZDEzYzRlMzc3ZjkyZGM2YCkuCiAKIERvaW5nIGEgImdpdC1kZXNjcmliZSIgb24gYSB0YWctbmFtZSB3aWxsIGp1c3Qgc2hvdyB0aGUgdGFnIG5hbWU6CiAKQEAgLTU4LDE2ICs3NCw0MyBAQAogdGhlIG91dHB1dCBzaG93cyB0aGUgcmVmZXJlbmNlIHBhdGggYXMgd2VsbDoKIAogCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgLS1hbGwgLS1hYmJyZXY9NCB2MS4wLjVeMgotCXRhZ3MvdjEuMC4wLWc5NzViCisJdGFncy92MS4wLjAtMjEtZzk3NWIKIAogCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgLS1hbGwgSEVBRF4KLQloZWFkcy9sdC9kZXNjcmliZS1nOTc1YgorCWhlYWRzL2x0L2Rlc2NyaWJlLTctZzk3NWIKKworV2l0aCAtLWFiYnJldiBzZXQgdG8gMCwgdGhlIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUKK2Nsb3Nlc3QgdGFnbmFtZSB3aXRob3V0IGFueSBzdWZmaXg6CisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTAgdjEuMC41XjIKKwl0YWdzL3YxLjAuMAorCitTRUFSQ0ggU1RSQVRFR1kKKy0tLS0tLS0tLS0tLS0tLQorCitGb3IgZWFjaCBjb21taXR0aXNoIHN1cHBsaWVkICJnaXQgZGVzY3JpYmUiIHdpbGwgZmlyc3QgbG9vayBmb3IKK2EgdGFnIHdoaWNoIHRhZ3MgZXhhY3RseSB0aGF0IGNvbW1pdC4gIEFubm90YXRlZCB0YWdzIHdpbGwgYWx3YXlzCitiZSBwcmVmZXJyZWQgb3ZlciBsaWdodHdlaWdodCB0YWdzLCBhbmQgdGFncyB3aXRoIG5ld2VyIGRhdGVzIHdpbGwKK2Fsd2F5cyBiZSBwcmVmZXJyZWQgb3ZlciB0YWdzIHdpdGggb2xkZXIgZGF0ZXMuICBJZiBhbiBleGFjdCBtYXRjaAoraXMgZm91bmQsIGl0cyBuYW1lIHdpbGwgYmUgb3V0cHV0IGFuZCBzZWFyY2hpbmcgd2lsbCBzdG9wLgorCitJZiBhbiBleGFjdCBtYXRjaCB3YXMgbm90IGZvdW5kICJnaXQgZGVzY3JpYmUiIHdpbGwgd2FsayBiYWNrCit0aHJvdWdoIHRoZSBjb21taXQgaGlzdG9yeSB0byBsb2NhdGUgYW4gYW5jZXN0b3IgY29tbWl0IHdoaWNoCitoYXMgYmVlbiB0YWdnZWQuICBUaGUgYW5jZXN0b3IncyB0YWcgd2lsbCBiZSBvdXRwdXQgYWxvbmcgd2l0aCBhbgorYWJicmV2aWF0aW9uIG9mIHRoZSBpbnB1dCBjb21taXR0aXNoJ3MgU0hBMS4KKworSWYgbXVsdGlwbGUgdGFncyB3ZXJlIGZvdW5kIGR1cmluZyB0aGUgd2FsayB0aGVuIHRoZSB0YWcgd2hpY2gKK2hhcyB0aGUgZmV3ZXN0IGNvbW1pdHMgZGlmZmVyZW50IGZyb20gdGhlIGlucHV0IGNvbW1pdHRpc2ggd2lsbCBiZQorc2VsZWN0ZWQgYW5kIG91dHB1dC4gIEhlcmUgZmV3ZXN0IGNvbW1pdHMgZGlmZmVyZW50IGlzIGRlZmluZWQgYXMKK3RoZSBudW1iZXIgb2YgY29tbWl0cyB3aGljaCB3b3VsZCBiZSBzaG93biBieSAiZ2l0IGxvZyB0YWcuLmlucHV0Igord2lsbCBiZSB0aGUgc21hbGxlc3QgbnVtYmVyIG9mIGNvbW1pdHMgcG9zc2libGUuCiAKIAogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiwgYnV0IHNvbWV3aGF0Ci1idXRjaGVyZWQgYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorYnV0Y2hlcmVkIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4uICBMYXRlciBzaWduaWZpY2FudGx5Cit1cGRhdGVkIGJ5IFNoYXduIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4uCiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXN0YWdlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXN0YWdlcy50eHQKaW5kZXggMzI3MzkxOC4uMTIwZDE0ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1zdGFnZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtc3RhZ2VzLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWRpZmYtc3RhZ2VzIC0gQ29tcGFyZXMgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBiZXR3ZWVuIHN0YWdlcyBpbiBhbiB1bm1lcmdlZCBpbmRleCBmaWxlCitnaXQtZGlmZi1zdGFnZXMgLSBDb21wYXJlcyB0d28gbWVyZ2Ugc3RhZ2VzIGluIHRoZSBpbmRleAogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CmluZGV4IDg5Nzc4NzcuLjZhMDk4ZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYudHh0CkBAIC00Nyw2ICs0Nyw5IEBACiBub3RlZCB0aGF0IGFsbCBvZiB0aGUgPGNvbW1pdD4gaW4gdGhlIGFib3ZlIGRlc2NyaXB0aW9uIGNhbiBiZQogYW55IDx0cmVlLWlzaD4uCiAKK0ZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIDxjb21taXQ+LCBzZWUKKyJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBpbiBnaXRsaW5rOmdpdC1yZXYtcGFyc2VbMV0uCisKIAogT1BUSU9OUwogLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dAppbmRleCAzZTZjZDg4Li4xMDVkNzZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dApAQCAtOCwxMCArOCwxMyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtZmV0Y2gtcGFjaycgWy1xXSBbLWtdIFstLWV4ZWM9PGdpdC11cGxvYWQtcGFjaz5dIFs8aG9zdD46XTxkaXJlY3Rvcnk+IFs8cmVmcz4uLi5dCisnZ2l0LWZldGNoLXBhY2snIFstLWFsbF0gWy0tcXVpZXR8LXFdIFstLWtlZXB8LWtdIFstLXRoaW5dIFstLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+XSBbLS1kZXB0aD08bj5dIFstdl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWZzPi4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCitVc3VhbGx5IHlvdSB3b3VsZCB3YW50IHRvIHVzZSBnaXRsaW5rOmdpdC1mZXRjaFsxXSB3aGljaCBpcyBhCitoaWdoZXIgbGV2ZWwgd3JhcHBlciBvZiB0aGlzIGNvbW1hbmQgaW5zdGVhZC4KKwogSW52b2tlcyAnZ2l0LXVwbG9hZC1wYWNrJyBvbiBhIHBvdGVudGlhbGx5IHJlbW90ZSByZXBvc2l0b3J5LAogYW5kIGFza3MgaXQgdG8gc2VuZCBvYmplY3RzIG1pc3NpbmcgZnJvbSB0aGlzIHJlcG9zaXRvcnksIHRvCiB1cGRhdGUgdGhlIG5hbWVkIGhlYWRzLiAgVGhlIGxpc3Qgb2YgY29tbWl0cyBhdmFpbGFibGUgbG9jYWxseQpAQCAtMjUsMTcgKzI4LDI0IEBACiAKIE9QVElPTlMKIC0tLS0tLS0KLS1xOjoKK1wtLWFsbDo6CisJRmV0Y2ggYWxsIHJlbW90ZSByZWZzLgorCitcLS1xdWlldCwgXC1xOjoKIAlQYXNzICctcScgZmxhZyB0byAnZ2l0LXVucGFjay1vYmplY3RzJzsgdGhpcyBtYWtlcyB0aGUKIAljbG9uaW5nIHByb2Nlc3MgbGVzcyB2ZXJib3NlLgogCi0tazo6CitcLS1rZWVwLCBcLWs6OgogCURvIG5vdCBpbnZva2UgJ2dpdC11bnBhY2stb2JqZWN0cycgb24gcmVjZWl2ZWQgZGF0YSwgYnV0CiAJY3JlYXRlIGEgc2luZ2xlIHBhY2tmaWxlIG91dCBvZiBpdCBpbnN0ZWFkLCBhbmQgc3RvcmUgaXQKIAlpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiBJZiBwcm92aWRlZCB0d2ljZSB0aGVuIHRoZSBwYWNrIGlzCiAJbG9ja2VkIGFnYWluc3QgcmVwYWNraW5nLgogCi0tLWV4ZWM9PGdpdC11cGxvYWQtcGFjaz46OgorXC0tdGhpbjo6CisJU3BlbmQgZXh0cmEgY3ljbGVzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBiZSBzZW50LgorCVVzZSBpdCBvbiBzbG93ZXIgY29ubmVjdGlvbi4KKworXC0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz46OgogCVVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gJ2dpdC11cGxvYWQtcGFjaycgb24gdGhlCiAJcmVtb3RlIHNpZGUsIGlmIGlzIG5vdCBmb3VuZCBvbiB5b3VyICRQQVRILgogCUluc3RhbGxhdGlvbnMgb2Ygc3NoZCBpZ25vcmVzIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQKQEAgLTQ3LDYgKzU3LDE1IEBACiAJc2hlbGxzIGJ5IGhhdmluZyBhIGxlYW4gLmJhc2hyYyBmaWxlICh0aGV5IHNldCBtb3N0IG9mCiAJdGhlIHRoaW5ncyB1cCBpbiAuYmFzaF9wcm9maWxlKS4KIAorXC0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPjo6CisJU2FtZSBhcyBcLS11cGxvYWQtcGFjaz08Z2l0LXVwbG9hZC1wYWNrPi4KKworXC0tZGVwdGg9PG4+OjoKKwlMaW1pdCBmZXRjaGluZyB0byBhbmNlc3Rvci1jaGFpbnMgbm90IGxvbmdlciB0aGFuIG4uCisKK1wtdjo6CisJUnVuIHZlcmJvc2VseS4KKwogPGhvc3Q+OjoKIAlBIHJlbW90ZSBob3N0IHRoYXQgaG91c2VzIHRoZSByZXBvc2l0b3J5LiAgV2hlbiB0aGlzCiAJcGFydCBpcyBzcGVjaWZpZWQsICdnaXQtdXBsb2FkLXBhY2snIGlzIGludm9rZWQgdmlhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKaW5kZXggYTllODZmZC4uN2VjZjI0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWZldGNoIC0gRG93bmxvYWQgb2JqZWN0cyBhbmQgYSBoZWFkIGZyb20gYW5vdGhlciByZXBvc2l0b3J5CitnaXQtZmV0Y2ggLSBEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5CiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0CmluZGV4IDJiZjZhZWYuLmRhNTJlYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dApAQCAtNyw3ICs3LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWZvci1lYWNoLXJlZicgWy0tY291bnQ9PGNvdW50Pl1cKiBbLS1zaGVsbHwtLXBlcmx8LS1weXRob25dIFstLXNvcnQ9PGtleT5dXCogWy0tZm9ybWF0PTxmb3JtYXQ+XSBbPHBhdHRlcm4+XQorJ2dpdC1mb3ItZWFjaC1yZWYnIFstLWNvdW50PTxjb3VudD5dXCogWy0tc2hlbGx8LS1wZXJsfC0tcHl0aG9ufC0tdGNsXSBbLS1zb3J0PTxrZXk+XVwqIFstLWZvcm1hdD08Zm9ybWF0Pl0gWzxwYXR0ZXJuPl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0xNSw3ICsxNSw3IEBACiBJdGVyYXRlIG92ZXIgYWxsIHJlZnMgdGhhdCBtYXRjaCBgPHBhdHRlcm4+YCBhbmQgc2hvdyB0aGVtCiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGA8Zm9ybWF0PmAsIGFmdGVyIHNvcnRpbmcgdGhlbSBhY2NvcmRpbmcKIHRvIHRoZSBnaXZlbiBzZXQgb2YgYDxrZXk+YC4gIElmIGA8bWF4PmAgaXMgZ2l2ZW4sIHN0b3AgYWZ0ZXIKLXNob3dpbmcgdGhhdCBtYW55IHJlZnMuICBUaGUgaW50ZXJwb3JhdGVkIHZhbHVlcyBpbiBgPGZvcm1hdD5gCitzaG93aW5nIHRoYXQgbWFueSByZWZzLiAgVGhlIGludGVycG9sYXRlZCB2YWx1ZXMgaW4gYDxmb3JtYXQ+YAogY2FuIG9wdGlvbmFsbHkgYmUgcXVvdGVkIGFzIHN0cmluZyBsaXRlcmFscyBpbiB0aGUgc3BlY2lmaWVkCiBob3N0IGxhbmd1YWdlIGFsbG93aW5nIHRoZWlyIGRpcmVjdCBldmFsdWF0aW9uIGluIHRoYXQgbGFuZ3VhZ2UuCiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIAl1c2luZyBmbm1hdGNoKDMpLiAgUmVmcyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgcGF0dGVybgogCWFyZSBub3Qgc2hvd24uCiAKLS0tc2hlbGwsIC0tcGVybCwgLS1weXRob246OgorLS1zaGVsbCwgLS1wZXJsLCAtLXB5dGhvbiwgLS10Y2w6OgogCUlmIGdpdmVuLCBzdHJpbmdzIHRoYXQgc3Vic3RpdHV0ZSBgJShmaWVsZG5hbWUpYAogCXBsYWNlaG9sZGVycyBhcmUgcXVvdGVkIGFzIHN0cmluZyBsaXRlcmFscyBzdWl0YWJsZSBmb3IKIAl0aGUgc3BlY2lmaWVkIGhvc3QgbGFuZ3VhZ2UuICBUaGlzIGlzIG1lYW50IHRvIHByb2R1Y2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CmluZGV4IDY3NDI1ZGMuLjU5ZjM0YjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtMTEsNyArMTEsOCBAQAogW3ZlcnNlXQogJ2dpdC1mb3JtYXQtcGF0Y2gnIFstbiB8IC1rXSBbLW8gPGRpcj4gfCAtLXN0ZG91dF0gWy0tYXR0YWNoXSBbLS10aHJlYWRdCiAJICAgICAgICAgICBbLXMgfCAtLXNpZ25vZmZdIFstLWRpZmYtb3B0aW9uc10gWy0tc3RhcnQtbnVtYmVyIDxuPl0KLQkJICAgWy0taW4tcmVwbHktdG89TWVzc2FnZS1JZF0KKwkJICAgWy0taW4tcmVwbHktdG89TWVzc2FnZS1JZF0gWy0tc3VmZml4PS48c2Z4Pl0KKwkJICAgWy0taWdub3JlLWlmLWluLXVwc3RyZWFtXQogCQkgICA8c2luY2U+Wy4uPHVudGlsPl0KIAogREVTQ1JJUFRJT04KQEAgLTIwLDcgKzIxLDkgQEAKIFByZXBhcmUgZWFjaCBjb21taXQgYmV0d2VlbiA8c2luY2U+IGFuZCA8dW50aWw+IHdpdGggaXRzIHBhdGNoIGluCiBvbmUgZmlsZSBwZXIgY29tbWl0LCBmb3JtYXR0ZWQgdG8gcmVzZW1ibGUgVU5JWCBtYWlsYm94IGZvcm1hdC4KIElmIC4uPHVudGlsPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgaGVhZCBvZiB0aGUgY3VycmVudCB3b3JraW5nCi10cmVlIGlzIGltcGxpZWQuCit0cmVlIGlzIGltcGxpZWQuICBGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbAorPHNpbmNlPiBhbmQgPHVudGlsPiwgc2VlICJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBpbgorZ2l0bGluazpnaXQtcmV2LXBhcnNlWzFdLgogCiBUaGUgb3V0cHV0IG9mIHRoaXMgY29tbWFuZCBpcyBjb252ZW5pZW50IGZvciBlLW1haWwgc3VibWlzc2lvbiBvcgogZm9yIHVzZSB3aXRoIGdpdGxpbms6Z2l0LWFtWzFdLgpAQCAtNzgsMTMgKzgxLDM0IEBACiAJcmVwbHkgdG8gdGhlIGdpdmVuIE1lc3NhZ2UtSWQsIHdoaWNoIGF2b2lkcyBicmVha2luZyB0aHJlYWRzIHRvCiAJcHJvdmlkZSBhIG5ldyBwYXRjaCBzZXJpZXMuCiAKKy0taWdub3JlLWlmLWluLXVwc3RyZWFtOjoKKwlEbyBub3QgaW5jbHVkZSBhIHBhdGNoIHRoYXQgbWF0Y2hlcyBhIGNvbW1pdCBpbgorCTx1bnRpbD4uLjxzaW5jZT4uICBUaGlzIHdpbGwgZXhhbWluZSBhbGwgcGF0Y2hlcyByZWFjaGFibGUKKwlmcm9tIDxzaW5jZT4gYnV0IG5vdCBmcm9tIDx1bnRpbD4gYW5kIGNvbXBhcmUgdGhlbSB3aXRoIHRoZQorCXBhdGNoZXMgYmVpbmcgZ2VuZXJhdGVkLCBhbmQgYW55IHBhdGNoIHRoYXQgbWF0Y2hlcyBpcworCWlnbm9yZWQuCisKKy0tc3VmZml4PS48c2Z4Pjo6CisJSW5zdGVhZCBvZiB1c2luZyBgLnBhdGNoYCBhcyB0aGUgc3VmZml4IGZvciBnZW5lcmF0ZWQKKwlmaWxlbmFtZXMsIHVzZSBzcGVjaWZlZCBzdWZmaXguICBBIGNvbW1vbiBhbHRlcm5hdGl2ZSBpcworCWAtLXN1ZmZpeD0udHh0YC4KKysKK05vdGUgdGhhdCB5b3Ugd291bGQgbmVlZCB0byBpbmNsdWRlIHRoZSBsZWFkaW5nIGRvdCBgLmAgaWYgeW91Cit3YW50IGEgZmlsZW5hbWUgbGlrZSBgMDAwMS1kZXNjcmlwdGlvbi1vZi1teS1jaGFuZ2UucGF0Y2hgLCBhbmQKK3RoZSBmaXJzdCBsZXR0ZXIgZG9lcyBub3QgaGF2ZSB0byBiZSBhIGRvdC4gIExlYXZpbmcgaXQgZW1wdHkgd291bGQKK25vdCBhZGQgYW55IHN1ZmZpeC4KKwogQ09ORklHVVJBVElPTgogLS0tLS0tLS0tLS0tLQogWW91IGNhbiBzcGVjaWZ5IGV4dHJhIG1haWwgaGVhZGVyIGxpbmVzIHRvIGJlIGFkZGVkIHRvIGVhY2gKLW1lc3NhZ2UgaW4gdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyBmb2xsb3dzOgorbWVzc2FnZSBpbiB0aGUgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uLiAgQWxzbyB5b3UgY2FuIHNwZWNpZnkKK3RoZSBkZWZhdWx0IHN1ZmZpeCBkaWZmZXJlbnQgZnJvbSB0aGUgYnVpbHQtaW4gb25lOgogCistLS0tLS0tLS0tLS0KIFtmb3JtYXRdCiAgICAgICAgIGhlYWRlcnMgPSAiT3JnYW5pemF0aW9uOiBnaXQtZm9vXG4iCisgICAgICAgIHN1ZmZpeCA9IC50eHQKKy0tLS0tLS0tLS0tLQogCiAKIEVYQU1QTEVTCkBAIC0xMDksNiArMTMzLDkgQEAKIAl1bmRlcnN0YW5kIHJlbmFtaW5nIHBhdGNoZXMsIHNvIHVzZSBpdCBvbmx5IHdoZW4geW91IGtub3cKIAl0aGUgcmVjaXBpZW50IHVzZXMgZ2l0IHRvIGFwcGx5IHlvdXIgcGF0Y2guCiAKK2dpdC1mb3JtYXQtcGF0Y2ggLTM6OgorCUV4dHJhY3QgdGhyZWUgdG9wbW9zdCBjb21taXRzIGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoCisJYW5kIGZvcm1hdCB0aGVtIGFzIGUtbWFpbGFibGUgcGF0Y2hlcy4KIAogU2VlIEFsc28KIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZnNjay1vYmplY3RzLnR4dAppbmRleCBkMGFmOTlkLi5mMjEwNjFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZzY2stb2JqZWN0cy50eHQKQEAgLTgsMTMyICs4LDEwIEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotW3ZlcnNlXQotJ2dpdC1mc2NrLW9iamVjdHMnIFstLXRhZ3NdIFstLXJvb3RdIFstLXVucmVhY2hhYmxlXSBbLS1jYWNoZV0KLQkJIFstLWZ1bGxdIFstLXN0cmljdF0gWzxvYmplY3Q+Kl0KKydnaXQtZnNjay1vYmplY3RzJyAuLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1WZXJpZmllcyB0aGUgY29ubmVjdGl2aXR5IGFuZCB2YWxpZGl0eSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UuCiAKLU9QVElPTlMKLS0tLS0tLS0KLTxvYmplY3Q+OjoKLQlBbiBvYmplY3QgdG8gdHJlYXQgYXMgdGhlIGhlYWQgb2YgYW4gdW5yZWFjaGFiaWxpdHkgdHJhY2UuCi0rCi1JZiBubyBvYmplY3RzIGFyZSBnaXZlbiwgZ2l0LWZzY2stb2JqZWN0cyBkZWZhdWx0cyB0byB1c2luZyB0aGUKLWluZGV4IGZpbGUgYW5kIGFsbCBTSEExIHJlZmVyZW5jZXMgaW4gLmdpdC9yZWZzLyogYXMgaGVhZHMuCi0KLS0tdW5yZWFjaGFibGU6OgotCVByaW50IG91dCBvYmplY3RzIHRoYXQgZXhpc3QgYnV0IHRoYXQgYXJlbid0IHJlYWRhYmxlIGZyb20gYW55Ci0Jb2YgdGhlIHJlZmVyZW5jZSBub2Rlcy4KLQotLS1yb290OjoKLQlSZXBvcnQgcm9vdCBub2Rlcy4KLQotLS10YWdzOjoKLQlSZXBvcnQgdGFncy4KLQotLS1jYWNoZTo6Ci0JQ29uc2lkZXIgYW55IG9iamVjdCByZWNvcmRlZCBpbiB0aGUgaW5kZXggYWxzbyBhcyBhIGhlYWQgbm9kZSBmb3IKLQlhbiB1bnJlYWNoYWJpbGl0eSB0cmFjZS4KLQotLS1mdWxsOjoKLQlDaGVjayBub3QganVzdCBvYmplY3RzIGluIEdJVF9PQkpFQ1RfRElSRUNUT1JZCi0JKCRHSVRfRElSL29iamVjdHMpLCBidXQgYWxzbyB0aGUgb25lcyBmb3VuZCBpbiBhbHRlcm5hdGUKLQlvYmplY3QgcG9vbHMgbGlzdGVkIGluIEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTCi0Jb3IgJEdJVF9ESVIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMsCi0JYW5kIGluIHBhY2tlZCBnaXQgYXJjaGl2ZXMgZm91bmQgaW4gJEdJVF9ESVIvb2JqZWN0cy9wYWNrCi0JYW5kIGNvcnJlc3BvbmRpbmcgcGFjayBzdWJkaXJlY3RvcmllcyBpbiBhbHRlcm5hdGUKLQlvYmplY3QgcG9vbHMuCi0KLS0tc3RyaWN0OjoKLQlFbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmcsIG5hbWVseSB0byBjYXRjaCBhIGZpbGUgbW9kZQotCXJlY29yZGVkIHdpdGggZyt3IGJpdCBzZXQsIHdoaWNoIHdhcyBjcmVhdGVkIGJ5IG9sZGVyCi0JdmVyc2lvbnMgb2YgZ2l0LiAgRXhpc3RpbmcgcmVwb3NpdG9yaWVzLCBpbmNsdWRpbmcgdGhlCi0JTGludXgga2VybmVsLCBnaXQgaXRzZWxmLCBhbmQgc3BhcnNlIHJlcG9zaXRvcnkgaGF2ZSBvbGQKLQlvYmplY3RzIHRoYXQgdHJpZ2dlcnMgdGhpcyBjaGVjaywgYnV0IGl0IGlzIHJlY29tbWVuZGVkCi0JdG8gY2hlY2sgbmV3IHByb2plY3RzIHdpdGggdGhpcyBmbGFnLgotCi1JdCB0ZXN0cyBTSEExIGFuZCBnZW5lcmFsIG9iamVjdCBzYW5pdHksIGFuZCBpdCBkb2VzIGZ1bGwgdHJhY2tpbmcgb2YKLXRoZSByZXN1bHRpbmcgcmVhY2hhYmlsaXR5IGFuZCBldmVyeXRoaW5nIGVsc2UuIEl0IHByaW50cyBvdXQgYW55Ci1jb3JydXB0aW9uIGl0IGZpbmRzIChtaXNzaW5nIG9yIGJhZCBvYmplY3RzKSwgYW5kIGlmIHlvdSB1c2UgdGhlCi0nLS11bnJlYWNoYWJsZScgZmxhZyBpdCB3aWxsIGFsc28gcHJpbnQgb3V0IG9iamVjdHMgdGhhdCBleGlzdCBidXQKLXRoYXQgYXJlbid0IHJlYWRhYmxlIGZyb20gYW55IG9mIHRoZSBzcGVjaWZpZWQgaGVhZCBub2Rlcy4KLQotU28gZm9yIGV4YW1wbGUKLQotCWdpdC1mc2NrLW9iamVjdHMgLS11bnJlYWNoYWJsZSBIRUFEICQoY2F0IC5naXQvcmVmcy9oZWFkcy8qKQotCi13aWxsIGRvIHF1aXRlIGEgX2xvdF8gb2YgdmVyaWZpY2F0aW9uIG9uIHRoZSB0cmVlLiBUaGVyZSBhcmUgYSBmZXcKLWV4dHJhIHZhbGlkaXR5IHRlc3RzIHRvIGJlIGFkZGVkIChtYWtlIHN1cmUgdGhhdCB0cmVlIG9iamVjdHMgYXJlCi1zb3J0ZWQgcHJvcGVybHkgZXRjKSwgYnV0IG9uIHRoZSB3aG9sZSBpZiAiZ2l0LWZzY2stb2JqZWN0cyIgaXMgaGFwcHksIHlvdQotZG8gaGF2ZSBhIHZhbGlkIHRyZWUuCi0KLUFueSBjb3JydXB0IG9iamVjdHMgeW91IHdpbGwgaGF2ZSB0byBmaW5kIGluIGJhY2t1cHMgb3Igb3RoZXIgYXJjaGl2ZXMKLShpLmUuLCB5b3UgY2FuIGp1c3QgcmVtb3ZlIHRoZW0gYW5kIGRvIGFuICJyc3luYyIgd2l0aCBzb21lIG90aGVyIHNpdGUgaW4KLXRoZSBob3BlcyB0aGF0IHNvbWVib2R5IGVsc2UgaGFzIHRoZSBvYmplY3QgeW91IGhhdmUgY29ycnVwdGVkKS4KLQotT2YgY291cnNlLCAidmFsaWQgdHJlZSIgZG9lc24ndCBtZWFuIHRoYXQgaXQgd2Fzbid0IGdlbmVyYXRlZCBieSBzb21lCi1ldmlsIHBlcnNvbiwgYW5kIHRoZSBlbmQgcmVzdWx0IG1pZ2h0IGJlIGNyYXAuIGdpdCBpcyBhIHJldmlzaW9uCi10cmFja2luZyBzeXN0ZW0sIG5vdCBhIHF1YWxpdHkgYXNzdXJhbmNlIHN5c3RlbSA7KQotCi1FeHRyYWN0ZWQgRGlhZ25vc3RpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1leHBlY3QgZGFuZ2xpbmcgY29tbWl0cyAtIHBvdGVudGlhbCBoZWFkcyAtIGR1ZSB0byBsYWNrIG9mIGhlYWQgaW5mb3JtYXRpb246OgotCVlvdSBoYXZlbid0IHNwZWNpZmllZCBhbnkgbm9kZXMgYXMgaGVhZHMgc28gaXQgd29uJ3QgYmUKLQlwb3NzaWJsZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdW4tcGFyZW50ZWQgY29tbWl0cyBhbmQKLQlyb290IG5vZGVzLgotCi1taXNzaW5nIHNoYTEgZGlyZWN0b3J5ICc8ZGlyPic6OgotCVRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc2hhMSBvYmplY3RzIGlzIG1pc3NpbmcuCi0KLXVucmVhY2hhYmxlIDx0eXBlPiA8b2JqZWN0Pjo6Ci0JVGhlIDx0eXBlPiBvYmplY3QgPG9iamVjdD4sIGlzbid0IGFjdHVhbGx5IHJlZmVycmVkIHRvIGRpcmVjdGx5Ci0Jb3IgaW5kaXJlY3RseSBpbiBhbnkgb2YgdGhlIHRyZWVzIG9yIGNvbW1pdHMgc2Vlbi4gVGhpcyBjYW4KLQltZWFuIHRoYXQgdGhlcmUncyBhbm90aGVyIHJvb3Qgbm9kZSB0aGF0IHlvdSdyZSBub3Qgc3BlY2lmeWluZwotCW9yIHRoYXQgdGhlIHRyZWUgaXMgY29ycnVwdC4gSWYgeW91IGhhdmVuJ3QgbWlzc2VkIGEgcm9vdCBub2RlCi0JdGhlbiB5b3UgbWlnaHQgYXMgd2VsbCBkZWxldGUgdW5yZWFjaGFibGUgbm9kZXMgc2luY2UgdGhleQotCWNhbid0IGJlIHVzZWQuCi0KLW1pc3NpbmcgPHR5cGU+IDxvYmplY3Q+OjoKLQlUaGUgPHR5cGU+IG9iamVjdCA8b2JqZWN0PiwgaXMgcmVmZXJyZWQgdG8gYnV0IGlzbid0IHByZXNlbnQgaW4KLQl0aGUgZGF0YWJhc2UuCi0KLWRhbmdsaW5nIDx0eXBlPiA8b2JqZWN0Pjo6Ci0JVGhlIDx0eXBlPiBvYmplY3QgPG9iamVjdD4sIGlzIHByZXNlbnQgaW4gdGhlIGRhdGFiYXNlIGJ1dCBuZXZlcgotCSdkaXJlY3RseScgdXNlZC4gQSBkYW5nbGluZyBjb21taXQgY291bGQgYmUgYSByb290IG5vZGUuCi0KLXdhcm5pbmc6IGdpdC1mc2NrLW9iamVjdHM6IHRyZWUgPHRyZWU+IGhhcyBmdWxsIHBhdGhuYW1lcyBpbiBpdDo6Ci0JQW5kIGl0IHNob3VsZG4ndC4uLgotCi1zaGExIG1pc21hdGNoIDxvYmplY3Q+OjoKLQlUaGUgZGF0YWJhc2UgaGFzIGFuIG9iamVjdCB3aG8ncyBzaGExIGRvZXNuJ3QgbWF0Y2ggdGhlCi0JZGF0YWJhc2UgdmFsdWUuCi0JVGhpcyBpbmRpY2F0ZXMgYSBzZXJpb3VzIGRhdGEgaW50ZWdyaXR5IHByb2JsZW0uCi0KLUVudmlyb25tZW50IFZhcmlhYmxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUdJVF9PQkpFQ1RfRElSRUNUT1JZOjoKLQl1c2VkIHRvIHNwZWNpZnkgdGhlIG9iamVjdCBkYXRhYmFzZSByb290ICh1c3VhbGx5ICRHSVRfRElSL29iamVjdHMpCi0KLUdJVF9JTkRFWF9GSUxFOjoKLQl1c2VkIHRvIHNwZWNpZnkgdGhlIGluZGV4IGZpbGUgb2YgdGhlIGluZGV4Ci0KLUdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTOjoKLQl1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBvYmplY3QgZGF0YWJhc2Ugcm9vdHMgKHVzdWFsbHkgdW5zZXQpCi0KLUF1dGhvcgotLS0tLS0tCi1Xcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLS0KLURvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCi0KLUdJVAotLS0tCi1QYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQotCitUaGlzIGlzIGEgc3lub255bSBmb3IgZ2l0bGluazpnaXQtZnNja1sxXS4gIFBsZWFzZSByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gb2YgdGhhdCBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZnNjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTgwMDlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZnNjay50eHQKQEAgLTAsMCArMSwxMzkgQEAKK2dpdC1mc2NrKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZnNjayAtIFZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC1mc2NrJyBbLS10YWdzXSBbLS1yb290XSBbLS11bnJlYWNoYWJsZV0gWy0tY2FjaGVdCisJCSBbLS1mdWxsXSBbLS1zdHJpY3RdIFs8b2JqZWN0PipdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlLgorCitPUFRJT05TCistLS0tLS0tCis8b2JqZWN0Pjo6CisJQW4gb2JqZWN0IHRvIHRyZWF0IGFzIHRoZSBoZWFkIG9mIGFuIHVucmVhY2hhYmlsaXR5IHRyYWNlLgorKworSWYgbm8gb2JqZWN0cyBhcmUgZ2l2ZW4sIGdpdC1mc2NrIGRlZmF1bHRzIHRvIHVzaW5nIHRoZQoraW5kZXggZmlsZSBhbmQgYWxsIFNIQTEgcmVmZXJlbmNlcyBpbiAuZ2l0L3JlZnMvKiBhcyBoZWFkcy4KKworLS11bnJlYWNoYWJsZTo6CisJUHJpbnQgb3V0IG9iamVjdHMgdGhhdCBleGlzdCBidXQgdGhhdCBhcmVuJ3QgcmVhZGFibGUgZnJvbSBhbnkKKwlvZiB0aGUgcmVmZXJlbmNlIG5vZGVzLgorCistLXJvb3Q6OgorCVJlcG9ydCByb290IG5vZGVzLgorCistLXRhZ3M6OgorCVJlcG9ydCB0YWdzLgorCistLWNhY2hlOjoKKwlDb25zaWRlciBhbnkgb2JqZWN0IHJlY29yZGVkIGluIHRoZSBpbmRleCBhbHNvIGFzIGEgaGVhZCBub2RlIGZvcgorCWFuIHVucmVhY2hhYmlsaXR5IHRyYWNlLgorCistLWZ1bGw6OgorCUNoZWNrIG5vdCBqdXN0IG9iamVjdHMgaW4gR0lUX09CSkVDVF9ESVJFQ1RPUlkKKwkoJEdJVF9ESVIvb2JqZWN0cyksIGJ1dCBhbHNvIHRoZSBvbmVzIGZvdW5kIGluIGFsdGVybmF0ZQorCW9iamVjdCBwb29scyBsaXN0ZWQgaW4gR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMKKwlvciAkR0lUX0RJUi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcywKKwlhbmQgaW4gcGFja2VkIGdpdCBhcmNoaXZlcyBmb3VuZCBpbiAkR0lUX0RJUi9vYmplY3RzL3BhY2sKKwlhbmQgY29ycmVzcG9uZGluZyBwYWNrIHN1YmRpcmVjdG9yaWVzIGluIGFsdGVybmF0ZQorCW9iamVjdCBwb29scy4KKworLS1zdHJpY3Q6OgorCUVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZywgbmFtZWx5IHRvIGNhdGNoIGEgZmlsZSBtb2RlCisJcmVjb3JkZWQgd2l0aCBnK3cgYml0IHNldCwgd2hpY2ggd2FzIGNyZWF0ZWQgYnkgb2xkZXIKKwl2ZXJzaW9ucyBvZiBnaXQuICBFeGlzdGluZyByZXBvc2l0b3JpZXMsIGluY2x1ZGluZyB0aGUKKwlMaW51eCBrZXJuZWwsIGdpdCBpdHNlbGYsIGFuZCBzcGFyc2UgcmVwb3NpdG9yeSBoYXZlIG9sZAorCW9iamVjdHMgdGhhdCB0cmlnZ2VycyB0aGlzIGNoZWNrLCBidXQgaXQgaXMgcmVjb21tZW5kZWQKKwl0byBjaGVjayBuZXcgcHJvamVjdHMgd2l0aCB0aGlzIGZsYWcuCisKK0l0IHRlc3RzIFNIQTEgYW5kIGdlbmVyYWwgb2JqZWN0IHNhbml0eSwgYW5kIGl0IGRvZXMgZnVsbCB0cmFja2luZyBvZgordGhlIHJlc3VsdGluZyByZWFjaGFiaWxpdHkgYW5kIGV2ZXJ5dGhpbmcgZWxzZS4gSXQgcHJpbnRzIG91dCBhbnkKK2NvcnJ1cHRpb24gaXQgZmluZHMgKG1pc3Npbmcgb3IgYmFkIG9iamVjdHMpLCBhbmQgaWYgeW91IHVzZSB0aGUKKyctLXVucmVhY2hhYmxlJyBmbGFnIGl0IHdpbGwgYWxzbyBwcmludCBvdXQgb2JqZWN0cyB0aGF0IGV4aXN0IGJ1dAordGhhdCBhcmVuJ3QgcmVhZGFibGUgZnJvbSBhbnkgb2YgdGhlIHNwZWNpZmllZCBoZWFkIG5vZGVzLgorCitTbyBmb3IgZXhhbXBsZQorCisJZ2l0LWZzY2sgLS11bnJlYWNoYWJsZSBIRUFEICQoY2F0IC5naXQvcmVmcy9oZWFkcy8qKQorCit3aWxsIGRvIHF1aXRlIGEgX2xvdF8gb2YgdmVyaWZpY2F0aW9uIG9uIHRoZSB0cmVlLiBUaGVyZSBhcmUgYSBmZXcKK2V4dHJhIHZhbGlkaXR5IHRlc3RzIHRvIGJlIGFkZGVkIChtYWtlIHN1cmUgdGhhdCB0cmVlIG9iamVjdHMgYXJlCitzb3J0ZWQgcHJvcGVybHkgZXRjKSwgYnV0IG9uIHRoZSB3aG9sZSBpZiAiZ2l0LWZzY2siIGlzIGhhcHB5LCB5b3UKK2RvIGhhdmUgYSB2YWxpZCB0cmVlLgorCitBbnkgY29ycnVwdCBvYmplY3RzIHlvdSB3aWxsIGhhdmUgdG8gZmluZCBpbiBiYWNrdXBzIG9yIG90aGVyIGFyY2hpdmVzCisoaS5lLiwgeW91IGNhbiBqdXN0IHJlbW92ZSB0aGVtIGFuZCBkbyBhbiAicnN5bmMiIHdpdGggc29tZSBvdGhlciBzaXRlIGluCit0aGUgaG9wZXMgdGhhdCBzb21lYm9keSBlbHNlIGhhcyB0aGUgb2JqZWN0IHlvdSBoYXZlIGNvcnJ1cHRlZCkuCisKK09mIGNvdXJzZSwgInZhbGlkIHRyZWUiIGRvZXNuJ3QgbWVhbiB0aGF0IGl0IHdhc24ndCBnZW5lcmF0ZWQgYnkgc29tZQorZXZpbCBwZXJzb24sIGFuZCB0aGUgZW5kIHJlc3VsdCBtaWdodCBiZSBjcmFwLiBnaXQgaXMgYSByZXZpc2lvbgordHJhY2tpbmcgc3lzdGVtLCBub3QgYSBxdWFsaXR5IGFzc3VyYW5jZSBzeXN0ZW0gOykKKworRXh0cmFjdGVkIERpYWdub3N0aWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXhwZWN0IGRhbmdsaW5nIGNvbW1pdHMgLSBwb3RlbnRpYWwgaGVhZHMgLSBkdWUgdG8gbGFjayBvZiBoZWFkIGluZm9ybWF0aW9uOjoKKwlZb3UgaGF2ZW4ndCBzcGVjaWZpZWQgYW55IG5vZGVzIGFzIGhlYWRzIHNvIGl0IHdvbid0IGJlCisJcG9zc2libGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHVuLXBhcmVudGVkIGNvbW1pdHMgYW5kCisJcm9vdCBub2Rlcy4KKworbWlzc2luZyBzaGExIGRpcmVjdG9yeSAnPGRpcj4nOjoKKwlUaGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIHNoYTEgb2JqZWN0cyBpcyBtaXNzaW5nLgorCit1bnJlYWNoYWJsZSA8dHlwZT4gPG9iamVjdD46OgorCVRoZSA8dHlwZT4gb2JqZWN0IDxvYmplY3Q+LCBpc24ndCBhY3R1YWxseSByZWZlcnJlZCB0byBkaXJlY3RseQorCW9yIGluZGlyZWN0bHkgaW4gYW55IG9mIHRoZSB0cmVlcyBvciBjb21taXRzIHNlZW4uIFRoaXMgY2FuCisJbWVhbiB0aGF0IHRoZXJlJ3MgYW5vdGhlciByb290IG5vZGUgdGhhdCB5b3UncmUgbm90IHNwZWNpZnlpbmcKKwlvciB0aGF0IHRoZSB0cmVlIGlzIGNvcnJ1cHQuIElmIHlvdSBoYXZlbid0IG1pc3NlZCBhIHJvb3Qgbm9kZQorCXRoZW4geW91IG1pZ2h0IGFzIHdlbGwgZGVsZXRlIHVucmVhY2hhYmxlIG5vZGVzIHNpbmNlIHRoZXkKKwljYW4ndCBiZSB1c2VkLgorCittaXNzaW5nIDx0eXBlPiA8b2JqZWN0Pjo6CisJVGhlIDx0eXBlPiBvYmplY3QgPG9iamVjdD4sIGlzIHJlZmVycmVkIHRvIGJ1dCBpc24ndCBwcmVzZW50IGluCisJdGhlIGRhdGFiYXNlLgorCitkYW5nbGluZyA8dHlwZT4gPG9iamVjdD46OgorCVRoZSA8dHlwZT4gb2JqZWN0IDxvYmplY3Q+LCBpcyBwcmVzZW50IGluIHRoZSBkYXRhYmFzZSBidXQgbmV2ZXIKKwknZGlyZWN0bHknIHVzZWQuIEEgZGFuZ2xpbmcgY29tbWl0IGNvdWxkIGJlIGEgcm9vdCBub2RlLgorCit3YXJuaW5nOiBnaXQtZnNjazogdHJlZSA8dHJlZT4gaGFzIGZ1bGwgcGF0aG5hbWVzIGluIGl0OjoKKwlBbmQgaXQgc2hvdWxkbid0Li4uCisKK3NoYTEgbWlzbWF0Y2ggPG9iamVjdD46OgorCVRoZSBkYXRhYmFzZSBoYXMgYW4gb2JqZWN0IHdobydzIHNoYTEgZG9lc24ndCBtYXRjaCB0aGUKKwlkYXRhYmFzZSB2YWx1ZS4KKwlUaGlzIGluZGljYXRlcyBhIHNlcmlvdXMgZGF0YSBpbnRlZ3JpdHkgcHJvYmxlbS4KKworRW52aXJvbm1lbnQgVmFyaWFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR0lUX09CSkVDVF9ESVJFQ1RPUlk6OgorCXVzZWQgdG8gc3BlY2lmeSB0aGUgb2JqZWN0IGRhdGFiYXNlIHJvb3QgKHVzdWFsbHkgJEdJVF9ESVIvb2JqZWN0cykKKworR0lUX0lOREVYX0ZJTEU6OgorCXVzZWQgdG8gc3BlY2lmeSB0aGUgaW5kZXggZmlsZSBvZiB0aGUgaW5kZXgKKworR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVM6OgorCXVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIG9iamVjdCBkYXRhYmFzZSByb290cyAodXN1YWxseSB1bnNldCkKKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dAppbmRleCA3M2Q3OGMxLi5lMzc3NThhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0CkBAIC04LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtZ2MnCisnZ2l0LWdjJyBbLS1wcnVuZV0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yMSw2ICsyMSwyMSBAQAogZWFjaCByZXBvc2l0b3J5IHRvIG1haW50YWluIGdvb2QgZGlzayBzcGFjZSB1dGlsaXphdGlvbiBhbmQgZ29vZAogb3BlcmF0aW5nIHBlcmZvcm1hbmNlLgogCitPUFRJT05TCistLS0tLS0tCisKKy0tcHJ1bmU6OgorCVVzdWFsbHkgYGdpdC1nY2AgcGFja3MgcmVmcywgZXhwaXJlcyBvbGQgcmVmbG9nIGVudHJpZXMsCisJcGFja3MgbG9vc2Ugb2JqZWN0cywKKwlhbmQgcmVtb3ZlcyBvbGQgJ3JlcmVyZScgcmVjb3Jkcy4gIFJlbW92YWwKKwlvZiB1bnJlZmVyZW5jZWQgbG9vc2Ugb2JqZWN0cyBpcyBhbiB1bnNhZmUgb3BlcmF0aW9uCisJd2hpbGUgb3RoZXIgZ2l0IG9wZXJhdGlvbnMgYXJlIGluIHByb2dyZXNzLCBzbyBpdCBpcyBub3QKKwlkb25lIGJ5IGRlZmF1bHQuICBQYXNzIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IGl0LCBhbmQgb25seQorCXdoZW4geW91IGtub3cgbm9ib2R5IGVsc2UgaXMgY3JlYXRpbmcgbmV3IG9iamVjdHMgaW4gdGhlCisJcmVwb3NpdG9yeSBhdCB0aGUgc2FtZSB0aW1lIChlLmcuIG5ldmVyIHVzZSB0aGlzIG9wdGlvbgorCWluIGEgY3JvbiBzY3JpcHQpLgorCisKIENvbmZpZ3VyYXRpb24KIC0tLS0tLS0tLS0tLS0KIApAQCAtMzUsNyArNTAsNyBAQAogYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IGJyYW5jaCBzaG91bGQgcmVtYWluIGF2YWlsYWJsZSBpbgogdGhpcyByZXBvc2l0b3J5LiAgVGhlc2UgdHlwZXMgb2YgZW50cmllcyBhcmUgZ2VuZXJhbGx5IGNyZWF0ZWQgYXMKIGEgcmVzdWx0IG9mIHVzaW5nIGBnaXQgY29tbWl0IFwtLWFtZW5kYCBvciBgZ2l0IHJlYmFzZWAgYW5kIGFyZSB0aGUKLWNvbW1pdHMgcHJpb3IgdG8gdGhlIGFtZW5kIG9yIHJlYmFzZSBvY2N1cmluZy4gIFNpbmNlIHRoZXNlIGNoYW5nZXMKK2NvbW1pdHMgcHJpb3IgdG8gdGhlIGFtZW5kIG9yIHJlYmFzZSBvY2N1cnJpbmcuICBTaW5jZSB0aGVzZSBjaGFuZ2VzCiBhcmUgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgcHJvamVjdCBtb3N0IHVzZXJzIHdpbGwgd2FudCB0byBleHBpcmUKIHRoZW0gc29vbmVyLiAgVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gJzMwIGRheXMnLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CmluZGV4IGJmYmVjZTkuLjAxNDBjOGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CkBAIC05MSw3ICs5MSw3IEBACiAJY29tYmluZWQgYnkgJ29yJy4KIAogLS1hbmQgfCAtLW9yIHwgLS1ub3QgfCAoIHwgKTo6Ci0JU3BlY2lmeSBob3cgbXVsdGlwbGUgcGF0dGVybnMgYXJlIGNvbWJpbmVkIHVzaW5nIGJvb2xlYW4KKwlTcGVjaWZ5IGhvdyBtdWx0aXBsZSBwYXR0ZXJucyBhcmUgY29tYmluZWQgdXNpbmcgQm9vbGVhbgogCWV4cHJlc3Npb25zLiAgYC0tb3JgIGlzIHRoZSBkZWZhdWx0IG9wZXJhdG9yLiAgYC0tYW5kYCBoYXMKIAloaWdoZXIgcHJlY2VkZW5jZSB0aGFuIGAtLW9yYC4gIGAtZWAgaGFzIHRvIGJlIHVzZWQgZm9yIGFsbAogCXBhdHRlcm5zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0CmluZGV4IDA0ZThkMDAuLjVlZGMzNmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1oYXNoLW9iamVjdC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1oYXNoLW9iamVjdCAtIENvbXB1dGVzIG9iamVjdCBJRCBhbmQgb3B0aW9uYWxseSBjcmVhdGVzIGEgYmxvYiBmcm9tIGEgZmlsZQorZ2l0LWhhc2gtb2JqZWN0IC0gQ29tcHV0ZSBvYmplY3QgSUQgYW5kIG9wdGlvbmFsbHkgY3JlYXRlcyBhIGJsb2IgZnJvbSBhIGZpbGUKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dAppbmRleCAzZDUwODA5Li43ZGMyZGYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWh0dHAtZmV0Y2ggLSBkb3dubG9hZHMgYSByZW1vdGUgZ2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAKK2dpdC1odHRwLWZldGNoIC0gRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBnaXQgcmVwb3NpdG9yeSB2aWEgSFRUUAogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dAppbmRleCBjMjQ4NWM2Li40YjRhNDYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLXB1c2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1odHRwLXB1c2ggLSBQdXNoIG1pc3Npbmcgb2JqZWN0cyB1c2luZyBIVFRQL0RBVgorZ2l0LWh0dHAtcHVzaCAtIFB1c2ggb2JqZWN0cyBvdmVyIEhUVFAvREFWIHRvIGFub3RoZXIgcmVwb3NpdG9yeQogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0CmluZGV4IDU5NmI1NjcuLjFiNjRkM2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtaW5pdCAtIENyZWF0ZXMgYW4gZW1wdHkgZ2l0IHJlcG9zaXRvcnkKK2dpdC1pbml0IC0gQ3JlYXRlIGFuIGVtcHR5IGdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0CmluZGV4IDdkZDM5M2IuLjUyYTZhYTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbnN0YXdlYi50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1pbnN0YXdlYiAtIGluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViCitnaXQtaW5zdGF3ZWIgLSBJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYgogCiBTWU5PUFNJUwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxvY2FsLWZldGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvY2FsLWZldGNoLnR4dAppbmRleCAyZmJkZmUwLi4yMjA0OGQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1sb2NhbC1mZXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbG9jYWwtZmV0Y2gudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtbG9jYWwtZmV0Y2ggLSBEdXBsaWNhdGVzIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgb24gYSBsb2NhbCBzeXN0ZW0KK2dpdC1sb2NhbC1mZXRjaCAtIER1cGxpY2F0ZSBhbm90aGVyIGdpdCByZXBvc2l0b3J5IG9uIGEgbG9jYWwgc3lzdGVtCiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CmluZGV4IGU5Zjc0NmIuLmI4MDI5NDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dApAQCAtMjcsMTMgKzI3LDE2IEBACiAKIGluY2x1ZGU6OnByZXR0eS1mb3JtYXRzLnR4dFtdCiAKLS0tbWF4LWNvdW50PTxuPjo6CistPG4+OjoKIAlMaW1pdHMgdGhlIG51bWJlciBvZiBjb21taXRzIHRvIHNob3cuCiAKIDxzaW5jZT4uLjx1bnRpbD46OgogCVNob3cgb25seSBjb21taXRzIGJldHdlZW4gdGhlIG5hbWVkIHR3byBjb21taXRzLiAgV2hlbgogCWVpdGhlciA8c2luY2U+IG9yIDx1bnRpbD4gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8KIAlgSEVBRGAsIGkuZS4gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2guCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgPHNpbmNlPgorCWFuZCA8dW50aWw+LCBzZWUgIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluCisJZ2l0bGluazpnaXQtcmV2LXBhcnNlWzFdLgogCiAtcDo6CiAJU2hvdyB0aGUgY2hhbmdlIHRoZSBjb21taXQgaW50cm9kdWNlcyBpbiBhIHBhdGNoIGZvcm0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKaW5kZXggODUyMGI5Ny4uNzllMGI3YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LWxzLWZpbGVzIC0gSW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4L3dvcmtpbmcgZGlyZWN0b3J5CitnaXQtbHMtZmlsZXMgLSBTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZQogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dAppbmRleCBjOGE0YzVhLi5jMjU0MDA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQKQEAgLTI5LDcgKzI5LDcgQEAKIC11IDxleGVjPiwgLS11cGxvYWQtcGFjaz08ZXhlYz46OgogCVNwZWNpZnkgdGhlIGZ1bGwgcGF0aCBvZiBnaXRsaW5rOmdpdC11cGxvYWQtcGFja1sxXSBvbiB0aGUgcmVtb3RlCiAJaG9zdC4gVGhpcyBhbGxvd3MgbGlzdGluZyByZWZlcmVuY2VzIGZyb20gcmVwb3NpdG9yaWVzIGFjY2Vzc2VkIHZpYQotCVNTSCBhbmQgd2hlcmUgdGhlIFNTSCBkZWFtb24gZG9lcyBub3QgdXNlIHRoZSBQQVRIIGNvbmZpZ3VyZWQgYnkgdGhlCisJU1NIIGFuZCB3aGVyZSB0aGUgU1NIIGRhZW1vbiBkb2VzIG5vdCB1c2UgdGhlIFBBVEggY29uZmlndXJlZCBieSB0aGUKIAl1c2VyLiBBbHNvIHNlZSB0aGUgJy0tZXhlYycgb3B0aW9uIGZvciBnaXRsaW5rOmdpdC1wZWVrLXJlbW90ZVsxXS4KIAogPHJlcG9zaXRvcnk+OjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKaW5kZXggZjI4M2JhYy4uNzg5OTM5NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1scy10cmVlIC0gTGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QKK2dpdC1scy10cmVlIC0gTGlzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdAogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsaW5mby50eHQKaW5kZXggNTA4OGJiZS4uYmExODEzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LW1haWxpbmZvIC0gRXh0cmFjdHMgcGF0Y2ggZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZQorZ2l0LW1haWxpbmZvIC0gRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZQogCiAKIFNZTk9QU0lTCkBAIC0xOCw3ICsxOCw3IEBACiA8cGF0Y2g+IGZpbGUuICBUaGUgYXV0aG9yIG5hbWUsIGUtbWFpbCBhbmQgZS1tYWlsIHN1YmplY3QgYXJlCiB3cml0dGVuIG91dCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHRvIGJlIHVzZWQgYnkgZ2l0LWFwcGx5cGF0Y2gKIHRvIGNyZWF0ZSBhIGNvbW1pdC4gIEl0IGlzIHVzdWFsbHkgbm90IG5lY2Vzc2FyeSB0byB1c2UgdGhpcwotY29tbWFuZCBkaXJlY3RseS4KK2NvbW1hbmQgZGlyZWN0bHkuICBTZWUgZ2l0bGluazpnaXQtYW1bMV0gaW5zdGVhZC4KIAogCiBPUFRJT05TCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbHNwbGl0LnR4dAppbmRleCA1YTE3ODAxLi5jMTFkNmE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1tYWlsc3BsaXQgLSBUb3RhbGx5IGJyYWluZGFtYWdlZCBtYm94IHNwbGl0dGVyIHByb2dyYW0KK2dpdC1tYWlsc3BsaXQgLSBTaW1wbGUgVU5JWCBtYm94IHNwbGl0dGVyIHByb2dyYW0KIAogU1lOT1BTSVMKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1iYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CmluZGV4IDYwOTliZTIuLjMxOTBhZWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtbWVyZ2UtYmFzZSAtIEZpbmRzIGFzIGdvb2QgYSBjb21tb24gYW5jZXN0b3IgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UKK2dpdC1tZXJnZS1iYXNlIC0gRmluZCBhcyBnb29kIGNvbW1vbiBhbmNlc3RvcnMgYXMgcG9zc2libGUgZm9yIGEgbWVyZ2UKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dAppbmRleCAyOWQzZmFhLi4zMTg4MmFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1maWxlLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LW1lcmdlLWZpbGUgLSB0aHJlZS13YXkgZmlsZSBtZXJnZQorZ2l0LW1lcmdlLWZpbGUgLSBSdW4gYSB0aHJlZS13YXkgZmlsZSBtZXJnZQogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQKaW5kZXggMGNmNTA1ZS4uYjhlZTFmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LW1lcmdlLWluZGV4IC0gUnVucyBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmcKK2dpdC1tZXJnZS1pbmRleCAtIFJ1biBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmcKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0CmluZGV4IDg2YWFkMzcuLmY4MGFiM2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLW9uZS1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1tZXJnZS1vbmUtZmlsZSAtIFRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCAiZ2l0LW1lcmdlLWluZGV4IgorZ2l0LW1lcmdlLW9uZS1maWxlIC0gVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleAogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKaW5kZXggMGY3OTY2NS4uM2MwOGE2ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LW1lcmdlIC0gR3JhbmQgVW5pZmllZCBNZXJnZSBEcml2ZXIKK2dpdC1tZXJnZSAtIEpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyCiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dAppbmRleCAyMDdjNDNhLi42NzU2Yjc2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbXYudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtbXYgLSBNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGRpcmVjdG9yeSBvciBzeW1saW5rCitnaXQtbXYgLSBNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0CmluZGV4IDdkNTRiMTcuLjk0YmJlYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVkdW5kYW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZHVuZGFudC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1wYWNrLXJlZHVuZGFudCAtIFByb2dyYW0gdXNlZCB0byBmaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzCitnaXQtcGFjay1yZWR1bmRhbnQgLSBGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzCiAKIAogU1lOT1BTSVMKQEAgLTIxLDcgKzIxLDcgQEAKIGZvbGxvd2luZyBjb21tYW5kIHVzZWZ1bCB3aGVuIHdhbnRpbmcgdG8gcmVtb3ZlIHBhY2tzIHdoaWNoIGNvbnRhaW4gdW5yZWFjaGFibGUKIG9iamVjdHMuCiAKLWdpdC1mc2NrLW9iamVjdHMgLS1mdWxsIC0tdW5yZWFjaGFibGUgfCBjdXQgLWQgJyAnIC1mMyB8IFwKK2dpdC1mc2NrIC0tZnVsbCAtLXVucmVhY2hhYmxlIHwgY3V0IC1kICcgJyAtZjMgfCBcCiBnaXQtcGFjay1yZWR1bmRhbnQgLS1hbGwgfCB4YXJncyBybQogCiBPUFRJT05TCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dAppbmRleCA0NjQyNjlmLi5hMjBmYzdkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVmcy50eHQKQEAgLTI5LDEyICsyOSwyMyBAQAogU3Vic2VxdWVudCB1cGRhdGVzIHRvIGJyYW5jaGVzIGFsd2F5cyBjcmVhdGVzIG5ldyBmaWxlIHVuZGVyCiBgJEdJVF9ESVIvcmVmc2AgaGllcmFyY2h5LgogCitBIHJlY29tbWVuZGVkIHByYWN0aWNlIHRvIGRlYWwgd2l0aCBhIHJlcG9zaXRvcnkgd2l0aCB0b28gbWFueQorcmVmcyBpcyB0byBwYWNrIGl0cyByZWZzIHdpdGggYC0tYWxsIC0tcHJ1bmVgIG9uY2UsIGFuZAorb2NjYXNpb25hbGx5IHJ1biBgZ2l0LXBhY2stcmVmcyBcLS1wcnVuZWAuICBUYWdzIGFyZSBieQorZGVmaW5pdGlvbiBzdGF0aW9uYXJ5IGFuZCBhcmUgbm90IGV4cGVjdGVkIHRvIGNoYW5nZS4gIEJyYW5jaAoraGVhZHMgd2lsbCBiZSBwYWNrZWQgd2l0aCB0aGUgaW5pdGlhbCBgcGFjay1yZWZzIC0tYWxsYCwgYnV0Citvbmx5IHRoZSBjdXJyZW50bHkgYWN0aXZlIGJyYW5jaCBoZWFkcyB3aWxsIGJlY29tZSB1bnBhY2tlZCwKK2FuZCBuZXh0IGBwYWNrLXJlZnNgICh3aXRob3V0IGAtLWFsbGApIHdpbGwgbGVhdmUgdGhlbQordW5wYWNrZWQuCisKKwogT1BUSU9OUwogLS0tLS0tLQogCiBcLS1hbGw6OgogCi1UaGUgY29tbWFuZCBieSBkZWZhdWx0IHBhY2tzIGFsbCB0YWdzIGFuZCBsZWF2ZXMgYnJhbmNoIHRpcHMKK1RoZSBjb21tYW5kIGJ5IGRlZmF1bHQgcGFja3MgYWxsIHRhZ3MgYW5kIHJlZnMgdGhhdCBhcmUgYWxyZWFkeQorcGFja2VkLCBhbmQgbGVhdmVzIG90aGVyIHJlZnMKIGFsb25lLiAgVGhpcyBpcyBiZWNhdXNlIGJyYW5jaGVzIGFyZSBleHBlY3RlZCB0byBiZSBhY3RpdmVseQogZGV2ZWxvcGVkIGFuZCBwYWNraW5nIHRoZWlyIHRpcHMgZG9lcyBub3QgaGVscCBwZXJmb3JtYW5jZS4KIFRoaXMgb3B0aW9uIGNhdXNlcyBicmFuY2ggdGlwcyB0byBiZSBwYWNrZWQgYXMgd2VsbC4gIFVzZWZ1bCBmb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0CmluZGV4IGZjMjdhZmUuLjExYjFmNGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXBhcnNlLXJlbW90ZSAtIFJvdXRpbmVzIHRvIGhlbHAgcGFyc2luZyAkR0lUX0RJUi9yZW1vdGVzLworZ2l0LXBhcnNlLXJlbW90ZSAtIFJvdXRpbmVzIHRvIGhlbHAgcGFyc2luZyByZW1vdGUgcmVwb3NpdG9yeSBhY2Nlc3MgcGFyYW1ldGVycwogCiAKIFNZTk9QU0lTCkBAIC0xNCw3ICsxNCw4IEBACiAtLS0tLS0tLS0tLQogVGhpcyBzY3JpcHQgaXMgaW5jbHVkZWQgaW4gdmFyaW91cyBzY3JpcHRzIHRvIHN1cHBseQogcm91dGluZXMgdG8gcGFyc2UgZmlsZXMgdW5kZXIgJEdJVF9ESVIvcmVtb3Rlcy8gYW5kCi0kR0lUX0RJUi9icmFuY2hlcy8uCiskR0lUX0RJUi9icmFuY2hlcy8gYW5kIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgYXJlIHJlbGF0ZWQKK3RvIGZldGNoaW5nLCBwdWxsaW5nIGFuZCBwdXNoaW5nLgogCiBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYXJlOgogCkBAIC0yNSw3ICsyNiw4IEBACiAJKGUuZy4gYHJlZnMvaGVhZHMvZm9vYCkuICBXaGVuIGA8cmVmc3BlYz4uLi5gIGlzIGVtcHR5CiAJdGhlIHJldHVybmVkIGxpc3Qgb2YgcmVmcyBjb25zaXN0cyBvZiB0aGUgZGVmYXVsdHMKIAlmb3IgdGhlIGdpdmVuIGA8cmVwbz5gLCBpZiBzcGVjaWZpZWQgaW4KLQlgJEdJVF9ESVIvcmVtb3Rlcy9gIG9yIGAkR0lUX0RJUi9icmFuY2hlcy9gLgorCWAkR0lUX0RJUi9yZW1vdGVzL2AsIGAkR0lUX0RJUi9icmFuY2hlcy9gLCBvciBgcmVtb3RlLiouZmV0Y2hgCisJY29uZmlndXJhdGlvbi4KIAogZ2V0X3JlbW90ZV9yZWZzX2Zvcl9wdXNoOjoKIAlHaXZlbiB0aGUgbGlzdCBvZiB1c2VyLXN1cHBsaWVkIGA8cmVwbz4gPHJlZnNwZWM+Li4uYCwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dAppbmRleCA1Mzg5MDk3Li5hN2U5ZmQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtcGF0Y2gtaWQgLSBHZW5lcmF0ZSBhIHBhdGNoIElECitnaXQtcGF0Y2gtaWQgLSBDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaAogCiBTWU5PUFNJUwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dAppbmRleCBhMDAwNjBjLi43NGYzN2JkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wZWVrLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGVlay1yZW1vdGUudHh0CkBAIC0zLDEyICszLDEyIEBACiAKIE5BTUUKIC0tLS0KLWdpdC1wZWVrLXJlbW90ZSAtIExpc3RzIHRoZSByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkKK2dpdC1wZWVrLXJlbW90ZSAtIExpc3QgdGhlIHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgcmVwb3NpdG9yeQogCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1wZWVrLXJlbW90ZScgWy0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPl0gWzxob3N0PjpdPGRpcmVjdG9yeT4KKydnaXQtcGVlay1yZW1vdGUnIFstLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+XSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTE3LDcgKzE3LDcgQEAKIAogT1BUSU9OUwogLS0tLS0tLQotLS1leGVjPTxnaXQtdXBsb2FkLXBhY2s+OjoKK1wtLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+OjoKIAlVc2UgdGhpcyB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvICdnaXQtdXBsb2FkLXBhY2snIG9uIHRoZQogCXJlbW90ZSBzaWRlLCBpZiBpdCBpcyBub3QgZm91bmQgb24geW91ciAkUEFUSC4gU29tZQogCWluc3RhbGxhdGlvbnMgb2Ygc3NoZCBpZ25vcmVzIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQKQEAgLTI5LDYgKzI5LDkgQEAKIAlzaGVsbHMsIGJ1dCBwcmVmZXIgaGF2aW5nIGEgbGVhbiAuYmFzaHJjIGZpbGUgKHRoZXkgc2V0IG1vc3Qgb2YKIAl0aGUgdGhpbmdzIHVwIGluIC5iYXNoX3Byb2ZpbGUpLgogCitcLS1leGVjPTxnaXQtdXBsb2FkLXBhY2s+OjoKKwlTYW1lIFwtLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+LgorCiA8aG9zdD46OgogCUEgcmVtb3RlIGhvc3QgdGhhdCBob3VzZXMgdGhlIHJlcG9zaXRvcnkuICBXaGVuIHRoaXMKIAlwYXJ0IGlzIHNwZWNpZmllZCwgJ2dpdC11cGxvYWQtcGFjaycgaXMgaW52b2tlZCB2aWEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0CmluZGV4IGE3OTE5M2YuLjMxMDAzM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dApAQCAtMyw4ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXBydW5lLXBhY2tlZCAtIFByb2dyYW0gdXNlZCB0byByZW1vdmUgdGhlIGV4dHJhIG9iamVjdCBmaWxlcyB0aGF0IGFyZSBub3cKLXJlc2lkaW5nIGluIGEgcGFjayBmaWxlLgorZ2l0LXBydW5lLXBhY2tlZCAtIFJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcwogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKaW5kZXggYTExZTMwMy4uMGI0NGYzMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dApAQCAtMTMsNyArMTMsNyBAQAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCiAKLVRoaXMgcnVucyBgZ2l0LWZzY2stb2JqZWN0cyAtLXVucmVhY2hhYmxlYCB1c2luZyBhbGwgdGhlIHJlZnMKK1RoaXMgcnVucyBgZ2l0LWZzY2sgLS11bnJlYWNoYWJsZWAgdXNpbmcgYWxsIHRoZSByZWZzCiBhdmFpbGFibGUgaW4gYCRHSVRfRElSL3JlZnNgLCBvcHRpb25hbGx5IHdpdGggYWRkaXRpb25hbCBzZXQgb2YKIG9iamVjdHMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBwcnVuZXMgYWxsCiBvYmplY3RzIHVucmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZXNlIGhlYWQgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CmluZGV4IDEzYmU5OTIuLmE4MWQ2OGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtcHVsbCAtIFB1bGwgYW5kIG1lcmdlIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoCitnaXQtcHVsbCAtIEZldGNoIGZyb20gYW5kIG1lcmdlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoCiAKIAogU1lOT1BTSVMKQEAgLTQyLDcgKzQyLDcgQEAKIAljdXJyZW50IGJyYW5jaC4gIE5vcm1hbGx5IHRoZSBicmFuY2ggbWVyZ2VkIGluIGlzCiAJdGhlIEhFQUQgb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5LCBidXQgdGhlIGNob2ljZSBpcwogCWRldGVybWluZWQgYnkgdGhlIGJyYW5jaC48bmFtZT4ucmVtb3RlIGFuZAotCWJyYW5jaC48bmFtZT4ubWVyZ2Ugb3B0aW9uczsgc2VlIGdpdGxpbms6Z2l0LXJlcG8tY29uZmlnWzFdCisJYnJhbmNoLjxuYW1lPi5tZXJnZSBvcHRpb25zOyBzZWUgZ2l0bGluazpnaXQtY29uZmlnWzFdCiAJZm9yIGRldGFpbHMuCiAKIGdpdCBwdWxsIG9yaWdpbiBuZXh0OjoKQEAgLTUyLDcgKzUyLDggQEAKIAogZ2l0IHB1bGwgLiBmaXhlcyBlbmhhbmNlbWVudHM6OgogCUJ1bmRsZSBsb2NhbCBicmFuY2ggYGZpeGVzYCBhbmQgYGVuaGFuY2VtZW50c2Agb24gdG9wIG9mCi0JdGhlIGN1cnJlbnQgYnJhbmNoLCBtYWtpbmcgYW4gT2N0b3B1cyBtZXJnZS4KKwl0aGUgY3VycmVudCBicmFuY2gsIG1ha2luZyBhbiBPY3RvcHVzIG1lcmdlLiAgVGhpcyBgZ2l0IHB1bGwgLmAKKwlzeW50YXggaXMgZXF1aXZhbGVudCB0byBgZ2l0IG1lcmdlYC4KIAogZ2l0IHB1bGwgLXMgb3VycyAuIG9ic29sZXRlOjoKIAlNZXJnZSBsb2NhbCBicmFuY2ggYG9ic29sZXRlYCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwKQEAgLTkzLDcgKzk0LDcgQEAKIAogU0VFIEFMU08KIC0tLS0tLS0tCi1naXRsaW5rOmdpdC1mZXRjaFsxXSwgZ2l0bGluazpnaXQtbWVyZ2VbMV0sIGdpdGxpbms6Z2l0LXJlcG8tY29uZmlnWzFdCitnaXRsaW5rOmdpdC1mZXRjaFsxXSwgZ2l0bGluazpnaXQtbWVyZ2VbMV0sIGdpdGxpbms6Z2l0LWNvbmZpZ1sxXQogCiAKIEF1dGhvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dAppbmRleCAxOTdmNGI1Li5mOGNjMmI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dApAQCAtOCw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LXB1c2gnIFstLWFsbF0gWy0tdGFnc10gWy1mIHwgLS1mb3JjZV0gPHJlcG9zaXRvcnk+IDxyZWZzcGVjPi4uLgorJ2dpdC1wdXNoJyBbLS1hbGxdIFstLXRhZ3NdIFstLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz5dIFstLXJlcG89YWxsXSBbLWYgfCAtLWZvcmNlXSBbLXZdIFs8cmVwb3NpdG9yeT4gPHJlZnNwZWM+Li4uXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTY3LDEyICs2NywzMyBAQAogCWFkZGl0aW9uIHRvIHJlZnNwZWNzIGV4cGxpY2l0bHkgbGlzdGVkIG9uIHRoZSBjb21tYW5kCiAJbGluZS4KIAorXC0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CisJUGF0aCB0byB0aGUgJ2dpdC1yZWNlaXZlLXBhY2snIHByb2dyYW0gb24gdGhlIHJlbW90ZQorCWVuZC4gIFNvbWV0aW1lcyB1c2VmdWwgd2hlbiBwdXNoaW5nIHRvIGEgcmVtb3RlCisJcmVwb3NpdG9yeSBvdmVyIHNzaCwgYW5kIHlvdSBkbyBub3QgaGF2ZSB0aGUgcHJvZ3JhbSBpbgorCWEgZGlyZWN0b3J5IG9uIHRoZSBkZWZhdWx0ICRQQVRILgorCitcLS1leGVjPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CisJU2FtZSBhcyBcLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+LgorCiAtZiwgXC0tZm9yY2U6OgogCVVzdWFsbHksIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IGlzCiAJbm90IGEgZGVzY2VuZGFudCBvZiB0aGUgbG9jYWwgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgogCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBUaGlzIGNhbiBjYXVzZSB0aGUKIAlyZW1vdGUgcmVwb3NpdG9yeSB0byBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoIGNhcmUuCiAKK1wtLXJlcG89PHJlcG8+OjoKKwlXaGVuIG5vIHJlcG9zaXRvcnkgaXMgc3BlY2lmaWVkIHRoZSBjb21tYW5kIGRlZmF1bHRzIHRvCisJIm9yaWdpbiI7IHRoaXMgb3ZlcnJpZGVzIGl0LgorCitcLS10aGluLCBcLS1uby10aGluOjoKKwlUaGVzZSBvcHRpb25zIGFyZSBwYXNzZWQgdG8gYGdpdC1zZW5kLXBhY2tgLiAgVGhpbgorCXRyYW5zZmVyIHNwZW5kcyBleHRyYSBjeWNsZXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZgorCW9iamVjdHMgdG8gYmUgc2VudCBhbmQgbWVhbnQgdG8gYmUgdXNlZCBvbiBzbG93ZXIgY29ubmVjdGlvbi4KKworLXY6OgorCVJ1biB2ZXJib3NlbHkuCisKIGluY2x1ZGU6OnVybHMudHh0W10KIAogQXV0aG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAppbmRleCAwM2U4NjdhLi4wY2I5ZTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1yZWJhc2UgLSBSZWJhc2UgbG9jYWwgY29tbWl0cyB0byBhIG5ldyBoZWFkCitnaXQtcmViYXNlIC0gRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZAogCiBTWU5PUFNJUwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0CmluZGV4IDBkZmFkYzIuLjEwZThjNDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVjZWl2ZS1wYWNrLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXJlY2VpdmUtcGFjayAtIFJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byBpdAorZ2l0LXJlY2VpdmUtcGFjayAtIFJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeQogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dAppbmRleCA1NWEyNGQzLi4xMTM4ODY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQKQEAgLTksNyArOSw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQtcmVmbG9nJyBleHBpcmUgWy0tZHJ5LXJ1bl0KKydnaXQtcmVmbG9nJyBleHBpcmUgWy0tZHJ5LXJ1bl0gWy0tc3RhbGUtZml4XQogCVstLWV4cGlyZT08dGltZT5dIFstLWV4cGlyZS11bnJlYWNoYWJsZT08dGltZT5dIFstLWFsbF0gPHJlZnM+Li4uCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKaW5kZXggNWI5M2E4Yy4uMzU4YzFhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CkBAIC0yOCw3ICsyOCw3IEBACiAKIFRoZSByZW1vdGUgY29uZmlndXJhdGlvbiBpcyBhY2hpZXZlZCB1c2luZyB0aGUgYHJlbW90ZS5vcmlnaW4udXJsYCBhbmQKIGByZW1vdGUub3JpZ2luLmZldGNoYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIChTZWUKLWdpdGxpbms6Z2l0LXJlcG8tY29uZmlnWzFdKS4KK2dpdGxpbms6Z2l0LWNvbmZpZ1sxXSkuCiAKIEV4YW1wbGVzCiAtLS0tLS0tLQpAQCAtNTgsNyArNTgsNyBAQAogLS0tLS0tLS0KIGdpdGxpbms6Z2l0LWZldGNoWzFdCiBnaXRsaW5rOmdpdC1icmFuY2hbMV0KLWdpdGxpbms6Z2l0LXJlcG8tY29uZmlnWzFdCitnaXRsaW5rOmdpdC1jb25maWdbMV0KIAogQXV0aG9yCiAtLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CmluZGV4IDBmYTQ3ZTMuLjRhNTdjZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dApAQCAtMyw4ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXJlcGFjayAtIFNjcmlwdCB1c2VkIHRvIHBhY2sgYSByZXBvc2l0b3J5IGZyb20gYSBjb2xsZWN0aW9uIG9mCi1vYmplY3RzIGludG8gcGFjayBmaWxlcy4KK2dpdC1yZXBhY2sgLSBQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5CiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcG8tY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcG8tY29uZmlnLnR4dAppbmRleCBjNTVhOGJhLi4yZGViYTMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBvLWNvbmZpZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwby1jb25maWcudHh0CkBAIC0zLDIyNSArMywxNiBAQAogCiBOQU1FCiAtLS0tCi1naXQtcmVwby1jb25maWcgLSBHZXQgYW5kIHNldCByZXBvc2l0b3J5IG9yIGdsb2JhbCBvcHRpb25zLgorZ2l0LXJlcG8tY29uZmlnIC0gR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucwogCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotW3ZlcnNlXQotJ2dpdC1yZXBvLWNvbmZpZycgWy0tZ2xvYmFsXSBbdHlwZV0gbmFtZSBbdmFsdWUgW3ZhbHVlX3JlZ2V4XV0KLSdnaXQtcmVwby1jb25maWcnIFstLWdsb2JhbF0gW3R5cGVdIC0tYWRkIG5hbWUgdmFsdWUKLSdnaXQtcmVwby1jb25maWcnIFstLWdsb2JhbF0gW3R5cGVdIC0tcmVwbGFjZS1hbGwgbmFtZSBbdmFsdWUgW3ZhbHVlX3JlZ2V4XV0KLSdnaXQtcmVwby1jb25maWcnIFstLWdsb2JhbF0gW3R5cGVdIC0tZ2V0IG5hbWUgW3ZhbHVlX3JlZ2V4XQotJ2dpdC1yZXBvLWNvbmZpZycgWy0tZ2xvYmFsXSBbdHlwZV0gLS1nZXQtYWxsIG5hbWUgW3ZhbHVlX3JlZ2V4XQotJ2dpdC1yZXBvLWNvbmZpZycgWy0tZ2xvYmFsXSBbdHlwZV0gLS11bnNldCBuYW1lIFt2YWx1ZV9yZWdleF0KLSdnaXQtcmVwby1jb25maWcnIFstLWdsb2JhbF0gW3R5cGVdIC0tdW5zZXQtYWxsIG5hbWUgW3ZhbHVlX3JlZ2V4XQotJ2dpdC1yZXBvLWNvbmZpZycgWy0tZ2xvYmFsXSAtbCB8IC0tbGlzdAorJ2dpdC1yZXBvLWNvbmZpZycgLi4uCisKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1Zb3UgY2FuIHF1ZXJ5L3NldC9yZXBsYWNlL3Vuc2V0IG9wdGlvbnMgd2l0aCB0aGlzIGNvbW1hbmQuIFRoZSBuYW1lIGlzCi1hY3R1YWxseSB0aGUgc2VjdGlvbiBhbmQgdGhlIGtleSBzZXBhcmF0ZWQgYnkgYSBkb3QsIGFuZCB0aGUgdmFsdWUgd2lsbCBiZQotZXNjYXBlZC4KIAotTXVsdGlwbGUgbGluZXMgY2FuIGJlIGFkZGVkIHRvIGFuIG9wdGlvbiBieSB1c2luZyB0aGUgJy0tYWRkJyBvcHRpb24uCi1JZiB5b3Ugd2FudCB0byB1cGRhdGUgb3IgdW5zZXQgYW4gb3B0aW9uIHdoaWNoIGNhbiBvY2N1ciBvbiBtdWx0aXBsZQotbGluZXMsIGEgUE9TSVggcmVnZXhwIGB2YWx1ZV9yZWdleGAgbmVlZHMgdG8gYmUgZ2l2ZW4uICBPbmx5IHRoZQotZXhpc3RpbmcgdmFsdWVzIHRoYXQgbWF0Y2ggdGhlIHJlZ2V4cCBhcmUgdXBkYXRlZCBvciB1bnNldC4gIElmCi15b3Ugd2FudCB0byBoYW5kbGUgdGhlIGxpbmVzIHRoYXQgZG8gKm5vdCogbWF0Y2ggdGhlIHJlZ2V4LCBqdXN0Ci1wcmVwZW5kIGEgc2luZ2xlIGV4Y2xhbWF0aW9uIG1hcmsgaW4gZnJvbnQgKHNlZSBFWEFNUExFUykuCi0KLVRoZSB0eXBlIHNwZWNpZmllciBjYW4gYmUgZWl0aGVyICctLWludCcgb3IgJy0tYm9vbCcsIHdoaWNoIHdpbGwgbWFrZQotJ2dpdC1yZXBvLWNvbmZpZycgZW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlKHMpIGFyZSBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQKLWNvbnZlcnQgdGhlIHZhbHVlIHRvIHRoZSBjYW5vbmljYWwgZm9ybSAoc2ltcGxlIGRlY2ltYWwgbnVtYmVyIGZvciBpbnQsCi1hICJ0cnVlIiBvciAiZmFsc2UiIHN0cmluZyBmb3IgYm9vbCkuIElmIG5vIHR5cGUgc3BlY2lmaWVyIGlzIHBhc3NlZCwKLW5vIGNoZWNrcyBvciB0cmFuc2Zvcm1hdGlvbnMgYXJlIHBlcmZvcm1lZCBvbiB0aGUgdmFsdWUuCi0KLVRoaXMgY29tbWFuZCB3aWxsIGZhaWwgaWY6Ci0KLS4gVGhlIC5naXQvY29uZmlnIGZpbGUgaXMgaW52YWxpZCwKLS4gQ2FuIG5vdCB3cml0ZSB0byAuZ2l0L2NvbmZpZywKLS4gbm8gc2VjdGlvbiB3YXMgcHJvdmlkZWQsCi0uIHRoZSBzZWN0aW9uIG9yIGtleSBpcyBpbnZhbGlkLAotLiB5b3UgdHJ5IHRvIHVuc2V0IGFuIG9wdGlvbiB3aGljaCBkb2VzIG5vdCBleGlzdCwKLS4geW91IHRyeSB0byB1bnNldC9zZXQgYW4gb3B0aW9uIGZvciB3aGljaCBtdWx0aXBsZSBsaW5lcyBtYXRjaCwgb3IKLS4geW91IHVzZSAtLWdsb2JhbCBvcHRpb24gd2l0aG91dCAkSE9NRSBiZWluZyBwcm9wZXJseSBzZXQuCi0KLQotT1BUSU9OUwotLS0tLS0tLQotCi0tLXJlcGxhY2UtYWxsOjoKLQlEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHJlcGxhY2UgYXQgbW9zdCBvbmUgbGluZS4gVGhpcyByZXBsYWNlcwotCWFsbCBsaW5lcyBtYXRjaGluZyB0aGUga2V5IChhbmQgb3B0aW9uYWxseSB0aGUgdmFsdWVfcmVnZXgpLgotCi0tLWFkZDo6Ci0JQWRkcyBhIG5ldyBsaW5lIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhbHRlcmluZyBhbnkgZXhpc3RpbmcKLQl2YWx1ZXMuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHByb3ZpZGluZyAnXiQnIGFzIHRoZSB2YWx1ZV9yZWdleC4KLQotLS1nZXQ6OgotCUdldCB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4ga2V5IChvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgcmVnZXgKLQltYXRjaGluZyB0aGUgdmFsdWUpLiBSZXR1cm5zIGVycm9yIGNvZGUgMSBpZiB0aGUga2V5IHdhcyBub3QKLQlmb3VuZCBhbmQgZXJyb3IgY29kZSAyIGlmIG11bHRpcGxlIGtleSB2YWx1ZXMgd2VyZSBmb3VuZC4KLQotLS1nZXQtYWxsOjoKLQlMaWtlIGdldCwgYnV0IGRvZXMgbm90IGZhaWwgaWYgdGhlIG51bWJlciBvZiB2YWx1ZXMgZm9yIHRoZSBrZXkKLQlpcyBub3QgZXhhY3RseSBvbmUuCi0KLS0tZ2V0LXJlZ2V4cDo6Ci0JTGlrZSAtLWdldC1hbGwsIGJ1dCBpbnRlcnByZXRzIHRoZSBuYW1lIGFzIGEgcmVndWxhciBleHByZXNzaW9uLgotCi0tLWdsb2JhbDo6Ci0JVXNlIGdsb2JhbCB+Ly5naXRjb25maWcgZmlsZSByYXRoZXIgdGhhbiB0aGUgcmVwb3NpdG9yeSAuZ2l0L2NvbmZpZy4KLQotLS11bnNldDo6Ci0JUmVtb3ZlIHRoZSBsaW5lIG1hdGNoaW5nIHRoZSBrZXkgZnJvbSBjb25maWcgZmlsZS4KLQotLS11bnNldC1hbGw6OgotCVJlbW92ZSBhbGwgbWF0Y2hpbmcgbGluZXMgZnJvbSBjb25maWcgZmlsZS4KLQotLWwsIC0tbGlzdDo6Ci0JTGlzdCBhbGwgdmFyaWFibGVzIHNldCBpbiBjb25maWcgZmlsZS4KLQotLS1ib29sOjoKLQlnaXQtcmVwby1jb25maWcgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzICJ0cnVlIiBvciAiZmFsc2UiCi0KLS0taW50OjoKLQlnaXQtcmVwby1jb25maWcgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzIGEgc2ltcGxlCi0JZGVjaW1hbCBudW1iZXIuICBBbiBvcHRpb25hbCB2YWx1ZSBzdWZmaXggb2YgJ2snLCAnbScsIG9yICdnJwotCWluIHRoZSBjb25maWcgZmlsZSB3aWxsIGNhdXNlIHRoZSB2YWx1ZSB0byBiZSBtdWx0aXBsaWVkCi0JYnkgMTAyNCwgMTA0ODU3Niwgb3IgMTA3Mzc0MTgyNCBwcmlvciB0byBvdXRwdXQuCi0KLQotRU5WSVJPTk1FTlQKLS0tLS0tLS0tLS0tCi0KLUdJVF9DT05GSUc6OgotCVRha2UgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZ2l2ZW4gZmlsZSBpbnN0ZWFkIG9mIC5naXQvY29uZmlnLgotCVVzaW5nIHRoZSAiLS1nbG9iYWwiIG9wdGlvbiBmb3JjZXMgdGhpcyB0byB+Ly5naXRjb25maWcuCi0KLUdJVF9DT05GSUdfTE9DQUw6OgotCUN1cnJlbnRseSB0aGUgc2FtZSBhcyAkR0lUX0NPTkZJRzsgd2hlbiBHaXQgd2lsbCBzdXBwb3J0IGdsb2JhbAotCWNvbmZpZ3VyYXRpb24gZmlsZXMsIHRoaXMgd2lsbCBjYXVzZSBpdCB0byB0YWtlIHRoZSBjb25maWd1cmF0aW9uCi0JZnJvbSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBhZGRpdGlvbiB0byB0aGUgZ2l2ZW4gZmlsZS4KLQotCi1FWEFNUExFCi0tLS0tLS0tCi0KLUdpdmVuIGEgLmdpdC9jb25maWcgbGlrZSB0aGlzOgotCi0JIwotCSMgVGhpcyBpcyB0aGUgY29uZmlnIGZpbGUsIGFuZAotCSMgYSAnIycgb3IgJzsnIGNoYXJhY3RlciBpbmRpY2F0ZXMKLQkjIGEgY29tbWVudAotCSMKLQotCTsgY29yZSB2YXJpYWJsZXMKLQlbY29yZV0KLQkJOyBEb24ndCB0cnVzdCBmaWxlIG1vZGVzCi0JCWZpbGVtb2RlID0gZmFsc2UKLQotCTsgT3VyIGRpZmYgYWxnb3JpdGhtCi0JW2RpZmZdCi0JCWV4dGVybmFsID0gIi91c3IvbG9jYWwvYmluL2dudS1kaWZmIC11IgotCQlyZW5hbWVzID0gdHJ1ZQotCi0JOyBQcm94eSBzZXR0aW5ncwotCVtjb3JlXQotCQlnaXRwcm94eT0ic3NoIiBmb3IgInNzaDovL2tlcm5lbC5vcmcvIgotCQlnaXRwcm94eT0icHJveHktY29tbWFuZCIgZm9yIGtlcm5lbC5vcmcKLQkJZ2l0cHJveHk9Im15cHJvdG9jb2wtY29tbWFuZCIgZm9yICJteTovLyIKLQkJZ2l0cHJveHk9ZGVmYXVsdC1wcm94eSA7IGZvciBhbGwgdGhlIHJlc3QKLQoteW91IGNhbiBzZXQgdGhlIGZpbGVtb2RlIHRvIHRydWUgd2l0aAotCi0tLS0tLS0tLS0tLS0KLSUgZ2l0IHJlcG8tY29uZmlnIGNvcmUuZmlsZW1vZGUgdHJ1ZQotLS0tLS0tLS0tLS0tCi0KLVRoZSBoeXBvdGhldGljYWwgcHJveHkgY29tbWFuZCBlbnRyaWVzIGFjdHVhbGx5IGhhdmUgYSBwb3N0Zml4IHRvIGRpc2Nlcm4KLXdoYXQgVVJMIHRoZXkgYXBwbHkgdG8uIEhlcmUgaXMgaG93IHRvIGNoYW5nZSB0aGUgZW50cnkgZm9yIGtlcm5lbC5vcmcKLXRvICJzc2giLgotCi0tLS0tLS0tLS0tLS0KLSUgZ2l0IHJlcG8tY29uZmlnIGNvcmUuZ2l0cHJveHkgJyJzc2giIGZvciBrZXJuZWwub3JnJyAnZm9yIGtlcm5lbC5vcmckJwotLS0tLS0tLS0tLS0tCi0KLVRoaXMgbWFrZXMgc3VyZSB0aGF0IG9ubHkgdGhlIGtleS92YWx1ZSBwYWlyIGZvciBrZXJuZWwub3JnIGlzIHJlcGxhY2VkLgotCi1UbyBkZWxldGUgdGhlIGVudHJ5IGZvciByZW5hbWVzLCBkbwotCi0tLS0tLS0tLS0tLS0KLSUgZ2l0IHJlcG8tY29uZmlnIC0tdW5zZXQgZGlmZi5yZW5hbWVzCi0tLS0tLS0tLS0tLS0KLQotSWYgeW91IHdhbnQgdG8gZGVsZXRlIGFuIGVudHJ5IGZvciBhIG11bHRpdmFyIChsaWtlIGNvcmUuZ2l0cHJveHkgYWJvdmUpLAoteW91IGhhdmUgdG8gcHJvdmlkZSBhIHJlZ2V4IG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiBleGFjdGx5IG9uZSBsaW5lLgotCi1UbyBxdWVyeSB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4ga2V5LCBkbwotCi0tLS0tLS0tLS0tLS0KLSUgZ2l0IHJlcG8tY29uZmlnIC0tZ2V0IGNvcmUuZmlsZW1vZGUKLS0tLS0tLS0tLS0tLQotCi1vcgotCi0tLS0tLS0tLS0tLS0KLSUgZ2l0IHJlcG8tY29uZmlnIGNvcmUuZmlsZW1vZGUKLS0tLS0tLS0tLS0tLQotCi1vciwgdG8gcXVlcnkgYSBtdWx0aXZhcjoKLQotLS0tLS0tLS0tLS0tCi0lIGdpdCByZXBvLWNvbmZpZyAtLWdldCBjb3JlLmdpdHByb3h5ICJmb3Iga2VybmVsLm9yZyQiCi0tLS0tLS0tLS0tLS0KLQotSWYgeW91IHdhbnQgdG8ga25vdyBhbGwgdGhlIHZhbHVlcyBmb3IgYSBtdWx0aXZhciwgZG86Ci0KLS0tLS0tLS0tLS0tLQotJSBnaXQgcmVwby1jb25maWcgLS1nZXQtYWxsIGNvcmUuZ2l0cHJveHkKLS0tLS0tLS0tLS0tLQotCi1JZiB5b3UgbGlrZSB0byBsaXZlIGRhbmdlcm91cywgeW91IGNhbiByZXBsYWNlICphbGwqIGNvcmUuZ2l0cHJveHkgYnkgYQotbmV3IG9uZSB3aXRoCi0KLS0tLS0tLS0tLS0tLQotJSBnaXQgcmVwby1jb25maWcgLS1yZXBsYWNlLWFsbCBjb3JlLmdpdHByb3h5IHNzaAotLS0tLS0tLS0tLS0tCi0KLUhvd2V2ZXIsIGlmIHlvdSByZWFsbHkgb25seSB3YW50IHRvIHJlcGxhY2UgdGhlIGxpbmUgZm9yIHRoZSBkZWZhdWx0IHByb3h5LAotaS5lLiB0aGUgb25lIHdpdGhvdXQgYSAiZm9yIC4uLiIgcG9zdGZpeCwgZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKLQotLS0tLS0tLS0tLS0tCi0lIGdpdCByZXBvLWNvbmZpZyBjb3JlLmdpdHByb3h5IHNzaCAnISBmb3IgJwotLS0tLS0tLS0tLS0tCi0KLVRvIGFjdHVhbGx5IG1hdGNoIG9ubHkgdmFsdWVzIHdpdGggYW4gZXhjbGFtYXRpb24gbWFyaywgeW91IGhhdmUgdG8KLQotLS0tLS0tLS0tLS0tCi0lIGdpdCByZXBvLWNvbmZpZyBzZWN0aW9uLmtleSB2YWx1ZSAnWyFdJwotLS0tLS0tLS0tLS0tCi0KLVRvIGFkZCBhIG5ldyBwcm94eSwgd2l0aG91dCBhbHRlcmluZyBhbnkgb2YgdGhlIGV4aXN0aW5nIG9uZXMsIHVzZQotCi0tLS0tLS0tLS0tLS0KLSUgZ2l0IHJlcG8tY29uZmlnIGNvcmUuZ2l0cHJveHkgJyJwcm94eSIgZm9yIGV4YW1wbGUuY29tJwotLS0tLS0tLS0tLS0tCi0KLQotaW5jbHVkZTo6Y29uZmlnLnR4dFtdCi0KLQotQXV0aG9yCi0tLS0tLS0KLVdyaXR0ZW4gYnkgSm9oYW5uZXMgU2NoaW5kZWxpbiA8Sm9oYW5uZXMuU2NoaW5kZWxpbkBnbXguZGU+Ci0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0tCi1Eb2N1bWVudGF0aW9uIGJ5IEpvaGFubmVzIFNjaGluZGVsaW4sIFBldHIgQmF1ZGlzIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgotCi1HSVQKLS0tLQotUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKLQorVGhpcyBpcyBhIHN5bm9ueW0gZm9yIGdpdGxpbms6Z2l0LWNvbmZpZ1sxXS4gIFBsZWFzZSByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gb2YgdGhhdCBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQKaW5kZXggYjU3YTcyYi4uMTM5YjZlYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtcmVyZXJlIC0gUmV1c2UgcmVjb3JkZWQgcmVzb2x2ZQorZ2l0LXJlcmVyZSAtIFJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMKIAogU1lOT1BTSVMKIC0tLS0tLS0tCkBAIC0zOCw3ICszOCw3IEBACiAKIFRoaXMgcmVzZXRzIHRoZSBtZXRhZGF0YSB1c2VkIGJ5IHJlcmVyZSBpZiBhIG1lcmdlIHJlc29sdXRpb24gaXMgdG8gYmUKIGlzIGFib3J0ZWQuICBDYWxsaW5nIGdpdGxpbms6Z2l0LWFtWzFdIC0tc2tpcCBvciBnaXRsaW5rOmdpdC1yZWJhc2VbMV0KLVstLXNraXB8LS1hYm9ydF0gd2lsbCBhdXRvbWF0Y2FsbHkgaW52b2tlIHRoaXMgY29tbWFuZC4KK1stLXNraXB8LS1hYm9ydF0gd2lsbCBhdXRvbWF0aWNhbGx5IGludm9rZSB0aGlzIGNvbW1hbmQuCiAKICdkaWZmJzo6CiAKQEAgLTgxLDcgKzgxLDcgQEAKIAogLS0tLS0tLS0tLS0tCiAJJCBnaXQgY2hlY2tvdXQgdG9waWMKLQkkIGdpdCBwdWxsIC4gbWFzdGVyCisJJCBnaXQgbWVyZ2UgbWFzdGVyCiAKICAgICAgICAgICAgICAgby0tLSotLS1vLS0tKyB0b3BpYwogICAgICAgICAgICAgIC8gICAgICAgICAgIC8KQEAgLTEwMywxMCArMTAzLDEwIEBACiAKIC0tLS0tLS0tLS0tLQogCSQgZ2l0IGNoZWNrb3V0IHRvcGljCi0JJCBnaXQgcHVsbCAuIG1hc3RlcgorCSQgZ2l0IG1lcmdlIG1hc3RlcgogCSQgLi4uIHdvcmsgb24gYm90aCB0b3BpYyBhbmQgbWFzdGVyIGJyYW5jaGVzCiAJJCBnaXQgY2hlY2tvdXQgbWFzdGVyCi0JJCBnaXQgcHVsbCAuIHRvcGljCisJJCBnaXQgbWVyZ2UgdG9waWMKIAogICAgICAgICAgICAgICBvLS0tKi0tLW8tLS0rLS0tby0tLW8gdG9waWMKICAgICAgICAgICAgICAvICAgICAgICAgICAvICAgICAgICAgXApAQCAtMTI2LDExICsxMjYsMTEgQEAKIAogLS0tLS0tLS0tLS0tCiAJJCBnaXQgY2hlY2tvdXQgdG9waWMKLQkkIGdpdCBwdWxsIC4gbWFzdGVyCisJJCBnaXQgbWVyZ2UgbWFzdGVyCiAJJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReIDsjIHJld2luZCB0aGUgdGVzdCBtZXJnZQogCSQgLi4uIHdvcmsgb24gYm90aCB0b3BpYyBhbmQgbWFzdGVyIGJyYW5jaGVzCiAJJCBnaXQgY2hlY2tvdXQgbWFzdGVyCi0JJCBnaXQgcHVsbCAuIHRvcGljCisJJCBnaXQgbWVyZ2UgdG9waWMKIAogICAgICAgICAgICAgICBvLS0tKi0tLW8tLS0tLS0tby0tLW8gdG9waWMKICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CmluZGV4IDRmNDI0NzguLjA0NDc1YTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKQEAgLTEyMSwxMCArMTIxLDYgQEAKICsKIC0tLS0tLS0tLS0tLQogJCBnaXQgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICA8MT4KLVRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLgotZmF0YWw6IE1lcmdlIHJlcXVpcmVzIGZpbGUtbGV2ZWwgbWVyZ2luZwotTm9wZS4KLS4uLgogQXV0by1tZXJnaW5nIG5pdGZvbAogQ09ORkxJQ1QgKGNvbnRlbnQpOiBNZXJnZSBjb25mbGljdCBpbiBuaXRmb2wKIEF1dG9tYXRpYyBtZXJnZSBmYWlsZWQvcHJldmVudGVkOyBmaXggdXAgYnkgaGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzb2x2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNvbHZlLnR4dAppbmRleCA0ZTU3YzJiLi4wOTI1OTczIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNvbHZlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNvbHZlLnR4dApAQCAtMTIsNiArMTIsOCBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KK0RFUFJFQ0FURUQuICBVc2UgYGdpdC1tZXJnZWAgaW5zdGVhZC4KKwogR2l2ZW4gdHdvIGNvbW1pdHMgYW5kIGEgbWVyZ2UgbWVzc2FnZSwgbWVyZ2UgdGhlIDxtZXJnZWQ+IGNvbW1pdAogaW50byA8Y3VycmVudD4gY29tbWl0LCB3aXRoIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgPG1lc3NhZ2U+LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKaW5kZXggODZjOTRlNy4uYzc0MjExNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dApAQCAtMjcsNiArMjcsNyBAQAogCSAgICAgWyBcLS1wcmV0dHkgfCBcLS1oZWFkZXIgXQogCSAgICAgWyBcLS1iaXNlY3QgXQogCSAgICAgWyBcLS1tZXJnZSBdCisJICAgICBbIFwtLXdhbGstcmVmbG9ncyBdCiAJICAgICA8Y29tbWl0Pi4uLiBbIFwtLSA8cGF0aHM+Li4uIF0KIAogREVTQ1JJUFRJT04KQEAgLTE5MCw2ICsxOTEsMjIgQEAKIAlJbiBhZGRpdGlvbiB0byB0aGUgJzxjb21taXQ+JyBsaXN0ZWQgb24gdGhlIGNvbW1hbmQKIAlsaW5lLCByZWFkIHRoZW0gZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCiAKKy1nLCAtLXdhbGstcmVmbG9nczo6CisKKwlJbnN0ZWFkIG9mIHdhbGtpbmcgdGhlIGNvbW1pdCBhbmNlc3RyeSBjaGFpbiwgd2FsaworCXJlZmxvZyBlbnRyaWVzIGZyb20gdGhlIG1vc3QgcmVjZW50IG9uZSB0byBvbGRlciBvbmVzLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCB5b3UgY2Fubm90IHNwZWNpZnkgY29tbWl0cyB0bworCWV4Y2x1ZGUgKHRoYXQgaXMsICd7Y2FyZXR9Y29tbWl0JywgJ2NvbW1pdDEuLmNvbW1pdDInLAorCW5vciAnY29tbWl0MS4uLmNvbW1pdDInIG5vdGF0aW9ucyBjYW5ub3QgYmUgdXNlZCkuCisrCitXaXRoICdcLS1wcmV0dHknIGZvcm1hdCBvdGhlciB0aGFuIG9uZWxpbmUgKGZvciBvYnZpb3VzIHJlYXNvbnMpLAordGhpcyBjYXVzZXMgdGhlIG91dHB1dCB0byBoYXZlIHR3byBleHRyYSBsaW5lcyBvZiBpbmZvcm1hdGlvbgordGFrZW4gZnJvbSB0aGUgcmVmbG9nLiAgQnkgZGVmYXVsdCwgJ2NvbW1pdEB7TnRofScgbm90YXRpb24gaXMKK3VzZWQgaW4gdGhlIG91dHB1dC4gIFdoZW4gdGhlIHN0YXJ0aW5nIGNvbW1pdCBpcyBzcGVjaWZpZWQgYXMKKydjb21taXRAe25vd30nLCBvdXRwdXQgYWxzbyB1c2VzICdjb21taXRAe3RpbWVzdGFtcH0nIG5vdGF0aW9uCitpbnN0ZWFkLiAgVW5kZXIgJ1wtLXByZXR0eT1vbmVsaW5lJywgdGhlIGNvbW1pdCBtZXNzYWdlIGlzCitwcmVmaXhlZCB3aXRoIHRoaXMgaW5mb3JtYXRpb24gb24gdGhlIHNhbWUgbGluZS4KKwogLS1tZXJnZTo6CiAKIAlBZnRlciBhIGZhaWxlZCBtZXJnZSwgc2hvdyByZWZzIHRoYXQgdG91Y2ggZmlsZXMgaGF2aW5nIGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CmluZGV4IDRlYWY1YTAuLmFlYjM3YjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dApAQCAtMTUyLDYgKzE1MiwxNCBAQAogICB1c2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIHJlZiBuYW1lIGFuZCB0aGUgcmVmIG11c3QgaGF2ZSBhbgogICBleGlzdGluZyBsb2cgKCRHSVRfRElSL2xvZ3MvPHJlZj4pLgogCisqIEEgcmVmIGZvbGxvd2VkIGJ5IHRoZSBzdWZmaXggJ0AnIHdpdGggYW4gb3JkaW5hbCBzcGVjaWZpY2F0aW9uCisgIGVuY2xvc2VkIGluIGEgYnJhY2UgcGFpciAoZS5nLiAnXHsxXH0nLCAnXHsxNVx9JykgdG8gc3BlY2lmeQorICB0aGUgbi10aCBwcmlvciB2YWx1ZSBvZiB0aGF0IHJlZi4gIEZvciBleGFtcGxlICdtYXN0ZXJAXHsxXH0nCisgIGlzIHRoZSBpbW1lZGlhdGUgcHJpb3IgdmFsdWUgb2YgJ21hc3Rlcicgd2hpbGUgJ21hc3RlckBcezVcfScKKyAgaXMgdGhlIDV0aCBwcmlvciB2YWx1ZSBvZiAnbWFzdGVyJy4gVGhpcyBzdWZmaXggbWF5IG9ubHkgYmUgdXNlZAorICBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSByZWYgbmFtZSBhbmQgdGhlIHJlZiBtdXN0IGhhdmUgYW4gZXhpc3RpbmcKKyAgbG9nICgkR0lUX0RJUi9sb2dzLzxyZWY+KS4KKwogKiBBIHN1ZmZpeCAne2NhcmV0fScgdG8gYSByZXZpc2lvbiBwYXJhbWV0ZXIgbWVhbnMgdGhlIGZpcnN0IHBhcmVudCBvZgogICB0aGF0IGNvbW1pdCBvYmplY3QuICAne2NhcmV0fTxuPicgbWVhbnMgdGhlIDxuPnRoIHBhcmVudCAoaS5lLgogICAncmV2e2NhcmV0fScKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0CmluZGV4IDcxZjc4MTUuLjgwODFiYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dApAQCAtMTksNiArMTksOCBAQAogLS0tLS0tLQogPGNvbW1pdD46OgogCUNvbW1pdCB0byByZXZlcnQuCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgY29tbWl0IG5hbWVzLCBzZWUKKwkiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gZ2l0bGluazpnaXQtcmV2LXBhcnNlWzFdLgogCiAtZXwtLWVkaXQ6OgogCVdpdGggdGhpcyBvcHRpb24sIGBnaXQtcmV2ZXJ0YCB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQKaW5kZXggM2E4ZjI3OS4uNmZlZWJjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJtLnR4dApAQCAtNjAsMjEgKzYwLDE3IEBACiBFWEFNUExFUwogLS0tLS0tLS0KIGdpdC1ybSBEb2N1bWVudGF0aW9uL1xcKi50eHQ6OgotCiAJUmVtb3ZlcyBhbGwgYFwqLnR4dGAgZmlsZXMgZnJvbSB0aGUgaW5kZXggdGhhdCBhcmUgdW5kZXIgdGhlCi0JYERvY3VtZW50YXRpb25gIGRpcmVjdG9yeSBhbmQgYW55IG9mIGl0cyBzdWJkaXJlY3Rvcmllcy4gVGhlCi0JZmlsZXMgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHdvcmtpbmcgdHJlZS4KKwlgRG9jdW1lbnRhdGlvbmAgZGlyZWN0b3J5IGFuZCBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzLgogKwogTm90ZSB0aGF0IHRoZSBhc3RlcmlzayBgXCpgIGlzIHF1b3RlZCBmcm9tIHRoZSBzaGVsbCBpbiB0aGlzCiBleGFtcGxlOyB0aGlzIGxldHMgdGhlIGNvbW1hbmQgaW5jbHVkZSB0aGUgZmlsZXMgZnJvbQogc3ViZGlyZWN0b3JpZXMgb2YgYERvY3VtZW50YXRpb24vYCBkaXJlY3RvcnkuCiAKIGdpdC1ybSAtZiBnaXQtKi5zaDo6Ci0KLQlSZW1vdmUgYWxsIGdpdC0qLnNoIHNjcmlwdHMgdGhhdCBhcmUgaW4gdGhlIGluZGV4LiBUaGUgZmlsZXMKLQlhcmUgcmVtb3ZlZCBmcm9tIHRoZSBpbmRleCwgYW5kIGZyb20gdGhlIHdvcmtpbmcKLQl0cmVlLiBCZWNhdXNlIHRoaXMgZXhhbXBsZSBsZXRzIHRoZSBzaGVsbCBleHBhbmQgdGhlCi0JYXN0ZXJpc2sgKGkuZS4geW91IGFyZSBsaXN0aW5nIHRoZSBmaWxlcyBleHBsaWNpdGx5KSwgaXQKKwlSZW1vdmUgYWxsIGdpdC0qLnNoIHNjcmlwdHMgdGhhdCBhcmUgaW4gdGhlIGluZGV4LgorCUJlY2F1c2UgdGhpcyBleGFtcGxlIGxldHMgdGhlIHNoZWxsIGV4cGFuZCB0aGUgYXN0ZXJpc2sKKwkoaS5lLiB5b3UgYXJlIGxpc3RpbmcgdGhlIGZpbGVzIGV4cGxpY2l0bHkpLCBpdAogCWRvZXMgbm90IHJlbW92ZSBgc3ViZGlyL2dpdC1mb28uc2hgLgogCiBTZWUgQWxzbwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKaW5kZXggNTM3NmY2OC4uMmY2MjY3YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0CkBAIC0zLDM4ICszLDUxIEBACiAKIE5BTUUKIC0tLS0KLWdpdC1zZW5kLXBhY2sgLSBQdXNoIG1pc3Npbmcgb2JqZWN0cyBwYWNrZWQKK2dpdC1zZW5kLXBhY2sgLSBQdXNoIG9iamVjdHMgb3ZlciBnaXQgcHJvdG9jb2wgdG8gYW5vdGhlciByZXBvc2lvdG9yeQogCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1zZW5kLXBhY2snIFstLWFsbF0gWy0tZm9yY2VdIFstLWV4ZWM9PGdpdC1yZWNlaXZlLXBhY2s+XSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPHJlZj4uLi5dCisnZ2l0LXNlbmQtcGFjaycgWy0tYWxsXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWY+Li4uXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KK1VzdWFsbHkgeW91IHdvdWxkIHdhbnQgdG8gdXNlIGdpdGxpbms6Z2l0LXB1c2hbMV0gd2hpY2ggaXMgYQoraGlnaGVyIGxldmVsIHdyYXBwZXIgb2YgdGhpcyBjb21tYW5kIGluc3RlYWQuCisKIEludm9rZXMgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIGEgcG9zc2libHkgcmVtb3RlIHJlcG9zaXRvcnksIGFuZAogdXBkYXRlcyBpdCBmcm9tIHRoZSBjdXJyZW50IHJlcG9zaXRvcnksIHNlbmRpbmcgbmFtZWQgcmVmcy4KIAogCiBPUFRJT05TCiAtLS0tLS0tCi0tLWV4ZWM9PGdpdC1yZWNlaXZlLXBhY2s+OjoKK1wtLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz46OgogCVBhdGggdG8gdGhlICdnaXQtcmVjZWl2ZS1wYWNrJyBwcm9ncmFtIG9uIHRoZSByZW1vdGUKIAllbmQuICBTb21ldGltZXMgdXNlZnVsIHdoZW4gcHVzaGluZyB0byBhIHJlbW90ZQogCXJlcG9zaXRvcnkgb3ZlciBzc2gsIGFuZCB5b3UgZG8gbm90IGhhdmUgdGhlIHByb2dyYW0gaW4KIAlhIGRpcmVjdG9yeSBvbiB0aGUgZGVmYXVsdCAkUEFUSC4KIAotLS1hbGw6OgorXC0tZXhlYz08Z2l0LXJlY2VpdmUtcGFjaz46OgorCVNhbWUgYXMgXC0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPi4KKworXC0tYWxsOjoKIAlJbnN0ZWFkIG9mIGV4cGxpY2l0bHkgc3BlY2lmeWluZyB3aGljaCByZWZzIHRvIHVwZGF0ZSwKIAl1cGRhdGUgYWxsIHJlZnMgdGhhdCBsb2NhbGx5IGV4aXN0LgogCi0tLWZvcmNlOjoKK1wtLWZvcmNlOjoKIAlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdAogCWlzIG5vdCBhbiBhbmNlc3RvciBvZiB0aGUgbG9jYWwgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgogCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdAogCXRoZSByZW1vdGUgcmVwb3NpdG9yeSBjYW4gbG9zZSBjb21taXRzOyB1c2UgaXQgd2l0aAogCWNhcmUuCiAKK1wtLXZlcmJvc2U6OgorCVJ1biB2ZXJib3NlbHkuCisKK1wtLXRoaW46OgorCVNwZW5kIGV4dHJhIGN5Y2xlcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYmUgc2VudC4KKwlVc2UgaXQgb24gc2xvd2VyIGNvbm5lY3Rpb24uCisKIDxob3N0Pjo6CiAJQSByZW1vdGUgaG9zdCB0byBob3VzZSB0aGUgcmVwb3NpdG9yeS4gIFdoZW4gdGhpcwogCXBhcnQgaXMgc3BlY2lmaWVkLCAnZ2l0LXJlY2VpdmUtcGFjaycgaXMgaW52b2tlZCB2aWEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dAppbmRleCA3OTIxN2Q4Li4yYjJhYmViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaC1zZXR1cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0CkBAIC0xMiwxNCArMTIsNTEgQEAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogCi1TZXRzIHVwIHRoZSBub3JtYWwgZ2l0IGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucwotKGN1cnJlbnRseSBqdXN0ICJkaWUoKSIpLCBhbmQgcmV0dXJucyBPSyBpZiBpdCBhbGwgbG9va3MgbGlrZSBhIGdpdCBhcmNoaXZlLgotU28sIHRvIG1ha2UgdGhlIHJlc3Qgb2YgdGhlIGdpdCBzY3JpcHRzIG1vcmUgY2FyZWZ1bCBhbmQgcmVhZGFibGUsCi11c2UgaXQgYXMgZm9sbG93czoKK1RoaXMgaXMgbm90IGEgY29tbWFuZCB0aGUgZW5kIHVzZXIgd291bGQgd2FudCB0byBydW4uICBFdmVyLgorVGhpcyBkb2N1bWVudGF0aW9uIGlzIG1lYW50IGZvciBwZW9wbGUgd2hvIGFyZSBzdHVkeWluZyB0aGUKK1BvcmNlbGFpbi1pc2ggc2NyaXB0cyBhbmQvb3IgYXJlIHdyaXRpbmcgbmV3IG9uZXMuCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgYGdpdC1zaC1zZXR1cGAgc2NyaXB0bGV0IGlzIGRlc2lnbmVkIHRvIGJlIHNvdXJjZWQgKHVzaW5nCitgLmApIGJ5IG90aGVyIHNoZWxsIHNjcmlwdHMgdG8gc2V0IHVwIHNvbWUgdmFyaWFibGVzIHBvaW50aW5nIGF0Cit0aGUgbm9ybWFsIGdpdCBkaXJlY3RvcmllcyBhbmQgYSBmZXcgaGVscGVyIHNoZWxsIGZ1bmN0aW9ucy4KKworQmVmb3JlIHNvdXJjaW5nIGl0LCB5b3VyIHNjcmlwdCBzaG91bGQgc2V0IHVwIGEgZmV3IHZhcmlhYmxlczsKK2BVU0FHRWAgKGFuZCBgTE9OR19VU0FHRWAsIGlmIGFueSkgaXMgdXNlZCB0byBkZWZpbmUgbWVzc2FnZQorZ2l2ZW4gYnkgYHVzYWdlKClgIHNoZWxsIGZ1bmN0aW9uLiAgYFNVQkRJUkVDVE9SWV9PS2AgY2FuIGJlIHNldAoraWYgdGhlIHNjcmlwdCBjYW4gcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHdvcmtpbmcgdHJlZQorKHNvbWUgY29tbWFuZHMgZG8gbm90KS4KKworVGhlIHNjcmlwdGxldCBzZXRzIGBHSVRfRElSYCBhbmQgYEdJVF9PQkpFQ1RfRElSRUNUT1JZYCBzaGVsbAordmFyaWFibGVzLCBidXQgZG9lcyAqbm90KiBleHBvcnQgdGhlbSB0byB0aGUgZW52aXJvbm1lbnQuCisKK0ZVTkNUSU9OUworLS0tLS0tLS0tCisKK2RpZTo6CisJZXhpdCBhZnRlciBlbWl0dGluZyB0aGUgc3VwcGxpZWQgZXJyb3IgbWVzc2FnZSB0byB0aGUKKwlzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisKK3VzYWdlOjoKKwlkaWUgd2l0aCB0aGUgdXNhZ2UgbWVzc2FnZS4KKworc2V0X3JlZmxvZ19hY3Rpb246OgorCXNldCB0aGUgbWVzc2FnZSB0aGF0IHdpbGwgYmUgcmVjb3JkZWQgdG8gZGVzY3JpYmUgdGhlCisJZW5kLXVzZXIgYWN0aW9uIGluIHRoZSByZWZsb2csIHdoZW4gdGhlIHNjcmlwdCB1cGRhdGVzIGEKKwlyZWYuCisKK2lzX2JhcmVfcmVwb3NpdG9yeTo6CisJb3V0cHV0cyBgdHJ1ZWAgb3IgYGZhbHNlYCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbQorCXRvIGluZGljYXRlIGlmIHRoZSByZXBvc2l0b3J5IGlzIGEgYmFyZSByZXBvc2l0b3J5CisJKGkuZS4gd2l0aG91dCBhbiBhc3NvY2lhdGVkIHdvcmtpbmcgdHJlZSkuCisKK2NkX3RvX3RvcGxldmVsOjoKKwlydW5zIGNoZGlyIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLgorCityZXF1aXJlX3dvcmtfdHJlZTo6CisJY2hlY2tzIGlmIHRoZSByZXBvc2l0b3J5IGlzIGEgYmFyZSByZXBvc2l0b3J5LCBhbmQgZGllcworCWlmIHNvLiAgVXNlZCBieSBzY3JpcHRzIHRoYXQgcmVxdWlyZSB3b3JraW5nIHRyZWUKKwkoZS5nLiBgY2hlY2tvdXRgKS4KKwogCiBBdXRob3IKIC0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0CmluZGV4IGNjNDI2NmQuLjIyOGI5ZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNoZWxsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1zaGVsbCAtIFJlc3RyaWN0ZWQgbG9naW4gc2hlbGwgZm9yIEdJVCBvdmVyIFNTSCBvbmx5CitnaXQtc2hlbGwgLSBSZXN0cmljdGVkIGxvZ2luIHNoZWxsIGZvciBHSVQtb25seSBTU0ggYWNjZXNzCiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dAppbmRleCA5NWZhOTAxLi5iMGRmOTJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CkBAIC0yOSw3ICsyOSw3IEBACiAJb2YgYXV0aG9yIGFscGhhYmV0aWMgb3JkZXIuCiAKIC1zOjoKLQlTdXByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbiBhbmQgcHJvdmlkZSBhIGNvbW1pdCBjb3VudCBzdW1tYXJ5IG9ubHkuCisJU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9uIGFuZCBwcm92aWRlIGEgY29tbWl0IGNvdW50IHN1bW1hcnkgb25seS4KIAogRklMRVMKIC0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKaW5kZXggOTEyZTE1Yi4uYjM4NjMzYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dApAQCAtMTEsNyArMTEsNyBAQAogJ2dpdC1zaG93LWJyYW5jaCcgWy0tYWxsXSBbLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyXSBbLS1jdXJyZW50XQogCQlbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdCiAJCVstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbPHJldj4gfCA8Z2xvYj5dLi4uCi0nZ2l0LXNob3ctYnJhbmNoJyAtLXJlZmxvZ1s9PG4+XSA8cmVmPgorJ2dpdC1zaG93LWJyYW5jaCcgKC1nfC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSA8cmVmPgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTk3LDkgKzk3LDExIEBACiAJd2lsbCBzaG93IHRoZSByZXZpc2lvbnMgZ2l2ZW4gYnkgImdpdCByZXYtbGlzdCB7Y2FyZXR9bWFzdGVyCiAJdG9waWMxIHRvcGljMiIKIAotLS1yZWZsb2dbPTxuPl0gPHJlZj46OgotCVNob3dzIDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgZm9yIHRoZSBnaXZlbiByZWYuCi0KKy0tcmVmbG9nWz08bj5bLDxiYXNlPl1dIDxyZWY+OjoKKwlTaG93cyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIGZvciB0aGUgZ2l2ZW4KKwlyZWYuICBJZiA8YmFzZT4gaXMgZ2l2ZW4sIDxuPiBlbnRyaWVzIGdvaW5nIGJhY2sgZnJvbQorCXRoYXQgZW50cnkuICA8YmFzZT4gY2FuIGJlIHNwZWNpZmllZCBhcyBjb3VudCBvciBkYXRlLgorCWAtZ2AgY2FuIGJlIHVzZWQgYXMgYSBzaG9ydC1oYW5kIGZvciB0aGlzIG9wdGlvbi4KIAogTm90ZSB0aGF0IC0tbW9yZSwgLS1saXN0LCAtLWluZGVwZW5kZW50IGFuZCAtLW1lcmdlLWJhc2Ugb3B0aW9ucwogYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KQEAgLTE2NSw2ICsxNjcsMTMgQEAKIG9ubHkgdGhlIHByaW1hcnkgYnJhbmNoZXMuICBJbiBhZGRpdGlvbiwgaWYgeW91IGhhcHBlbiB0byBiZSBvbgogeW91ciB0b3BpYyBicmFuY2gsIGl0IGlzIHNob3duIGFzIHdlbGwuCiAKKy0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2ggLS1yZWZsb2c9JzEwLDEgaG91ciBhZ28nIC0tbGlzdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitzaG93cyAxMCByZWZsb2cgZW50cmllcyBnb2luZyBiYWNrIGZyb20gdGhlIHRpcCBhcyBvZiAxIGhvdXIgYWdvLgorV2l0aG91dCBgLS1saXN0YCwgdGhlIG91dHB1dCBhbHNvIHNob3dzIGhvdyB0aGVzZSB0aXBzIGFyZQordG9wb2xvZ2ljYWxseSByZWxhdGVkIHdpdGggZWFjaCBvdGhlci4KIAogCiBBdXRob3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKaW5kZXggYzIxMGI5YS4uOTA1MTk1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKQEAgLTMyLDYgKzMyLDggQEAKIC0tLS0tLS0KIDxvYmplY3Q+OjoKIAlUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIHNob3cuCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgb2JqZWN0IG5hbWVzLCBzZWUKKwkiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gZ2l0bGluazpnaXQtcmV2LXBhcnNlWzFdLgogCiBpbmNsdWRlOjpwcmV0dHktZm9ybWF0cy50eHRbXQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtZmV0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLWZldGNoLnR4dAppbmRleCBiNzExNmIzLi4xOTJiMWYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtZmV0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1mZXRjaC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1zc2gtZmV0Y2ggLSBQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorZ2l0LXNzaC1mZXRjaCAtIEZldGNoIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCiAKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtdXBsb2FkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC11cGxvYWQudHh0CmluZGV4IDcwMjY3NGUuLmE5YjdlOWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNzaC11cGxvYWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC11cGxvYWQudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtc3NoLXVwbG9hZCAtIFB1c2hlcyB0byBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KK2dpdC1zc2gtdXBsb2FkIC0gUHVzaCB0byBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3RhdHVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQKaW5kZXggY2U3ODU3ZS4uMDM4NzFlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3RhdHVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtc3RhdHVzIC0gU2hvdyB3b3JraW5nIHRyZWUgc3RhdHVzCitnaXQtc3RhdHVzIC0gU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cwogCiAKIFNZTk9QU0lTCkBAIC0zNCw2ICszNCwxNSBAQAogdGVtcGxhdGUgY29tbWVudHMsIGFuZCBhbGwgdGhlIG91dHB1dCBsaW5lcyBhcmUgcHJlZml4ZWQgd2l0aCAnIycuCiAKIAorQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBob25vcnMgYGNvbG9yLnN0YXR1c2AgKG9yIGBzdGF0dXMuY29sb3JgIC0tIHRoZXkKK21lYW4gdGhlIHNhbWUgdGhpbmcgYW5kIHRoZSBsYXR0ZXIgaXMga2VwdCBmb3IgYmFja3dhcmQKK2NvbXBhdGliaWxpdHkpIGFuZCBgY29sb3Iuc3RhdHVzLjxzbG90PmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKK3RvIGNvbG9yaXplIGl0cyBvdXRwdXQuCisKKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CmluZGV4IDllZDcyMTEuLmFlYTRhNmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXN2biAtIGJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gU3VidmVyc2lvbiBhbmQgZ2l0CitnaXQtc3ZuIC0gQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIHNpbmdsZSBTdWJ2ZXJzaW9uIGJyYW5jaCBhbmQgZ2l0CiAKIFNZTk9QU0lTCiAtLS0tLS0tLQpAQCAtMTEzLDcgKzExMyw3IEBACiAKICdjb21taXQtZGlmZic6OgogCUNvbW1pdHMgdGhlIGRpZmYgb2YgdHdvIHRyZWUtaXNoIGFyZ3VtZW50cyBmcm9tIHRoZQotCWNvbW1hbmQtbGluZS4gIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgaW50ZXJvcGFiaWxpdHkgd2l0aAorCWNvbW1hbmQtbGluZS4gIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoCiAJZ2l0LXN2bmltcG9ydCBhbmQgZG9lcyBub3QgcmVseSBvbiBiZWluZyBpbnNpZGUgYW4gZ2l0LXN2bgogCWluaXQtZWQgcmVwb3NpdG9yeS4gIFRoaXMgY29tbWFuZCB0YWtlcyB0aHJlZSBhcmd1bWVudHMsIChhKSB0aGUKIAlvcmlnaW5hbCB0cmVlIHRvIGRpZmYgYWdhaW5zdCwgKGIpIHRoZSBuZXcgdHJlZSByZXN1bHQsIChjKSB0aGUKQEAgLTIwNCw3ICsyMDQsNyBAQAogY2Fubm90IHZlcnNpb24gZW1wdHkgZGlyZWN0b3JpZXMuICBFbmFibGluZyB0aGlzIGZsYWcgd2lsbCBtYWtlCiB0aGUgY29tbWl0IHRvIFNWTiBhY3QgbGlrZSBnaXQuCiAKLXJlcG8tY29uZmlnIGtleTogc3ZuLnJtZGlyCitjb25maWcga2V5OiBzdm4ucm1kaXIKIAogLWU6OgogLS1lZGl0OjoKQEAgLTIxNSw3ICsyMTUsNyBAQAogZGVmYXVsdCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb21taXRzLCBhbmQgZm9yY2VkIG9uIHdoZW4gY29tbWl0dGluZwogdHJlZSBvYmplY3RzLgogCi1yZXBvLWNvbmZpZyBrZXk6IHN2bi5lZGl0Citjb25maWcga2V5OiBzdm4uZWRpdAogCiAtbDxudW0+OjoKIC0tZmluZC1jb3BpZXMtaGFyZGVyOjoKQEAgLTIyNiw4ICsyMjYsOCBAQAogZ2l0bGluazpnaXQtZGlmZi10cmVlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiBbdmVyc2VdCi1yZXBvLWNvbmZpZyBrZXk6IHN2bi5sCi1yZXBvLWNvbmZpZyBrZXk6IHN2bi5maW5kY29waWVzaGFyZGVyCitjb25maWcga2V5OiBzdm4ubAorY29uZmlnIGtleTogc3ZuLmZpbmRjb3BpZXNoYXJkZXIKIAogLUE8ZmlsZW5hbWU+OjoKIC0tYXV0aG9ycy1maWxlPTxmaWxlbmFtZT46OgpAQCAtMjQ1LDcgKzI0NSw3IEBACiBhcHByb3ByaWF0ZSBlbnRyeS4gIFJlLXJ1bm5pbmcgdGhlIHByZXZpb3VzIGdpdC1zdm4gY29tbWFuZAogYWZ0ZXIgdGhlIGF1dGhvcnMtZmlsZSBpcyBtb2RpZmllZCBzaG91bGQgY29udGludWUgb3BlcmF0aW9uLgogCi1yZXBvLWNvbmZpZyBrZXk6IHN2bi5hdXRob3JzZmlsZQorY29uZmlnIGtleTogc3ZuLmF1dGhvcnNmaWxlCiAKIC1xOjoKIC0tcXVpZXQ6OgpAQCAtMjYyLDggKzI2Miw4IEBACiAKIAktLXJlcGFjay1mbGFncyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIGdpdGxpbms6Z2l0LXJlcGFja1sxXS4KIAotcmVwby1jb25maWcga2V5OiBzdm4ucmVwYWNrCi1yZXBvLWNvbmZpZyBrZXk6IHN2bi5yZXBhY2tmbGFncworY29uZmlnIGtleTogc3ZuLnJlcGFjaworY29uZmlnIGtleTogc3ZuLnJlcGFja2ZsYWdzCiAKIC1tOjoKIC0tbWVyZ2U6OgpAQCAtMzA0LDcgKzMwNCw3IEBACiBUaGlzIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLCBvbmNlIGZvciBlYWNoCiBicmFuY2guCiAKLXJlcG8tY29uZmlnIGtleTogc3ZuLmJyYW5jaAorY29uZmlnIGtleTogc3ZuLmJyYW5jaAogCiAtaTxHSVRfU1ZOX0lEPjo6CiAtLWlkIDxHSVRfU1ZOX0lEPjo6CkBAIC0zMjAsNyArMzIwLDcgQEAKIAlzdGFydGVkIHRyYWNraW5nIGEgYnJhbmNoIGFuZCBuZXZlciB0cmFja2VkIHRoZSB0cnVuayBpdCB3YXMKIAlkZXNjZW5kZWQgZnJvbS4KIAotcmVwby1jb25maWcga2V5OiBzdm4uZm9sbG93cGFyZW50Citjb25maWcga2V5OiBzdm4uZm9sbG93cGFyZW50CiAKIC0tbm8tbWV0YWRhdGE6OgogCVRoaXMgZ2V0cyByaWQgb2YgdGhlIGdpdC1zdm4taWQ6IGxpbmVzIGF0IHRoZSBlbmQgb2YgZXZlcnkgY29tbWl0LgpAQCAtMzMyLDcgKzMzMiw3IEBACiAJVGhlICdnaXQtc3ZuIGxvZycgY29tbWFuZCB3aWxsIG5vdCB3b3JrIG9uIHJlcG9zaXRvcmllcyB1c2luZyB0aGlzLAogCWVpdGhlci4KIAotcmVwby1jb25maWcga2V5OiBzdm4ubm9tZXRhZGF0YQorY29uZmlnIGtleTogc3ZuLm5vbWV0YWRhdGEKIAogLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQKaW5kZXggNGJjMzVhMS4uZjkzYjc5YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zeW1ib2xpYy1yZWYudHh0CkBAIC0zLDExICszLDExIEBACiAKIE5BTUUKIC0tLS0KLWdpdC1zeW1ib2xpYy1yZWYgLSByZWFkIGFuZCBtb2RpZnkgc3ltYm9saWMgcmVmcworZ2l0LXN5bWJvbGljLXJlZiAtIFJlYWQgYW5kIG1vZGlmeSBzeW1ib2xpYyByZWZzCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1zeW1ib2xpYy1yZWYnIDxuYW1lPiBbPHJlZj5dCisnZ2l0LXN5bWJvbGljLXJlZicgWy1xXSA8bmFtZT4gWzxyZWY+XQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTIzLDYgKzIzLDE0IEBACiBiZWdpbnMgd2l0aCBgcmVmOiByZWZzL2AuICBGb3IgZXhhbXBsZSwgeW91ciBgLmdpdC9IRUFEYCBpcwogYSByZWd1bGFyIGZpbGUgd2hvc2UgY29udGVudHMgaXMgYHJlZjogcmVmcy9oZWFkcy9tYXN0ZXJgLgogCitPUFRJT05TCistLS0tLS0tCisKKy1xOjoKKwlEbyBub3QgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgPG5hbWU+IGlzIG5vdCBhCisJc3ltYm9saWMgcmVmIGJ1dCBhIGRldGFjaGVkIEhFQUQ7IGluc3RlYWQgZXhpdCB3aXRoCisJbm9uLXplcm8gc3RhdHVzIHNpbGVudGx5LgorCiBOT1RFUwogLS0tLS0KIEluIHRoZSBwYXN0LCBgLmdpdC9IRUFEYCB3YXMgYSBzeW1ib2xpYyBsaW5rIHBvaW50aW5nIGF0CkBAIC0zNiw2ICs0NCwxMCBAQAogYWR2ZXJ0aXNlZCAoaG9ycm9ycykuICBUaGVyZWZvcmUgc3ltYm9saWMgbGlua3MgYXJlIG5vdyBkZXByZWNhdGVkCiBhbmQgc3ltYm9saWMgcmVmcyBhcmUgdXNlZCBieSBkZWZhdWx0LgogCitnaXQtc3ltYm9saWMtcmVmIHdpbGwgZXhpdCB3aXRoIHN0YXR1cyAwIGlmIHRoZSBjb250ZW50cyBvZiB0aGUKK3N5bWJvbGljIHJlZiB3ZXJlIHByaW50ZWQgY29ycmVjdGx5LCB3aXRoIHN0YXR1cyAxIGlmIHRoZSByZXF1ZXN0ZWQKK25hbWUgaXMgbm90IGEgc3ltYm9saWMgcmVmLCBvciAxMjggaWYgYW5vdGhlciBlcnJvciBvY2N1cnMuCisKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CmluZGV4IDgwYmVjZTAuLjNmMDFlMGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dApAQCAtMywxNCArMywxNCBAQAogCiBOQU1FCiAtLS0tCi1naXQtdGFnIC0gQ3JlYXRlIGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEcKK2dpdC10YWcgLSBDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRwogCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdC10YWcnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZiB8IC1kIHwgLXZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0KLQkgPG5hbWU+IFs8aGVhZD5dCisnZ2l0LXRhZycgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mIHwgLXZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0gIDxuYW1lPiBbPGhlYWQ+XQorJ2dpdC10YWcnIC1kIDxuYW1lPi4uLgogJ2dpdC10YWcnIC1sIFs8cGF0dGVybj5dCiAKIERFU0NSSVBUSU9OCkBAIC01NSw3ICs1NSw3IEBACiAJUmVwbGFjZSBhbiBleGlzdGluZyB0YWcgd2l0aCB0aGUgZ2l2ZW4gbmFtZSAoaW5zdGVhZCBvZiBmYWlsaW5nKQogCiAtZDo6Ci0JRGVsZXRlIGFuIGV4aXN0aW5nIHRhZyB3aXRoIHRoZSBnaXZlbiBuYW1lCisJRGVsZXRlIGV4aXN0aW5nIHRhZ3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZXMuCiAKIC12OjoKIAlWZXJpZnkgdGhlIGdwZyBzaWduYXR1cmUgb2YgZ2l2ZW4gdGhlIHRhZwpAQCAtNzAsNiArNzAsMTYgQEAKIAlUYWtlIHRoZSB0YWcgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBmaWxlLiAgVXNlICctJyB0bwogCXJlYWQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCiAKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK0J5IGRlZmF1bHQsIGdpdC10YWcgaW4gc2lnbi13aXRoLWRlZmF1bHQgbW9kZSAoLXMpIHdpbGwgdXNlIHlvdXIKK2NvbW1pdHRlciBpZGVudGl0eSAob2YgdGhlIGZvcm0gIllvdXIgTmFtZSA8eW91ckBlbWFpbC5hZGRyZXNzPiIpIHRvCitmaW5kIGEga2V5LiAgSWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IGRlZmF1bHQga2V5LCB5b3UgY2FuIHNwZWNpZnkKK2l0IGluIHRoZSByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gYXMgZm9sbG93czoKKworW3VzZXJdCisgICAgc2lnbmluZ2tleSA9IDxncGcta2V5LWlkPgorCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+LApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0CmluZGV4IDc0YTZmZGQuLjU5NTk0MDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXRhci10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10YXItdHJlZS50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC10YXItdHJlZSAtIENyZWF0ZXMgYSB0YXIgYXJjaGl2ZSBvZiB0aGUgZmlsZXMgaW4gdGhlIG5hbWVkIHRyZWUKK2dpdC10YXItdHJlZSAtIENyZWF0ZSBhIHRhciBhcmNoaXZlIG9mIHRoZSBmaWxlcyBpbiB0aGUgbmFtZWQgdHJlZSBvYmplY3QKIAogCiBTWU5PUFNJUwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICB1bWFzayA9IDAwMgk7IyBncm91cCBmcmllbmRseQogCiBUaGUgc3BlY2lhbCB1bWFzayB2YWx1ZSAidXNlciIgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIncyBjdXJyZW50IHVtYXNrCi13aWxsIGJlIHVzZWQgaW5zdGVhZC4gVGhlIGRlZmF1bHQgdmFsdWUgcmVtYWlucyAwLCB3aGljaCBtZWFucyB3b3JsZAord2lsbCBiZSB1c2VkIGluc3RlYWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwMDIsIHdoaWNoIG1lYW5zIGdyb3VwCiByZWFkYWJsZS93cml0YWJsZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAKIEVYQU1QTEVTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC10b29scy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10b29scy50eHQKaW5kZXggMDkxNGNiYi4uNmI0MDdmOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdG9vbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXRvb2xzLnR4dApAQCAtNTAsNyArNTAsNyBAQAogICAgZ2l0dmlldyBpcyBhIEdUSyBiYXNlZCByZXBvc2l0b3J5IGJyb3dzZXIgZm9yIGdpdAogCiAKLSAgIC0gKmdpdHdlYiogKGZ0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0d2ViLykKKyAgIC0gKmdpdHdlYiogKHNoaXBwZWQgd2l0aCBnaXQtY29yZSkKIAogICAgR0lUd2ViIHByb3ZpZGVzIGZ1bGwtZmxlZGdlZCB3ZWIgaW50ZXJmYWNlIGZvciBHSVQgcmVwb3NpdG9yaWVzLgogCkBAIC02MywxMiArNjMsMTggQEAKICAgIEN1cnJlbnRseSBpdCBpcyB0aGUgZmFzdGVzdCBhbmQgbW9zdCBmZWF0dXJlIHJpY2ggYW1vbmcgdGhlIGdpdAogICAgdmlld2VycyBhbmQgY29tbWl0IHRvb2xzLgogCisgICAtICp0aWcqIChodHRwOi8vam9uYXMubml0cm8uZGsvdGlnLykKKworICAgdGlnIGJ5IEpvbmFzIEZvbnNlY2EgaXMgYSBzaW1wbGUgZ2l0IHJlcG9zaXRvcnkgYnJvd3NlcgorICAgd3JpdHRlbiB1c2luZyBuY3Vyc2VzLiBCYXNpY2FsbHksIGl0IGp1c3QgYWN0cyBhcyBhIGZyb250LWVuZAorICAgZm9yIGdpdC1sb2cgYW5kIGdpdC1zaG93L2dpdC1kaWZmLiBBZGRpdGlvbmFsbHksIHlvdSBjYW4gYWxzbworICAgdXNlIGl0IGFzIGEgcGFnZXIgZm9yIGdpdCBjb21tYW5kcy4KIAogCiBGb3JlaWduIFNDTSBpbnRlcmZhY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAtICpnaXQtc3ZuKiAoY29udHJpYi8pCisgICAtICpnaXQtc3ZuKiAoc2hpcHBlZCB3aXRoIGdpdC1jb3JlKQogCiAgICBnaXQtc3ZuIGlzIGEgc2ltcGxlIGNvbmR1aXQgZm9yIGNoYW5nZXNldHMgYmV0d2VlbiBhIHNpbmdsZSBTdWJ2ZXJzaW9uCiAgICBicmFuY2ggYW5kIGdpdC4KQEAgLTk1LDMgKzEwMSw3IEBACiAgICBUaGlzIGlzIGFuIEVtYWNzIGludGVyZmFjZSBmb3IgZ2l0LiBUaGUgdXNlciBpbnRlcmZhY2UgaXMgbW9kZWxlZCBvbgogICAgcGNsLWN2cy4gSXQgaGFzIGJlZW4gZGV2ZWxvcGVkIG9uIEVtYWNzIDIxIGFuZCB3aWxsIHByb2JhYmx5IG5lZWQgc29tZQogICAgdHdlYWtpbmcgdG8gd29yayBvbiBYRW1hY3MuCisKKworaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0ludGVyZmFjZXNGcm9udGVuZHNBbmRUb29scyBoYXMgbW9yZQorY29tcHJlaGVuc2l2ZSBsaXN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKaW5kZXggMGUwYTNhZi4uYjE2MWM4YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtdXBkYXRlLWluZGV4IC0gTW9kaWZpZXMgdGhlIGluZGV4IG9yIGRpcmVjdG9yeSBjYWNoZQorZ2l0LXVwZGF0ZS1pbmRleCAtIFJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgKIAogCiBTWU5PUFNJUwpAQCAtMjg5LDcgKzI4OSw3IEBACiAKIFRoZSBjb21tYW5kIGhvbm9ycyBgY29yZS5maWxlbW9kZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIElmCiB5b3VyIHJlcG9zaXRvcnkgaXMgb24gYW4gZmlsZXN5c3RlbSB3aG9zZSBleGVjdXRhYmxlIGJpdHMgYXJlCi11bnJlbGlhYmxlLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gJ2ZhbHNlJyAoc2VlIGdpdGxpbms6Z2l0LXJlcG8tY29uZmlnWzFdKS4KK3VucmVsaWFibGUsIHRoaXMgc2hvdWxkIGJlIHNldCB0byAnZmFsc2UnIChzZWUgZ2l0bGluazpnaXQtY29uZmlnWzFdKS4KIFRoaXMgY2F1c2VzIHRoZSBjb21tYW5kIHRvIGlnbm9yZSBkaWZmZXJlbmNlcyBpbiBmaWxlIG1vZGVzIHJlY29yZGVkCiBpbiB0aGUgaW5kZXggYW5kIHRoZSBmaWxlIG1vZGUgb24gdGhlIGZpbGVzeXN0ZW0gaWYgdGhleSBkaWZmZXIgb25seSBvbgogZXhlY3V0YWJsZSBiaXQuICAgT24gc3VjaCBhbiB1bmZvcnR1bmF0ZSBmaWxlc3lzdGVtLCB5b3UgbWF5CkBAIC0zMDEsNyArMzAxLDcgQEAKIAogU2VlIEFsc28KIC0tLS0tLS0tCi1naXRsaW5rOmdpdC1yZXBvLWNvbmZpZ1sxXQorZ2l0bGluazpnaXQtY29uZmlnWzFdCiAKIAogQXV0aG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1yZWYudHh0CmluZGV4IDcxYmNiNzkuLjk0MjRmZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1yZWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1yZWYudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtdXBkYXRlLXJlZiAtIHVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseQorZ2l0LXVwZGF0ZS1yZWYgLSBVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkKIAogU1lOT1BTSVMKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQKaW5kZXggMzg4YmI1My4uNDAzODcxZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLWFyY2hpdmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1hcmNoaXZlLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXVwbG9hZC1hcmNoaXZlIC0gU2VuZCBhcmNoaXZlCitnaXQtdXBsb2FkLWFyY2hpdmUgLSBTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZQogCiAKIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQKaW5kZXggYjJjOTMwNy4uOWRhMDYyZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXVwbG9hZC1wYWNrIC0gU2VuZCBtaXNzaW5nIG9iamVjdHMgcGFja2VkCitnaXQtdXBsb2FkLXBhY2sgLSBTZW5kIG9iamVjdHMgcGFja2VkIGJhY2sgdG8gZ2l0LWZldGNoLXBhY2sKIAogCiBTWU5PUFNJUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmFyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQKaW5kZXggYTViMWEwZC4uOWIwZGUxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdmFyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBOQU1FCiAtLS0tCi1naXQtdmFyIC0gUHJpbnQgdGhlIGdpdCB1c2VycyBpZGVudGl0eQorZ2l0LXZhciAtIFNob3cgYSBnaXQgbG9naWNhbCB2YXJpYWJsZQogCiAKIFNZTk9QU0lTCkBAIC0yMCw3ICsyMCw3IEBACiAJQ2F1c2UgdGhlIGxvZ2ljYWwgdmFyaWFibGVzIHRvIGJlIGxpc3RlZC4gSW4gYWRkaXRpb24sIGFsbCB0aGUKIAl2YXJpYWJsZXMgb2YgdGhlIGdpdCBjb25maWd1cmF0aW9uIGZpbGUgLmdpdC9jb25maWcgYXJlIGxpc3RlZAogCWFzIHdlbGwuIChIb3dldmVyLCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgbGlzdGluZyBmdW5jdGlvbmFsaXR5Ci0JaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgZ2l0LXJlcG8tY29uZmlnIC1sYC4pCisJaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBgZ2l0LWNvbmZpZyAtbGAuKQogCiBFWEFNUExFCiAtLS0tLS0tLQpAQCAtNDksNyArNDksNyBAQAogLS0tLS0tLS0KIGdpdGxpbms6Z2l0LWNvbW1pdC10cmVlWzFdCiBnaXRsaW5rOmdpdC10YWdbMV0KLWdpdGxpbms6Z2l0LXJlcG8tY29uZmlnWzFdCitnaXRsaW5rOmdpdC1jb25maWdbMV0KIAogQXV0aG9yCiAtLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXdoYXRjaGFuZ2VkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXdoYXRjaGFuZ2VkLnR4dAppbmRleCBlOGYyMWQwLi4zOTliZmYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0CkBAIC0yNyw3ICsyNyw3IEBACiAJb3V0cHV0IGZvcm1hdCB0aGF0IGlzIHVzZWZ1bCBvbmx5IHRvIHRlbGwgdGhlIGNoYW5nZWQKIAlwYXRocyBhbmQgdGhlaXIgbmF0dXJlIG9mIGNoYW5nZXMuCiAKLS0tbWF4LWNvdW50PTxuPjo6CistPG4+OjoKIAlMaW1pdCBvdXRwdXQgdG8gPG4+IGNvbW1pdHMuCiAKIDxzaW5jZT4uLjx1bnRpbD46OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dAppbmRleCBjODVmYTg5Li45NmQ1ZTA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0LXdyaXRlLXRyZWUgLSBDcmVhdGVzIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleAorZ2l0LXdyaXRlLXRyZWUgLSBDcmVhdGUgYSB0cmVlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IGluZGV4CiAKIAogU1lOT1BTSVMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAppbmRleCBmODlkNzQ1Li43Y2QzNDY3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CkBAIC0yNCw3ICsyNCw3IEBACiBhbHNvIHdhbnQgdG8gcmVhZCBsaW5rOmN2cy1taWdyYXRpb24uaHRtbFtDVlMgbWlncmF0aW9uXS4KIAogVGhlIENPTU1BTkQgaXMgZWl0aGVyIGEgbmFtZSBvZiBhIEdpdCBjb21tYW5kIChzZWUgYmVsb3cpIG9yIGFuIGFsaWFzCi1hcyBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKHNlZSBnaXRsaW5rOmdpdC1yZXBvLWNvbmZpZ1sxXSkuCithcyBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKHNlZSBnaXRsaW5rOmdpdC1jb25maWdbMV0pLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC04MSwyNDQgKzgxLDI2IEBACiBNYWluIHBvcmNlbGFpbiBjb21tYW5kcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotZ2l0bGluazpnaXQtYWRkWzFdOjoKLQlBZGQgcGF0aHMgdG8gdGhlIGluZGV4LgotCi1naXRsaW5rOmdpdC1hbVsxXTo6Ci0JQXBwbHkgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCwgYnV0IGNvb2xlci4KLQotZ2l0bGluazpnaXQtYXBwbHltYm94WzFdOjoKLQlBcHBseSBwYXRjaGVzIGZyb20gYSBtYWlsYm94LCBvcmlnaW5hbCB2ZXJzaW9uIGJ5IExpbnVzLgotCi1naXRsaW5rOmdpdC1hcmNoaXZlWzFdOjoKLQlDcmVhdGVzIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUuCi0KLWdpdGxpbms6Z2l0LWJpc2VjdFsxXTo6Ci0JRmluZCB0aGUgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyBieSBiaW5hcnkgc2VhcmNoLgotCi1naXRsaW5rOmdpdC1icmFuY2hbMV06OgotCUNyZWF0ZSBhbmQgU2hvdyBicmFuY2hlcy4KLQotZ2l0bGluazpnaXQtY2hlY2tvdXRbMV06OgotCUNoZWNrb3V0IGFuZCBzd2l0Y2ggdG8gYSBicmFuY2guCi0KLWdpdGxpbms6Z2l0LWNoZXJyeS1waWNrWzFdOjoKLQlDaGVycnktcGljayB0aGUgZWZmZWN0IG9mIGFuIGV4aXN0aW5nIGNvbW1pdC4KLQotZ2l0bGluazpnaXQtY2xlYW5bMV06OgotCVJlbW92ZSB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlLgotCi1naXRsaW5rOmdpdC1jbG9uZVsxXTo6Ci0JQ2xvbmVzIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeS4KLQotZ2l0bGluazpnaXQtY29tbWl0WzFdOjoKLQlSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeS4KLQotZ2l0bGluazpnaXQtZGlmZlsxXTo6Ci0JU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0Yy4KLQotZ2l0bGluazpnaXQtZmV0Y2hbMV06OgotCURvd25sb2FkIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSB2aWEgdmFyaW91cyBwcm90b2NvbHMuCi0KLWdpdGxpbms6Z2l0LWZvcm1hdC1wYXRjaFsxXTo6Ci0JUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbi4KLQotZ2l0bGluazpnaXQtZ3JlcFsxXTo6Ci0JUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuLgotCi1naXRsaW5rOmdpdGtbMV06OgotCVRoZSBnaXQgcmVwb3NpdG9yeSBicm93c2VyLgotCi1naXRsaW5rOmdpdC1sb2dbMV06OgotCVNob3dzIGNvbW1pdCBsb2dzLgotCi1naXRsaW5rOmdpdC1scy1yZW1vdGVbMV06OgotCVNob3dzIHJlZmVyZW5jZXMgaW4gYSByZW1vdGUgb3IgbG9jYWwgcmVwb3NpdG9yeS4KLQotZ2l0bGluazpnaXQtbWVyZ2VbMV06OgotCUdyYW5kIHVuaWZpZWQgbWVyZ2UgZHJpdmVyLgotCi1naXRsaW5rOmdpdC1tdlsxXTo6Ci0JTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rLgotCi1naXRsaW5rOmdpdC1wYWNrLXJlZnNbMV06OgotCVBhY2sgaGVhZHMgYW5kIHRhZ3MgZm9yIGVmZmljaWVudCByZXBvc2l0b3J5IGFjY2Vzcy4KLQotZ2l0bGluazpnaXQtcHVsbFsxXTo6Ci0JRmV0Y2ggZnJvbSBhbmQgbWVyZ2Ugd2l0aCBhIHJlbW90ZSByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoLgotCi1naXRsaW5rOmdpdC1wdXNoWzFdOjoKLQlVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMuCi0KLWdpdGxpbms6Z2l0LXJlYmFzZVsxXTo6Ci0JUmViYXNlIGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZC4KLQotZ2l0bGluazpnaXQtcmVwYWNrWzFdOjoKLQlQYWNrIHVucGFja2VkIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5LgotCi1naXRsaW5rOmdpdC1yZXJlcmVbMV06OgotCVJldXNlIHJlY29yZGVkIHJlc29sdXRpb24gb2YgY29uZmxpY3RlZCBtZXJnZXMuCi0KLWdpdGxpbms6Z2l0LXJlc2V0WzFdOjoKLQlSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZS4KLQotZ2l0bGluazpnaXQtcmVzb2x2ZVsxXTo6Ci0JTWVyZ2UgdHdvIGNvbW1pdHMuCi0KLWdpdGxpbms6Z2l0LXJldmVydFsxXTo6Ci0JUmV2ZXJ0IGFuIGV4aXN0aW5nIGNvbW1pdC4KLQotZ2l0bGluazpnaXQtcm1bMV06OgotCVJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4LgotCi1naXRsaW5rOmdpdC1zaG9ydGxvZ1sxXTo6Ci0JU3VtbWFyaXplcyAnZ2l0IGxvZycgb3V0cHV0LgotCi1naXRsaW5rOmdpdC1zaG93WzFdOjoKLQlTaG93IG9uZSBjb21taXQgbG9nIGFuZCBpdHMgZGlmZi4KLQotZ2l0bGluazpnaXQtc2hvdy1icmFuY2hbMV06OgotCVNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMuCi0KLWdpdGxpbms6Z2l0LXN0YXR1c1sxXTo6Ci0JU2hvd3MgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMuCi0KLWdpdGxpbms6Z2l0LXZlcmlmeS10YWdbMV06OgotCUNoZWNrIHRoZSBHUEcgc2lnbmF0dXJlIG9mIHRhZy4KLQotZ2l0bGluazpnaXQtd2hhdGNoYW5nZWRbMV06OgotCVNob3dzIGNvbW1pdCBsb2dzIGFuZCBkaWZmZXJlbmNlcyB0aGV5IGludHJvZHVjZS4KLQoraW5jbHVkZTo6Y21kcy1tYWlucG9yY2VsYWluLnR4dFtdCiAKIEFuY2lsbGFyeSBDb21tYW5kcwogfn5+fn5+fn5+fn5+fn5+fn5+CiBNYW5pcHVsYXRvcnM6CiAKLWdpdGxpbms6Z2l0LWFwcGx5cGF0Y2hbMV06OgotCUFwcGx5IG9uZSBwYXRjaCBleHRyYWN0ZWQgZnJvbSBhbiBlLW1haWwuCi0KLWdpdGxpbms6Z2l0LWFyY2hpbXBvcnRbMV06OgotCUltcG9ydCBhbiBhcmNoIHJlcG9zaXRvcnkgaW50byBnaXQuCi0KLWdpdGxpbms6Z2l0LWNvbnZlcnQtb2JqZWN0c1sxXTo6Ci0JQ29udmVydHMgb2xkLXN0eWxlIGdpdCByZXBvc2l0b3J5LgotCi1naXRsaW5rOmdpdC1jdnNpbXBvcnRbMV06OgotCVNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlLgotCi1naXRsaW5rOmdpdC1jdnNleHBvcnRjb21taXRbMV06OgotCUV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQuCi0KLWdpdGxpbms6Z2l0LWN2c3NlcnZlclsxXTo6Ci0JQSBDVlMgc2VydmVyIGVtdWxhdG9yIGZvciBnaXQuCi0KLWdpdGxpbms6Z2l0LWdjWzFdOjoKLQlDbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeS4KLQotZ2l0bGluazpnaXQtbG9zdC1mb3VuZFsxXTo6Ci0JUmVjb3ZlciBsb3N0IHJlZnMgdGhhdCBsdWNraWx5IGhhdmUgbm90IHlldCBiZWVuIHBydW5lZC4KLQotZ2l0bGluazpnaXQtbWVyZ2Utb25lLWZpbGVbMV06OgotCVRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCBgZ2l0LW1lcmdlLWluZGV4YC4KLQotZ2l0bGluazpnaXQtcHJ1bmVbMV06OgotCVBydW5lcyBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UuCi0KLWdpdGxpbms6Z2l0LXF1aWx0aW1wb3J0WzFdOjoKLQlBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBicmFuY2guCi0KLWdpdGxpbms6Z2l0LXJlZmxvZ1sxXTo6Ci0JTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbi4KLQotZ2l0bGluazpnaXQtcmVsaW5rWzFdOjoKLQlIYXJkbGluayBjb21tb24gb2JqZWN0cyBpbiBsb2NhbCByZXBvc2l0b3JpZXMuCi0KLWdpdGxpbms6Z2l0LXN2blsxXTo6Ci0JQmlkaXJlY3Rpb25hbCBvcGVyYXRpb24gYmV0d2VlbiBhIHNpbmdsZSBTdWJ2ZXJzaW9uIGJyYW5jaCBhbmQgZ2l0LgotCi1naXRsaW5rOmdpdC1zdm5pbXBvcnRbMV06OgotCUltcG9ydCBhIFNWTiByZXBvc2l0b3J5IGludG8gZ2l0LgotCi1naXRsaW5rOmdpdC1zaC1zZXR1cFsxXTo6Ci0JQ29tbW9uIGdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZS4KLQotZ2l0bGluazpnaXQtc3ltYm9saWMtcmVmWzFdOjoKLQlSZWFkIGFuZCBtb2RpZnkgc3ltYm9saWMgcmVmcy4KLQotZ2l0bGluazpnaXQtdGFnWzFdOjoKLQlBbiBleGFtcGxlIHNjcmlwdCB0byBjcmVhdGUgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRy4KLQotZ2l0bGluazpnaXQtdXBkYXRlLXJlZlsxXTo6Ci0JVXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5LgotCitpbmNsdWRlOjpjbWRzLWFuY2lsbGFyeW1hbmlwdWxhdG9ycy50eHRbXQogCiBJbnRlcnJvZ2F0b3JzOgogCi1naXRsaW5rOmdpdC1hbm5vdGF0ZVsxXTo6Ci0JQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvLgoraW5jbHVkZTo6Y21kcy1hbmNpbGxhcnlpbnRlcnJvZ2F0b3JzLnR4dFtdCiAKLWdpdGxpbms6Z2l0LWJsYW1lWzFdOjoKLQlGaW5kIG91dCB3aGVyZSBlYWNoIGxpbmUgaW4gYSBmaWxlIGNhbWUgZnJvbS4KIAotZ2l0bGluazpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXTo6Ci0JTWFrZSBzdXJlIHJlZiBuYW1lIGlzIHdlbGwgZm9ybWVkLgorSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLWdpdGxpbms6Z2l0LWNoZXJyeVsxXTo6Ci0JRmluZCBjb21taXRzIG5vdCBtZXJnZWQgdXBzdHJlYW0uCitUaGVzZSBjb21tYW5kcyBhcmUgdG8gaW50ZXJhY3Qgd2l0aCBmb3JlaWduIFNDTSBhbmQgd2l0aCBvdGhlcgorcGVvcGxlIHZpYSBwYXRjaCBvdmVyIGUtbWFpbC4KIAotZ2l0bGluazpnaXQtY291bnQtb2JqZWN0c1sxXTo6Ci0JQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24uCi0KLWdpdGxpbms6Z2l0LWRhZW1vblsxXTo6Ci0JQSByZWFsbHkgc2ltcGxlIHNlcnZlciBmb3IgZ2l0IHJlcG9zaXRvcmllcy4KLQotZ2l0bGluazpnaXQtZm10LW1lcmdlLW1zZ1sxXTo6Ci0JUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlLgotCi1naXRsaW5rOmdpdC1nZXQtdGFyLWNvbW1pdC1pZFsxXTo6Ci0JRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LXRhci10cmVlLgotCi1naXRsaW5rOmdpdC1pbWFwLXNlbmRbMV06OgotCUR1bXAgYSBtYWlsYm94IGZyb20gc3RkaW4gaW50byBhbiBpbWFwIGZvbGRlci4KLQotZ2l0bGluazpnaXQtaW5zdGF3ZWJbMV06OgotCUluc3RhbnRseSBicm93c2UgeW91ciB3b3JraW5nIHJlcG9zaXRvcnkgaW4gZ2l0d2ViLgotCi1naXRsaW5rOmdpdC1tYWlsaW5mb1sxXTo6Ci0JRXh0cmFjdHMgcGF0Y2ggYW5kIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24gZnJvbSBhIHNpbmdsZQotCWUtbWFpbCBtZXNzYWdlLCBvcHRpb25hbGx5IHRyYW5zbGl0ZXJhdGluZyB0aGUgY29tbWl0Ci0JbWVzc2FnZSBpbnRvIHV0Zi04LgotCi1naXRsaW5rOmdpdC1tYWlsc3BsaXRbMV06OgotCUEgc3R1cGlkIHByb2dyYW0gdG8gc3BsaXQgVU5JWCBtYm94IGZvcm1hdCBtYWlsYm94IGludG8KLQlpbmRpdmlkdWFsIHBpZWNlcyBvZiBlLW1haWwuCi0KLWdpdGxpbms6Z2l0LW1lcmdlLXRyZWVbMV06OgotCVNob3cgdGhyZWUtd2F5IG1lcmdlIHdpdGhvdXQgdG91Y2hpbmcgaW5kZXguCi0KLWdpdGxpbms6Z2l0LXBhdGNoLWlkWzFdOjoKLQlDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaC4KLQotZ2l0bGluazpnaXQtcGFyc2UtcmVtb3RlWzFdOjoKLQlSb3V0aW5lcyB0byBoZWxwIHBhcnNpbmcgYCRHSVRfRElSL3JlbW90ZXMvYCBmaWxlcy4KLQotZ2l0bGluazpnaXQtcmVxdWVzdC1wdWxsWzFdOjoKLQlnaXQtcmVxdWVzdC1wdWxsLgotCi1naXRsaW5rOmdpdC1yZXYtcGFyc2VbMV06OgotCVBpY2sgb3V0IGFuZCBtYXNzYWdlIHBhcmFtZXRlcnMuCi0KLWdpdGxpbms6Z2l0LXJ1bnN0YXR1c1sxXTo6Ci0JQSBoZWxwZXIgZm9yIGdpdC1zdGF0dXMgYW5kIGdpdC1jb21taXQuCi0KLWdpdGxpbms6Z2l0LXNlbmQtZW1haWxbMV06OgotCVNlbmQgcGF0Y2ggZS1tYWlscyBvdXQgb2YgImZvcm1hdC1wYXRjaCAtLW1ib3giIG91dHB1dC4KLQotZ2l0bGluazpnaXQtc3ltYm9saWMtcmVmWzFdOjoKLQlSZWFkIGFuZCBtb2RpZnkgc3ltYm9saWMgcmVmcy4KLQotZ2l0bGluazpnaXQtc3RyaXBzcGFjZVsxXTo6Ci0JRmlsdGVyIG91dCBlbXB0eSBsaW5lcy4KK2luY2x1ZGU6OmNtZHMtZm9yZWlnbnNjbWludGVyZmFjZS50eHRbXQogCiAKIExvdy1sZXZlbCBjb21tYW5kcyAocGx1bWJpbmcpCkBAIC0zMzAsMTI5ICsxMTIsMzAgQEAKIG1pZ2h0IHN0YXJ0IGJ5IHJlYWRpbmcgYWJvdXQgZ2l0bGluazpnaXQtdXBkYXRlLWluZGV4WzFdIGFuZAogZ2l0bGluazpnaXQtcmVhZC10cmVlWzFdLgogCi1XZSBkaXZpZGUgdGhlIGxvdy1sZXZlbCBjb21tYW5kcyBpbnRvIGNvbW1hbmRzIHRoYXQgbWFuaXB1bGF0ZSBvYmplY3RzIChpbgorVGhlIGludGVyZmFjZSAoaW5wdXQsIG91dHB1dCwgc2V0IG9mIG9wdGlvbnMgYW5kIHRoZSBzZW1hbnRpY3MpCit0byB0aGVzZSBsb3ctbGV2ZWwgY29tbWFuZHMgYXJlIG1lYW50IHRvIGJlIGEgbG90IG1vcmUgc3RhYmxlCit0aGFuIFBvcmNlbGFpbiBsZXZlbCBjb21tYW5kcywgYmVjYXVzZSB0aGVzZSBjb21tYW5kcyBhcmUKK3ByaW1hcmlseSBmb3Igc2NyaXB0ZWQgdXNlLiAgVGhlIGludGVyZmFjZSB0byBQb3JjZWxhaW4gY29tbWFuZHMKK29uIHRoZSBvdGhlciBoYW5kIGFyZSBzdWJqZWN0IHRvIGNoYW5nZSBpbiBvcmRlciB0byBpbXByb3ZlIHRoZQorZW5kIHVzZXIgZXhwZXJpZW5jZS4KKworVGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBkaXZpZGVzCit0aGUgbG93LWxldmVsIGNvbW1hbmRzIGludG8gY29tbWFuZHMgdGhhdCBtYW5pcHVsYXRlIG9iamVjdHMgKGluCiB0aGUgcmVwb3NpdG9yeSwgaW5kZXgsIGFuZCB3b3JraW5nIHRyZWUpLCBjb21tYW5kcyB0aGF0IGludGVycm9nYXRlIGFuZAogY29tcGFyZSBvYmplY3RzLCBhbmQgY29tbWFuZHMgdGhhdCBtb3ZlIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMgYmV0d2VlbgogcmVwb3NpdG9yaWVzLgogCisKIE1hbmlwdWxhdGlvbiBjb21tYW5kcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1naXRsaW5rOmdpdC1hcHBseVsxXTo6Ci0JUmVhZHMgYSAiZGlmZiAtdXAxIiBvciBnaXQgZ2VuZXJhdGVkIHBhdGNoIGZpbGUgYW5kCi0JYXBwbGllcyBpdCB0byB0aGUgd29ya2luZyB0cmVlLgogCi1naXRsaW5rOmdpdC1jaGVja291dC1pbmRleFsxXTo6Ci0JQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlLgotCi1naXRsaW5rOmdpdC1jb21taXQtdHJlZVsxXTo6Ci0JQ3JlYXRlcyBhIG5ldyBjb21taXQgb2JqZWN0LgotCi1naXRsaW5rOmdpdC1oYXNoLW9iamVjdFsxXTo6Ci0JQ29tcHV0ZXMgdGhlIG9iamVjdCBJRCBmcm9tIGEgZmlsZS4KLQotZ2l0bGluazpnaXQtaW5kZXgtcGFja1sxXTo6Ci0JQnVpbGQgcGFjayBpZHggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUuCi0KLWdpdGxpbms6Z2l0LWluaXRbMV06OgotCUNyZWF0ZXMgYW4gZW1wdHkgZ2l0IHJlcG9zaXRvcnksIG9yIHJlaW5pdGlhbGl6ZSBhbgotCWV4aXN0aW5nIG9uZS4KLQotZ2l0bGluazpnaXQtbWVyZ2UtZmlsZVsxXTo6Ci0JUnVucyBhIHRocmVld2F5IG1lcmdlLgotCi1naXRsaW5rOmdpdC1tZXJnZS1pbmRleFsxXTo6Ci0JUnVucyBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmcuCi0KLWdpdGxpbms6Z2l0LW1rdGFnWzFdOjoKLQlDcmVhdGVzIGEgdGFnIG9iamVjdC4KLQotZ2l0bGluazpnaXQtbWt0cmVlWzFdOjoKLQlCdWlsZCBhIHRyZWUtb2JqZWN0IGZyb20gbHMtdHJlZSBmb3JtYXR0ZWQgdGV4dC4KLQotZ2l0bGluazpnaXQtcGFjay1vYmplY3RzWzFdOjoKLQlDcmVhdGVzIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cy4KLQotZ2l0bGluazpnaXQtcHJ1bmUtcGFja2VkWzFdOjoKLQlSZW1vdmUgZXh0cmEgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGluIHBhY2sgZmlsZXMuCi0KLWdpdGxpbms6Z2l0LXJlYWQtdHJlZVsxXTo6Ci0JUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleC4KLQotZ2l0bGluazpnaXQtcmVwby1jb25maWdbMV06OgotCUdldCBhbmQgc2V0IG9wdGlvbnMgaW4gLmdpdC9jb25maWcuCi0KLWdpdGxpbms6Z2l0LXVucGFjay1vYmplY3RzWzFdOjoKLQlVbnBhY2tzIG9iamVjdHMgb3V0IG9mIGEgcGFja2VkIGFyY2hpdmUuCi0KLWdpdGxpbms6Z2l0LXVwZGF0ZS1pbmRleFsxXTo6Ci0JUmVnaXN0ZXJzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGluZGV4LgotCi1naXRsaW5rOmdpdC13cml0ZS10cmVlWzFdOjoKLQlDcmVhdGVzIGEgdHJlZSBmcm9tIHRoZSBpbmRleC4KK2luY2x1ZGU6OmNtZHMtcGx1bWJpbmdtYW5pcHVsYXRvcnMudHh0W10KIAogCiBJbnRlcnJvZ2F0aW9uIGNvbW1hbmRzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLWdpdGxpbms6Z2l0LWNhdC1maWxlWzFdOjoKLQlQcm92aWRlIGNvbnRlbnQgb3IgdHlwZS9zaXplIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMuCi0KLWdpdGxpbms6Z2l0LWRlc2NyaWJlWzFdOjoKLQlTaG93IHRoZSBtb3N0IHJlY2VudCB0YWcgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBhIGNvbW1pdC4KLQotZ2l0bGluazpnaXQtZGlmZi1pbmRleFsxXTo6Ci0JQ29tcGFyZXMgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgcmVwb3NpdG9yeS4KLQotZ2l0bGluazpnaXQtZGlmZi1maWxlc1sxXTo6Ci0JQ29tcGFyZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4LgotCi1naXRsaW5rOmdpdC1kaWZmLXN0YWdlc1sxXTo6Ci0JQ29tcGFyZXMgdHdvICJtZXJnZSBzdGFnZXMiIGluIHRoZSBpbmRleC4KLQotZ2l0bGluazpnaXQtZGlmZi10cmVlWzFdOjoKLQlDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cy4KLQotZ2l0bGluazpnaXQtZm9yLWVhY2gtcmVmWzFdOjoKLQlPdXRwdXQgaW5mb3JtYXRpb24gb24gZWFjaCByZWYuCi0KLWdpdGxpbms6Z2l0LWZzY2stb2JqZWN0c1sxXTo6Ci0JVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlLgotCi1naXRsaW5rOmdpdC1scy1maWxlc1sxXTo6Ci0JSW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgaW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlLgotCi1naXRsaW5rOmdpdC1scy10cmVlWzFdOjoKLQlEaXNwbGF5cyBhIHRyZWUgb2JqZWN0IGluIGh1bWFuIHJlYWRhYmxlIGZvcm0uCi0KLWdpdGxpbms6Z2l0LW1lcmdlLWJhc2VbMV06OgotCUZpbmRzIGFzIGdvb2QgY29tbW9uIGFuY2VzdG9ycyBhcyBwb3NzaWJsZSBmb3IgYSBtZXJnZS4KLQotZ2l0bGluazpnaXQtbmFtZS1yZXZbMV06OgotCUZpbmQgc3ltYm9saWMgbmFtZXMgZm9yIGdpdmVuIHJldnMuCi0KLWdpdGxpbms6Z2l0LXBhY2stcmVkdW5kYW50WzFdOjoKLQlGaW5kIHJlZHVuZGFudCBwYWNrIGZpbGVzLgotCi1naXRsaW5rOmdpdC1yZXYtbGlzdFsxXTo6Ci0JTGlzdHMgY29tbWl0IG9iamVjdHMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgotCi1naXRsaW5rOmdpdC1zaG93LWluZGV4WzFdOjoKLQlEaXNwbGF5cyBjb250ZW50cyBvZiBhIHBhY2sgaWR4IGZpbGUuCi0KLWdpdGxpbms6Z2l0LXNob3ctcmVmWzFdOjoKLQlMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5LgotCi1naXRsaW5rOmdpdC10YXItdHJlZVsxXTo6Ci0JQ3JlYXRlcyBhIHRhciBhcmNoaXZlIG9mIHRoZSBmaWxlcyBpbiB0aGUgbmFtZWQgdHJlZSBvYmplY3QuCi0KLWdpdGxpbms6Z2l0LXVucGFjay1maWxlWzFdOjoKLQlDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cy4KLQotZ2l0bGluazpnaXQtdmFyWzFdOjoKLQlEaXNwbGF5cyBhIGdpdCBsb2dpY2FsIHZhcmlhYmxlLgotCi1naXRsaW5rOmdpdC12ZXJpZnktcGFja1sxXTo6Ci0JVmFsaWRhdGVzIHBhY2tlZCBnaXQgYXJjaGl2ZSBmaWxlcy4KK2luY2x1ZGU6OmNtZHMtcGx1bWJpbmdpbnRlcnJvZ2F0b3JzLnR4dFtdCiAKIEluIGdlbmVyYWwsIHRoZSBpbnRlcnJvZ2F0ZSBjb21tYW5kcyBkbyBub3QgdG91Y2ggdGhlIGZpbGVzIGluCiB0aGUgd29ya2luZyB0cmVlLgpAQCAtNDYxLDUyICsxNDQsMjEgQEAKIFN5bmNoaW5nIHJlcG9zaXRvcmllcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLWdpdGxpbms6Z2l0LWZldGNoLXBhY2tbMV06OgotCVVwZGF0ZXMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IChlbmdpbmUgZm9yIHNzaCBhbmQKLQlsb2NhbCB0cmFuc3BvcnQpLgoraW5jbHVkZTo6Y21kcy1zeW5jaGluZ3JlcG9zaXRvcmllcy50eHRbXQogCi1naXRsaW5rOmdpdC1odHRwLWZldGNoWzFdOjoKLQlEb3dubG9hZHMgYSByZW1vdGUgZ2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAgYnkgd2Fsa2luZwotCWNvbW1pdCBjaGFpbi4KK1RoZSBmb2xsb3dpbmcgYXJlIGhlbHBlciBwcm9ncmFtcyB1c2VkIGJ5IHRoZSBhYm92ZTsgZW5kIHVzZXJzCit0eXBpY2FsbHkgZG8gbm90IHVzZSB0aGVtIGRpcmVjdGx5LgogCi1naXRsaW5rOmdpdC1sb2NhbC1mZXRjaFsxXTo6Ci0JRHVwbGljYXRlcyBhbm90aGVyIGdpdCByZXBvc2l0b3J5IG9uIGEgbG9jYWwgc3lzdGVtIGJ5Ci0Jd2Fsa2luZyBjb21taXQgY2hhaW4uCitpbmNsdWRlOjpjbWRzLXN5bmNoZWxwZXJzLnR4dFtdCiAKLWdpdGxpbms6Z2l0LXBlZWstcmVtb3RlWzFdOjoKLQlMaXN0cyByZWZlcmVuY2VzIG9uIGEgcmVtb3RlIHJlcG9zaXRvcnkgdXNpbmcKLQl1cGxvYWQtcGFjayBwcm90b2NvbCAoZW5naW5lIGZvciBzc2ggYW5kIGxvY2FsCi0JdHJhbnNwb3J0KS4KIAotZ2l0bGluazpnaXQtcmVjZWl2ZS1wYWNrWzFdOjoKLQlJbnZva2VkIGJ5ICdnaXQtc2VuZC1wYWNrJyB0byByZWNlaXZlIHdoYXQgaXMgcHVzaGVkIHRvIGl0LgorSW50ZXJuYWwgaGVscGVyIGNvbW1hbmRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotZ2l0bGluazpnaXQtc2VuZC1wYWNrWzFdOjoKLQlQdXNoZXMgdG8gYSByZW1vdGUgcmVwb3NpdG9yeSwgaW50ZWxsaWdlbnRseS4KK1RoZXNlIGFyZSBpbnRlcm5hbCBoZWxwZXIgY29tbWFuZHMgdXNlZCBieSBvdGhlciBjb21tYW5kczsgZW5kCit1c2VycyB0eXBpY2FsbHkgZG8gbm90IHVzZSB0aGVtIGRpcmVjdGx5LgogCi1naXRsaW5rOmdpdC1odHRwLXB1c2hbMV06OgotCVB1c2ggbWlzc2luZyBvYmplY3RzIHVzaW5nIEhUVFAvREFWLgotCi1naXRsaW5rOmdpdC1zaGVsbFsxXTo6Ci0JUmVzdHJpY3RlZCBzaGVsbCBmb3IgR0lULW9ubHkgU1NIIGFjY2Vzcy4KLQotZ2l0bGluazpnaXQtc3NoLWZldGNoWzFdOjoKLQlQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbiBieQotCXdhbGtpbmcgY29tbWl0IGNoYWluLgotCi1naXRsaW5rOmdpdC1zc2gtdXBsb2FkWzFdOjoKLQlIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1mZXRjaC4KLQotZ2l0bGluazpnaXQtdXBkYXRlLXNlcnZlci1pbmZvWzFdOjoKLQlVcGRhdGVzIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiBvbiBhIGR1bWIgc2VydmVyIHRvIGhlbHAKLQljbGllbnRzIGRpc2NvdmVyIHJlZmVyZW5jZXMgYW5kIHBhY2tzIG9uIGl0LgotCi1naXRsaW5rOmdpdC11cGxvYWQtYXJjaGl2ZVsxXTo6Ci0JSW52b2tlZCBieSAnZ2l0LWFyY2hpdmUnIHRvIHNlbmQgYSBnZW5lcmF0ZWQgYXJjaGl2ZS4KLQotZ2l0bGluazpnaXQtdXBsb2FkLXBhY2tbMV06OgotCUludm9rZWQgYnkgJ2dpdC1mZXRjaC1wYWNrJyB0byBwdXNoCi0Jd2hhdCBhcmUgYXNrZWQgZm9yLgoraW5jbHVkZTo6Y21kcy1wdXJlaGVscGVycy50eHRbXQogCiAKIENvbmZpZ3VyYXRpb24gTWVjaGFuaXNtCkBAIC02OTksNyArMzUxLDcgQEAKIAogRGlzY3Vzc2lvbltbRGlzY3Vzc2lvbl1dCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWluY2x1ZGU6OlJFQURNRVtdCitpbmNsdWRlOjpjb3JlLWludHJvLnR4dFtdCiAKIEF1dGhvcnMKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0ay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGsudHh0CmluZGV4IGYxYWViMDcuLjViZGFhNjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRrLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0ayAtIGdpdCByZXBvc2l0b3J5IGJyb3dzZXIKK2dpdGsgLSBUaGUgZ2l0IHJlcG9zaXRvcnkgYnJvd3NlcgogCiBTWU5PUFNJUwogLS0tLS0tLS0KQEAgLTQ3LDYgKzQ3LDggQEAKIAltZWFuaW5nIHNob3cgZnJvbSB0aGUgZ2l2ZW4gcmV2aXNpb24gYW5kIGJhY2ssIG9yIGl0IGNhbiBiZSBhIHJhbmdlIGluCiAJdGhlIGZvcm0gIic8ZnJvbT4nLi4nPHRvPiciIHRvIHNob3cgYWxsIHJldmlzaW9ucyBiZXR3ZWVuICc8ZnJvbT4nIGFuZAogCWJhY2sgdG8gJzx0bz4nLiBOb3RlLCBtb3JlIGFkdmFuY2VkIHJldmlzaW9uIHNlbGVjdGlvbiBjYW4gYmUgYXBwbGllZC4KKwlGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMsIHNlZQorCSJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBpbiBnaXRsaW5rOmdpdC1yZXYtcGFyc2VbMV0uCiAKIDxwYXRoPjo6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2xvc3NhcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS50eHQKaW5kZXggYmM5MTdiYi4uZDIwZWI2MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS50eHQKQEAgLTI4Niw2ICsyODYsMTggQEAKIFNIQTE6OgogCVN5bm9ueW0gZm9yIG9iamVjdCBuYW1lLgogCitzaGFsbG93IHJlcG9zaXRvcnk6OgorCUEgc2hhbGxvdyByZXBvc2l0b3J5IGhhcyBhbiBpbmNvbXBsZXRlIGhpc3Rvcnkgc29tZSBvZgorCXdob3NlIGNvbW1pdHMgaGF2ZSBwYXJlbnRzIGNhdXRlcml6ZWQgYXdheSAoaW4gb3RoZXIKKwl3b3JkcywgZ2l0IGlzIHRvbGQgdG8gcHJldGVuZCB0aGF0IHRoZXNlIGNvbW1pdHMgZG8gbm90CisJaGF2ZSB0aGUgcGFyZW50cywgZXZlbiB0aG91Z2ggdGhleSBhcmUgcmVjb3JkZWQgaW4gdGhlCisJY29tbWl0IG9iamVjdCkuICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwgd2hlbiB5b3UgYXJlCisJaW50ZXJlc3RlZCBvbmx5IGluIHRoZSByZWNlbnQgaGlzdG9yeSBvZiBhIHByb2plY3QgZXZlbgorCXRob3VnaCB0aGUgcmVhbCBoaXN0b3J5IHJlY29yZGVkIGluIHRoZSB1cHN0cmVhbSBpcworCW11Y2ggbGFyZ2VyLiAgQSBzaGFsbG93IHJlcG9zaXRvcnkgaXMgY3JlYXRlZCBieSBnaXZpbmcKKwlgLS1kZXB0aGAgb3B0aW9uIHRvIGdpdGxpbms6Z2l0LWNsb25lWzFdLCBhbmQgaXRzCisJaGlzdG9yeSBjYW4gYmUgbGF0ZXIgZGVlcGVuZWQgd2l0aCBnaXRsaW5rOmdpdC1mZXRjaFsxXS4KKwogc3ltcmVmOjoKIAlTeW1ib2xpYyByZWZlcmVuY2U6IGluc3RlYWQgb2YgY29udGFpbmluZyB0aGUgU0hBMSBpZCBpdHNlbGYsIGl0CiAJaXMgb2YgdGhlIGZvcm1hdCAncmVmOiByZWZzL3NvbWUvdGhpbmcnIGFuZCB3aGVuIHJlZmVyZW5jZWQsIGl0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL2RhbmdsaW5nLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9kYW5nbGluZy1vYmplY3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODJkZGFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9kYW5nbGluZy1vYmplY3RzLnR4dApAQCAtMCwwICsxLDEwOSBAQAorRnJvbTogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorU3ViamVjdDogUmU6IFF1ZXN0aW9uIGFib3V0IGZzY2stb2JqZWN0cyBvdXRwdXQKK0RhdGU6IFRodSwgMjUgSmFuIDIwMDcgMTI6MDE6MDYgLTA4MDAgKFBTVCkKK01lc3NhZ2UtSUQ6IDxQaW5lLkxOWC40LjY0LjA3MDEyNTExNDQyOTAuMjUwMjdAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CitBcmNoaXZlZC1BdDogPGh0dHA6Ly9wZXJtYWxpbmsuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8zNzc1ND4KK0Fic3RyYWN0OiBMaW51cyBkZXNjcmliZXMgd2hhdCBkYW5nbGluZyBvYmplY3RzIGFyZSwgd2hlbiB0aGV5CisgYXJlIGxlZnQgYmVoaW5kLCBhbmQgaG93IHRvIHZpZXcgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggYnJhbmNoCisgaGVhZHMgaW4gZ2l0aworCitPbiBUaHUsIDI1IEphbiAyMDA3LCBMYXJyeSBTdHJlZXB5IHdyb3RlOgorCis+IFNvcnJ5IHRvIGFzayBzdWNoIGEgYmFzaWMgcXVlc3Rpb24sIGJ1dCBJIGNhbid0IHF1aXRlIGRlY2lwaGVyIHRoZSBvdXRwdXQgb2YKKz4gZnNjay1vYmplY3RzLiAgV2hlbiBJIHJ1biBpdCwgSSBnZXQgdGhpczoKKz4KKz4gIGdpdCBmc2NrLW9iamVjdHMKKz4gZGFuZ2xpbmcgY29tbWl0IDIyMTNmNmQ0ZGQzOWNhOGJhZWJkMDQyNzcyMzcyM2U2MzIwODUyMWIKKz4gZGFuZ2xpbmcgY29tbWl0IGYwZDRlMDAxOTZiZDVlZTU0NDYzZTllYTdhMGYwZTgzMDNkYTc2N2YKKz4gZGFuZ2xpbmcgYmxvYiA2YTZkMGIwMWIzZTk2ZDQ5YThmMmM3YWRkZDRlZjhjM2JkMWY1NzYxCis+Cis+Cis+IEV2ZW4gYWZ0ZXIgYSAicmVwYWNrIC1hIC1kIiB0aGV5IHN0aWxsIGV4aXN0LiAgVGhlIG1hbiBwYWdlIGhhcyBhIHNob3J0Cis+IGV4cGxhbmF0aW9uLCBidXQsIGF0IGxlYXN0IGZvciBtZSwgaXQgd2Fzbid0IGZ1bGx5IGVubGlnaHRlbmluZy4gOi0pCis+Cis+IFRoZSBtYW4gcGFnZSBzYXlzIHRoYXQgZGFuZ2xpbmcgY29tbWl0cyBjb3VsZCBiZSAicm9vdCIgY29tbWl0cywgYnV0IHNpbmNlIG15Cis+IHJlcG8gc3RhcnRlZCBhcyBhIGNsb25lIG9mIGFub3RoZXIgcmVwbywgSSBkb24ndCBzZWUgaG93IEkgY291bGQgaGF2ZSBhbnkgcm9vdAorPiBjb21taXRzLiAgQWxzbywgdGhlIHBhZ2UgZG9lc24ndCByZWFsbHkgZGVzY3JpYmUgd2hhdCBhIGRhbmdsaW5nIGJsb2IgaXMuCis+Cis+IFNvLCBjYW4gc29tZW9uZSBleHBsYWluIHdoYXQgdGhlc2UgYXJ0aWZhY3RzIGFyZSBhbmQgaWYgdGhleSBhcmUgYSBwcm9ibGVtCis+IHRoYXQgSSBzaG91bGQgYmUgd29ycmllZCBhYm91dD8KKworVGhlIG1vc3QgY29tbW9uIHNpdHVhdGlvbiBpcyB0aGF0IHlvdSd2ZSByZWJhc2VkIGEgYnJhbmNoIChvciB5b3UgaGF2ZQorcHVsbGVkIGZyb20gc29tZWJvZHkgZWxzZSB3aG8gcmViYXNlZCBhIGJyYW5jaCwgbGlrZSB0aGUgInB1IiBicmFuY2ggaW4KK3RoZSBnaXQuZ2l0IGFyY2hpdmUgaXRzZWxmKS4KKworV2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlIG9sZCBoZWFkIG9mIHRoZSBvcmlnaW5hbCBicmFuY2ggc3RpbGwgZXhpc3RzLCBhcworZG9lcyBvYnZpb3VzbHkgZXZlcnl0aGluZyBpdCBwb2ludGVkIHRvLiBUaGUgYnJhbmNoIHBvaW50ZXIgaXRzZWxmIGp1c3QKK2RvZXNuJ3QsIHNpbmNlIHlvdSByZXBsYWNlZCBpdCB3aXRoIGFub3RoZXIgb25lLgorCitIb3dldmVyLCB0aGVyZSBhcmUgY2VydGFpbmx5IG90aGVyIHNpdHVhdGlvbnMgdG9vIHRoYXQgY2F1c2UgZGFuZ2xpbmcKK29iamVjdHMuIEZvciBleGFtcGxlLCB0aGUgImRhbmdsaW5nIGJsb2IiIHNpdHVhdGlvbiB5b3UgaGF2ZSB0ZW5kcyB0byBiZQorYmVjYXVzZSB5b3UgZGlkIGEgImdpdCBhZGQiIG9mIGEgZmlsZSwgYnV0IHRoZW4sIGJlZm9yZSB5b3UgYWN0dWFsbHkKK2NvbW1pdHRlZCBpdCBhbmQgbWFkZSBpdCBwYXJ0IG9mIHRoZSBiaWdnZXIgcGljdHVyZSwgeW91IGNoYW5nZWQgc29tZXRoaW5nCitlbHNlIGluIHRoYXQgZmlsZSBhbmQgY29tbWl0dGVkIHRoYXQgKnVwZGF0ZWQqIHRoaW5nIC0gdGhlIG9sZCBzdGF0ZSB0aGF0Cit5b3UgYWRkZWQgb3JpZ2luYWxseSBlbmRzIHVwIG5vdCBiZWluZyBwb2ludGVkIHRvIGJ5IGFueSBjb21taXQvdHJlZSwgc28KK2l0J3Mgbm93IGEgZGFuZ2xpbmcgYmxvYiBvYmplY3QuCisKK1NpbWlsYXJseSwgd2hlbiB0aGUgInJlY3Vyc2l2ZSIgbWVyZ2Ugc3RyYXRlZ3kgcnVucywgYW5kIGZpbmRzIHRoYXQgdGhlcmUKK2FyZSBjcmlzcy1jcm9zcyBtZXJnZXMgYW5kIHRodXMgbW9yZSB0aGFuIG9uZSBtZXJnZSBiYXNlICh3aGljaCBpcyBmYWlybHkKK3VudXN1YWwsIGJ1dCBpdCBkb2VzIGhhcHBlbiksIGl0IHdpbGwgZ2VuZXJhdGUgb25lIHRlbXBvcmFyeSBtaWR3YXkgdHJlZQorKG9yIHBvc3NpYmx5IGV2ZW4gbW9yZSwgaWYgeW91IGhhZCBsb3RzIG9mIGNyaXNzLWNyb3NzaW5nIG1lcmdlcyBhbmQKK21vcmUgdGhhbiB0d28gbWVyZ2UgYmFzZXMpIGFzIGEgdGVtcG9yYXJ5IGludGVybmFsIG1lcmdlIGJhc2UsIGFuZCBhZ2FpbiwKK3Rob3NlIGFyZSByZWFsIG9iamVjdHMsIGJ1dCB0aGUgZW5kIHJlc3VsdCB3aWxsIG5vdCBlbmQgdXAgcG9pbnRpbmcgdG8KK3RoZW0sIHNvIHRoZXkgZW5kIHVwICJkYW5nbGluZyIgaW4geW91ciByZXBvc2l0b3J5LgorCitHZW5lcmFsbHksIGRhbmdsaW5nIG9iamVjdHMgYXJlbid0IGFueXRoaW5nIHRvIHdvcnJ5IGFib3V0LiBUaGV5IGNhbiBldmVuCitiZSB2ZXJ5IHVzZWZ1bDogaWYgeW91IHNjcmV3IHNvbWV0aGluZyB1cCwgdGhlIGRhbmdsaW5nIG9iamVjdHMgY2FuIGJlIGhvdworeW91IHJlY292ZXIgeW91ciBvbGQgdHJlZSAoc2F5LCB5b3UgZGlkIGEgcmViYXNlLCBhbmQgcmVhbGl6ZWQgdGhhdCB5b3UKK3JlYWxseSBkaWRuJ3Qgd2FudCB0byAtIHlvdSBjYW4gbG9vayBhdCB3aGF0IGRhbmdsaW5nIG9iamVjdHMgeW91IGhhdmUsCithbmQgZGVjaWRlIHRvIHJlc2V0IHlvdXIgaGVhZCB0byBzb21lIG9sZCBkYW5nbGluZyBzdGF0ZSkuCisKK0ZvciBjb21taXRzLCB0aGUgbW9zdCB1c2VmdWwgdGhpbmcgdG8gZG8gd2l0aCBkYW5nbGluZyBvYmplY3RzIHRlbmRzIHRvIGJlCit0byBkbyBhIHNpbXBsZQorCisJZ2l0ayA8ZGFuZ2xpbmctY29tbWl0LXNoYS1nb2VzLWhlcmU+IC0tbm90IC0tYWxsCisKK3doaWNoIG1lYW5zIGV4YWN0bHkgd2hhdCBpdCBzb3VuZHMgbGlrZTogaXQgc2F5cyB0aGF0IHlvdSB3YW50IHRvIHNlZSB0aGUKK2NvbW1pdCBoaXN0b3J5IHRoYXQgaXMgZGVzY3JpYmVkIGJ5IHRoZSBkYW5nbGluZyBjb21taXQocyksIGJ1dCB5b3UgZG8gTk9UCit3YW50IHRvIHNlZSB0aGUgaGlzdG9yeSB0aGF0IGlzIGRlc2NyaWJlZCBieSBhbGwgeW91ciBicmFuY2hlcyBhbmQgdGFncworKHdoaWNoIGFyZSB0aGUgdGhpbmdzIHlvdSBub3JtYWxseSByZWFjaCkuIFRoYXQgYmFzaWNhbGx5IHNob3dzIHlvdSBpbiBhCituaWNlIHdheSB3aGF0IHRoZSBkYW5nbGlnbiBjb21taXQgd2FzIChhbmQgbm90aWNlIHRoYXQgaXQgbWlnaHQgbm90IGJlCitqdXN0IG9uZSBjb21taXQ6IHdlIG9ubHkgcmVwb3J0IHRoZSAidGlwIG9mIHRoZSBsaW5lIiBhcyBiZWluZyBkYW5nbGluZywKK2J1dCB0aGVyZSBtaWdodCBiZSBhIHdob2xlIGRlZXAgYW5kIGNvbXBsZXggY29tbWl0IGhpc3RvcnkgdGhhdCBoYXMgZ290dGVuCitkcm9wcGVkIC0gcmViYXNpbmcgd2lsbCBkbyB0aGF0KS4KKworRm9yIGJsb2JzIGFuZCB0cmVlcywgeW91IGNhbid0IGRvIHRoZSBzYW1lLCBidXQgeW91IGNhbiBleGFtaW5lIHRoZW0uIFlvdQorY2FuIGp1c3QgZG8KKworCWdpdCBzaG93IDxkYW5nbGluZy1ibG9iL3RyZWUtc2hhLWdvZXMtaGVyZT4KKwordG8gc2hvdyB3aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiB3ZXJlIChvciwgZm9yIGEgdHJlZSwgYmFzaWNhbGx5IHdoYXQKK3RoZSAibHMiIGZvciB0aGF0IGRpcmVjdG9yeSB3YXMpLCBhbmQgdGhhdCBtYXkgZ2l2ZSB5b3Ugc29tZSBpZGVhIG9mIHdoYXQKK3RoZSBvcGVyYXRpb24gd2FzIHRoYXQgbGVmdCB0aGF0IGRhbmdsaW5nIG9iamVjdC4KKworVXN1YWxseSwgZGFuZ2xpbmcgYmxvYnMgYW5kIHRyZWVzIGFyZW4ndCB2ZXJ5IGludGVyZXN0aW5nLiBUaGV5J3JlIGFsbW9zdAorYWx3YXlzIHRoZSByZXN1bHQgb2YgZWl0aGVyIGJlaW5nIGEgaGFsZi13YXkgbWVyZ2ViYXNlICh0aGUgYmxvYiB3aWxsCitvZnRlbiBldmVuIGhhdmUgdGhlIGNvbmZsaWN0IG1hcmtlcnMgZnJvbSBhIG1lcmdlIGluIGl0LCBpZiB5b3UgaGF2ZSBoYWQKK2NvbmZsaWN0aW5nIG1lcmdlcyB0aGF0IHlvdSBmaXhlZCB1cCBieSBoYW5kKSwgb3Igc2ltcGx5IGJlY2F1c2UgeW91CitpbnRlcnJ1cHRlZCBhICJnaXQgZmV0Y2giIHdpdGggXkMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCwgbGVhdmluZyBfc29tZV8KK29mIHRoZSBuZXcgb2JqZWN0cyBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLCBidXQganVzdCBkYW5nbGluZyBhbmQgdXNlbGVzcy4KKworQW55d2F5LCBvbmNlIHlvdSBhcmUgc3VyZSB0aGF0IHlvdSdyZSBub3QgaW50ZXJlc3RlZCBpbiBhbnkgZGFuZ2xpbmcKK3N0YXRlLCB5b3UgY2FuIGp1c3QgcHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHM6CisKKwlnaXQgcHJ1bmUKKworYW5kIHRoZXknbGwgYmUgZ29uZS4gQnV0IHlvdSBzaG91bGQgb25seSBydW4gImdpdCBwcnVuZSIgb24gYSBxdWllc2NlbnQKK3JlcG9zaXRvcnkgLSBpdCdzIGtpbmQgb2YgbGlrZSBkb2luZyBhIGZpbGVzeXN0ZW0gZnNjayByZWNvdmVyeTogeW91IGRvbid0Cit3YW50IHRvIGRvIHRoYXQgd2hpbGUgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZC4KKworKFRoZSBzYW1lIGlzIHRydWUgb2YgImdpdC1mc2NrLW9iamVjdHMiIGl0c2VsZiwgYnR3IC0gYnV0IHNpbmNlCitnaXQtZnNjay1vYmplY3RzIG5ldmVyIGFjdHVhbGx5ICpjaGFuZ2VzKiB0aGUgcmVwb3NpdG9yeSwgaXQganVzdCByZXBvcnRzCitvbiB3aGF0IGl0IGZvdW5kLCBnaXQtZnNjay1vYmplY3RzIGl0c2VsZiBpcyBuZXZlciAiZGFuZ2Vyb3VzIiB0byBydW4uCitSdW5uaW5nIGl0IHdoaWxlIHNvbWVib2R5IGlzIGFjdHVhbGx5IGNoYW5naW5nIHRoZSByZXBvc2l0b3J5IGNhbiBjYXVzZQorY29uZnVzaW5nIGFuZCBzY2FyeSBtZXNzYWdlcywgYnV0IGl0IHdvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGJhZC4gSW4KK2NvbnRyYXN0LCBydW5uaW5nICJnaXQgcHJ1bmUiIHdoaWxlIHNvbWVib2R5IGlzIGFjdGl2ZWx5IGNoYW5naW5nIHRoZQorcmVwb3NpdG9yeSBpcyBhICpCQUQqIGlkZWEpLgorCisJCQlMaW51cworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYmFzZS1mcm9tLWludGVybmFsLWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYmFzZS1mcm9tLWludGVybmFsLWJyYW5jaC50eHQKaW5kZXggZmNkNjRlOS4uM2IzYTVjMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmViYXNlLWZyb20taW50ZXJuYWwtYnJhbmNoLnR4dApAQCAtMTA2LDcgKzEwNiw3IEBACiAKICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyXl4gbWFzdGVyCiAKLVRoaXMgY3JlYXRlcyB0d28gZmlsZXMsIDAwMDEtWFhYWC50eHQgYW5kIDAwMDItWFhYWC50eHQuICBTZW5kCitUaGlzIGNyZWF0ZXMgdHdvIGZpbGVzLCAwMDAxLVhYWFgucGF0Y2ggYW5kIDAwMDItWFhYWC5wYXRjaC4gIFNlbmQKIHRoZW0gb3V0ICJUbzogIiB5b3VyIHByb2plY3QgbWFpbnRhaW5lciBhbmQgIkNjOiAiIHlvdXIgbWFpbGluZwogbGlzdC4gIFlvdSBjb3VsZCB1c2UgY29udHJpYnV0ZWQgc2NyaXB0IGdpdC1zZW5kLWVtYWlsIGlmCiB5b3VyIGhvc3QgaGFzIG5lY2Vzc2FyeSBwZXJsIG1vZHVsZXMgZm9yIHRoaXMsIGJ1dCB5b3VyIHVzdWFsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAudHh0CmluZGV4IGEyMDJmM2EuLjhlYWRjMjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAudHh0CkBAIC0yMDUsNyArMjA1LDcgQEAKIE5vdywgYWRkIHRoZSByZW1vdGUgaW4geW91ciBleGlzdGluZyByZXBvc2l0b3J5IHdoaWNoIGNvbnRhaW5zIHRoZSBwcm9qZWN0CiB5b3Ugd2FudCB0byBleHBvcnQ6CiAKLSAgICQgZ2l0LXJlcG8tY29uZmlnIHJlbW90ZS51cGxvYWQudXJsIFwKKyAgICQgZ2l0LWNvbmZpZyByZW1vdGUudXBsb2FkLnVybCBcCiAgICAgICAgaHR0cDovLzx1c2VybmFtZT5APHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdC8KIAogSXQgaXMgaW1wb3J0YW50IHRvIHB1dCB0aGUgbGFzdCAnLyc7IFdpdGhvdXQgaXQsIHRoZSBzZXJ2ZXIgd2lsbCBzZW5kCkBAIC0yMjIsNyArMjIyLDcgQEAKIAogVGhpcyBwdXNoZXMgYnJhbmNoICdtYXN0ZXInICh3aGljaCBpcyBhc3N1bWVkIHRvIGJlIHRoZSBicmFuY2ggeW91CiB3YW50IHRvIGV4cG9ydCkgdG8gcmVwb3NpdG9yeSBjYWxsZWQgJ3VwbG9hZCcsIHdoaWNoIHdlIHByZXZpb3VzbHkKLWRlZmluZWQgd2l0aCBnaXQtcmVwby1jb25maWcuCitkZWZpbmVkIHdpdGggZ2l0LWNvbmZpZy4KIAogCiBUcm91Ymxlc2hvb3Rpbmc6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3JlcG9zaXRvcnktbGF5b3V0LnR4dCBiL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CmluZGV4IDBmZGQzNjYuLjg2M2NiNjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CkBAIC0xOCw2ICsxOCw4IEBACiB0cmVlcyB0aGlzIHdheSwgZm9yIGV4YW1wbGUuICBBIHJlcG9zaXRvcnkgd2l0aCB0aGlzIGtpbmQgb2YKIGluY29tcGxldGUgb2JqZWN0IHN0b3JlIGlzIG5vdCBzdWl0YWJsZSB0byBiZSBwdWJsaXNoZWQgdG8gdGhlCiBvdXRzaWRlIHdvcmxkIGJ1dCBzb21ldGltZXMgdXNlZnVsIGZvciBwcml2YXRlIHJlcG9zaXRvcnkuCisuIFlvdSBhbHNvIGNvdWxkIGhhdmUgYW4gaW5jb21wbGV0ZSBidXQgbG9jYWxseSB1c2FibGUgcmVwb3NpdG9yeQorYnkgY2xvbmluZyBzaGFsbG93bHkuICBTZWUgZ2l0bGluazpnaXQtY2xvbmVbMV0uCiAuIFlvdSBjYW4gYmUgdXNpbmcgYG9iamVjdHMvaW5mby9hbHRlcm5hdGVzYCBtZWNoYW5pc20sIG9yCiBgJEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTYCBtZWNoYW5pc20gdG8gJ2JvcnJvdycKIG9iamVjdHMgZnJvbSBvdGhlciBvYmplY3Qgc3RvcmVzLiAgQSByZXBvc2l0b3J5IHdpdGggdGhpcyBraW5kCkBAIC0zMiw3ICszNCw3IEBACiAJdHdvIGxldHRlcnMgZnJvbSBpdHMgb2JqZWN0IG5hbWUgdG8ga2VlcCB0aGUgbnVtYmVyIG9mCiAJZGlyZWN0b3J5IGVudHJpZXMgYG9iamVjdHNgIGRpcmVjdG9yeSBpdHNlbGYgbmVlZHMgdG8KIAlob2xkLiAgT2JqZWN0cyBmb3VuZCBoZXJlIGFyZSBvZnRlbiBjYWxsZWQgJ3VucGFja2VkJwotCW9iamVjdHMuCisJKG9yICdsb29zZScpIG9iamVjdHMuCiAKIG9iamVjdHMvcGFjazo6CiAJUGFja3MgKGZpbGVzIHRoYXQgc3RvcmUgbWFueSBvYmplY3QgaW4gY29tcHJlc3NlZCBmb3JtLApAQCAtODAsNiArODIsMTUgQEAKIAlyZWNvcmRzIGFueSBvYmplY3QgbmFtZSAobm90IG5lY2Vzc2FyaWx5IGEgY29tbWl0CiAJb2JqZWN0LCBvciBhIHRhZyBvYmplY3QgdGhhdCBwb2ludHMgYXQgYSBjb21taXQgb2JqZWN0KS4KIAorcmVmcy9yZW1vdGVzL2BuYW1lYDo6CisJcmVjb3JkcyB0aXAtb2YtdGhlLXRyZWUgY29tbWl0IG9iamVjdHMgb2YgYnJhbmNoZXMgY29waWVkCisJZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LgorCitwYWNrZWQtcmVmczo6CisJcmVjb3JkcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyByZWZzL2hlYWRzLywgcmVmcy90YWdzLywKKwlhbmQgZnJpZW5kcyByZWNvcmQgaW4gYSBtb3JlIGVmZmljaWVudCB3YXkuICBTZWUKKwlnaXRsaW5rOmdpdC1wYWNrLXJlZnNbMV0uCisKIEhFQUQ6OgogCUEgc3ltcmVmIChzZWUgZ2xvc3NhcnkpIHRvIHRoZSBgcmVmcy9oZWFkcy9gIG5hbWVzcGFjZQogCWRlc2NyaWJpbmcgdGhlIGN1cnJlbnRseSBhY3RpdmUgYnJhbmNoLiAgSXQgZG9lcyBub3QgbWVhbgpAQCAtOTEsNiArMTAyLDEyIEBACiAJJ25hbWUnIGRvZXMgbm90ICh5ZXQpIGV4aXN0LiAgSW4gc29tZSBsZWdhY3kgc2V0dXBzLCBpdCBpcwogCWEgc3ltYm9saWMgbGluayBpbnN0ZWFkIG9mIGEgc3ltcmVmIHRoYXQgcG9pbnRzIGF0IHRoZSBjdXJyZW50CiAJYnJhbmNoLgorKworSEVBRCBjYW4gYWxzbyByZWNvcmQgYSBzcGVjaWZpYyBjb21taXQgZGlyZWN0bHksIGluc3RlYWQgb2YKK2JlaW5nIGEgc3ltcmVmIHRvIHBvaW50IGF0IHRoZSBjdXJyZW50IGJyYW5jaC4gIFN1Y2ggYSBzdGF0ZQoraXMgb2Z0ZW4gY2FsbGVkICdkZXRhY2hlZCBIRUFEJywgYW5kIGFsbW9zdCBhbGwgY29tbWFuZHMgd29yaworaWRlbnRpY2FsbHkgYXMgbm9ybWFsLiAgU2VlIGdpdGxpbms6Z2l0LWNoZWNrb3V0WzFdIGZvcgorZGV0YWlscy4KIAogYnJhbmNoZXM6OgogCUEgc2xpZ2h0bHkgZGVwcmVjYXRlZCB3YXkgdG8gc3RvcmUgc2hvcnRoYW5kcyB0byBiZSB1c2VkCkBAIC0xNTYsMyArMTczLDkgQEAKIAogbG9ncy9yZWZzL3RhZ3MvYG5hbWVgOjoKIAlSZWNvcmRzIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIHRhZyBuYW1lZCBgbmFtZWAuCisKK3NoYWxsb3c6OgorCVRoaXMgaXMgc2ltaWxhciB0byBgaW5mby9ncmFmdHNgIGJ1dCBpcyBpbnRlcm5hbGx5IHVzZWQKKwlhbmQgbWFpbnRhaW5lZCBieSBzaGFsbG93IGNsb25lIG1lY2hhbmlzbS4gIFNlZSBgLS1kZXB0aGAKKwlvcHRpb24gdG8gZ2l0bGluazpnaXQtY2xvbmVbMV0gYW5kIGdpdGxpbms6Z2l0LWZldGNoWzFdLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3R1dG9yaWFsLTIudHh0IGIvRG9jdW1lbnRhdGlvbi90dXRvcmlhbC0yLnR4dAppbmRleCBmNDg4OTRjLi5mMzYzZDE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3R1dG9yaWFsLTIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHV0b3JpYWwtMi50eHQKQEAgLTM0Myw4ICszNDMsOCBAQAogY3VycmVudCBjb250ZW50cyBvZiB0aGUgZmlsZToKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBjYXQtZmlsZSBibG9iIGE2YjExZjdhCi1nb29kYnllLCB3b3JkCiskIGdpdCBjYXQtZmlsZSBibG9iIDhiOTc0M2IyCitnb29kYnllLCB3b3JsZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSAic3RhdHVzIiBjb21tYW5kIGlzIGEgdXNlZnVsIHdheSB0byBnZXQgYSBxdWljayBzdW1tYXJ5IG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL3R1dG9yaWFsLnR4dAppbmRleCBkMmJmMGI5Li5hZGIxZTMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3R1dG9yaWFsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3R1dG9yaWFsLnR4dApAQCAtMTEsMTUgKzExLDEzIEBACiAkIG1hbiBnaXQtZGlmZgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUl0IGlzIGEgZ29vZCBpZGVhIHRvIGludHJvZHVjZSB5b3Vyc2VsZiB0byBnaXQgYmVmb3JlIGRvaW5nIGFueQotb3BlcmF0aW9uLiAgVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHNvIGlzOgorSXQgaXMgYSBnb29kIGlkZWEgdG8gaW50cm9kdWNlIHlvdXJzZWxmIHRvIGdpdCB3aXRoIHlvdXIgbmFtZSBhbmQKK3B1YmxpYyBlbWFpbCBhZGRyZXNzIGJlZm9yZSBkb2luZyBhbnkgb3BlcmF0aW9uLiAgVGhlIGVhc2llc3QKK3dheSB0byBkbyBzbyBpczoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGNhdCA+fi8uZ2l0Y29uZmlnIDw8XEVPRgotW3VzZXJdCi0JbmFtZSA9IFlvdXIgTmFtZSBDb21lcyBIZXJlCi0JZW1haWwgPSB5b3VAeW91cmRvbWFpbi5leGFtcGxlLmNvbQotRU9GCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICJZb3VyIE5hbWUgQ29tZXMgSGVyZSIKKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUB5b3VyZG9tYWluLmV4YW1wbGUuY29tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCkBAIC0yMTEsNyArMjA5LDcgQEAKIG1hZGUgaW4gZWFjaC4gIFRvIG1lcmdlIHRoZSBjaGFuZ2VzIG1hZGUgaW4gZXhwZXJpbWVudGFsIGludG8gbWFzdGVyLCBydW4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBwdWxsIC4gZXhwZXJpbWVudGFsCiskIGdpdCBtZXJnZSBleHBlcmltZW50YWwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJZiB0aGUgY2hhbmdlcyBkb24ndCBjb25mbGljdCwgeW91J3JlIGRvbmUuICBJZiB0aGVyZSBhcmUgY29uZmxpY3RzLApAQCAtMjk3LDQ2ICsyOTUsNTEgQEAKIFRoZSAicHVsbCIgY29tbWFuZCB0aHVzIHBlcmZvcm1zIHR3byBvcGVyYXRpb25zOiBpdCBmZXRjaGVzIGNoYW5nZXMKIGZyb20gYSByZW1vdGUgYnJhbmNoLCB0aGVuIG1lcmdlcyB0aGVtIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLgogCi1Zb3UgY2FuIHBlcmZvcm0gdGhlIGZpcnN0IG9wZXJhdGlvbiBhbG9uZSB1c2luZyB0aGUgImdpdCBmZXRjaCIKLWNvbW1hbmQuICBGb3IgZXhhbXBsZSwgQWxpY2UgY291bGQgY3JlYXRlIGEgdGVtcG9yYXJ5IGJyYW5jaCBqdXN0IHRvCi10cmFjayBCb2IncyBjaGFuZ2VzLCB3aXRob3V0IG1lcmdpbmcgdGhlbSB3aXRoIGhlciBvd24sIHVzaW5nOgorV2hlbiB5b3UgYXJlIHdvcmtpbmcgaW4gYSBzbWFsbCBjbG9zZWx5IGtuaXQgZ3JvdXAsIGl0IGlzIG5vdAordW51c3VhbCB0byBpbnRlcmFjdCB3aXRoIHRoZSBzYW1lIHJlcG9zaXRvcnkgb3ZlciBhbmQgb3ZlcgorYWdhaW4uICBCeSBkZWZpbmluZyAncmVtb3RlJyByZXBvc2l0b3J5IHNob3J0aGFuZCwgeW91IGNhbiBtYWtlCitpdCBlYXNpZXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCBib2IgL2hvbWUvYm9iL215cmVwbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhpcywgeW91IGNhbiBwZXJmb3JtIHRoZSBmaXJzdCBvcGVyYXRpb24gYWxvbmUgdXNpbmcgdGhlCisiZ2l0IGZldGNoIiBjb21tYW5kIHdpdGhvdXQgbWVyZ2luZyB0aGVtIHdpdGggaGVyIG93biBicmFuY2gsCit1c2luZzoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgZmV0Y2ggL2hvbWUvYm9iL215cmVwbyBtYXN0ZXI6Ym9iLWluY29taW5nCiskIGdpdCBmZXRjaCBib2IKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotd2hpY2ggZmV0Y2hlcyB0aGUgY2hhbmdlcyBmcm9tIEJvYidzIG1hc3RlciBicmFuY2ggaW50byBhIG5ldyBicmFuY2gKLW5hbWVkIGJvYi1pbmNvbWluZy4gIFRoZW4KK1VubGlrZSB0aGUgbG9uZ2hhbmQgZm9ybSwgd2hlbiBBbGljZSBmZXRjaGVzIGZyb20gQm9iIHVzaW5nIGEKK3JlbW90ZSByZXBvc2l0b3J5IHNob3J0aGFuZCBzZXQgdXAgd2l0aCBgZ2l0IHJlbW90ZWAsIHdoYXQgd2FzCitmZXRjaGVkIGlzIHN0b3JlZCBpbiBhIHJlbW90ZSB0cmFja2luZyBicmFuY2gsIGluIHRoaXMgY2FzZQorYGJvYi9tYXN0ZXJgLiAgU28gYWZ0ZXIgdGhpczoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgbG9nIC1wIG1hc3Rlci4uYm9iLWluY29taW5nCiskIGdpdCBsb2cgLXAgbWFzdGVyLi5ib2IvbWFzdGVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHNob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGNoYW5nZXMgdGhhdCBCb2IgbWFkZSBzaW5jZSBoZSBicmFuY2hlZCBmcm9tCiBBbGljZSdzIG1hc3RlciBicmFuY2guCiAKLUFmdGVyIGV4YW1pbmluZyB0aG9zZSBjaGFuZ2VzLCBhbmQgcG9zc2libHkgZml4aW5nIHRoaW5ncywgQWxpY2UKLWNvdWxkIHB1bGwgdGhlIGNoYW5nZXMgaW50byBoZXIgbWFzdGVyIGJyYW5jaDoKK0FmdGVyIGV4YW1pbmluZyB0aG9zZSBjaGFuZ2VzLCBBbGljZQorY291bGQgbWVyZ2UgdGhlIGNoYW5nZXMgaW50byBoZXIgbWFzdGVyIGJyYW5jaDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY2hlY2tvdXQgbWFzdGVyCi0kIGdpdCBwdWxsIC4gYm9iLWluY29taW5nCiskIGdpdCBtZXJnZSBib2IvbWFzdGVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBsYXN0IGNvbW1hbmQgaXMgYSBwdWxsIGZyb20gdGhlICJib2ItaW5jb21pbmciIGJyYW5jaCBpbiBBbGljZSdzCi1vd24gcmVwb3NpdG9yeS4KLQotQWxpY2UgY291bGQgYWxzbyBwZXJmb3JtIGJvdGggc3RlcHMgYXQgb25jZSB3aXRoOgorVGhpcyBgbWVyZ2VgIGNhbiBhbHNvIGJlIGRvbmUgYnkgJ3B1bGxpbmcgZnJvbSBoZXIgb3duIHJlbW90ZQordHJhY2tpbmcgYnJhbmNoJywgbGlrZSB0aGlzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdCBwdWxsIC9ob21lL2JvYi9teXJlcG8gbWFzdGVyOmJvYi1pbmNvbWluZworJCBnaXQgcHVsbCAuIHJlbW90ZXMvYm9iL21hc3RlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIGlzIGp1c3QgbGlrZSB0aGUgImdpdCBwdWxsIC9ob21lL2JvYi9teXJlcG8gbWFzdGVyIiB0aGF0IHdlIHNhdwotYmVmb3JlLCBleGNlcHQgdGhhdCBpdCBhbHNvIHN0b3JlcyB0aGUgdW5tZXJnZWQgY2hhbmdlcyBmcm9tIGJvYidzCi1tYXN0ZXIgYnJhbmNoIGluIGJvYi1pbmNvbWluZyBiZWZvcmUgbWVyZ2luZyB0aGVtIGludG8gQWxpY2UncwotY3VycmVudCBicmFuY2guICBOb3RlIHRoYXQgZ2l0IHB1bGwgYWx3YXlzIG1lcmdlcyBpbnRvIHRoZSBjdXJyZW50Ci1icmFuY2gsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBlbHNlIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kbGluZS4KK05vdGUgdGhhdCBnaXQgcHVsbCBhbHdheXMgbWVyZ2VzIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLAorcmVnYXJkbGVzcyBvZiB3aGF0IGVsc2UgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmRsaW5lLgogCiBMYXRlciwgQm9iIGNhbiB1cGRhdGUgaGlzIHJlcG8gd2l0aCBBbGljZSdzIGxhdGVzdCBjaGFuZ2VzIHVzaW5nCiAKQEAgLTM1MCwxMiArMzUzLDEyIEBACiB1c2VkIGZvciBwdWxsczoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgcmVwby1jb25maWcgLS1nZXQgcmVtb3RlLm9yaWdpbi51cmwKKyQgZ2l0IGNvbmZpZyAtLWdldCByZW1vdGUub3JpZ2luLnVybAogL2hvbWUvYm9iL215cmVwbwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAoVGhlIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gY3JlYXRlZCBieSBnaXQtY2xvbmUgaXMgdmlzaWJsZSB1c2luZwotImdpdCByZXBvLWNvbmZpZyAtbCIsIGFuZCB0aGUgZ2l0bGluazpnaXQtcmVwby1jb25maWdbMV0gbWFuIHBhZ2UKKyJnaXQgY29uZmlnIC1sIiwgYW5kIHRoZSBnaXRsaW5rOmdpdC1jb25maWdbMV0gbWFuIHBhZ2UKIGV4cGxhaW5zIHRoZSBtZWFuaW5nIG9mIGVhY2ggb3B0aW9uLikKIAogR2l0IGFsc28ga2VlcHMgYSBwcmlzdGluZSBjb3B5IG9mIEFsaWNlJ3MgbWFzdGVyIGJyYW5jaCB1bmRlciB0aGUKZGlmZiAtLWdpdCBhL0dJVC1WRVJTSU9OLUdFTiBiL0dJVC1WRVJTSU9OLUdFTgppbmRleCA4NTAyZTRjLi5lMGFkYzM0IDEwMDc1NQotLS0gYS9HSVQtVkVSU0lPTi1HRU4KKysrIGIvR0lULVZFUlNJT04tR0VOCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIEdWRj1HSVQtVkVSU0lPTi1GSUxFCi1ERUZfVkVSPXYxLjUuMC1yYzEuR0lUCitERUZfVkVSPXYxLjUuMC1yYzIuR0lUCiAKIExGPScKICcKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggODQzMmFiOC4uOTFiZDY2NSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiAjIC4uLiBhbmQgYWxsIHRoZSByZXN0IHRoYXQgY291bGQgYmUgbW92ZWQgb3V0IG9mIGJpbmRpciB0byBnaXRleGVjZGlyCiBQUk9HUkFNUyA9IFwKLQlnaXQtY29udmVydC1vYmplY3RzJFggZ2l0LWZldGNoLXBhY2skWCBnaXQtZnNjay1vYmplY3RzJFggXAorCWdpdC1jb252ZXJ0LW9iamVjdHMkWCBnaXQtZmV0Y2gtcGFjayRYIGdpdC1mc2NrJFggXAogCWdpdC1oYXNoLW9iamVjdCRYIGdpdC1pbmRleC1wYWNrJFggZ2l0LWxvY2FsLWZldGNoJFggXAogCWdpdC1tZXJnZS1iYXNlJFggXAogCWdpdC1kYWVtb24kWCBcCkBAIC0yMTMsNyArMjEzLDggQEAKIAogQlVJTFRfSU5TID0gXAogCWdpdC1mb3JtYXQtcGF0Y2gkWCBnaXQtc2hvdyRYIGdpdC13aGF0Y2hhbmdlZCRYIGdpdC1jaGVycnkkWCBcCi0JZ2l0LWdldC10YXItY29tbWl0LWlkJFggZ2l0LWluaXQkWCBcCisJZ2l0LWdldC10YXItY29tbWl0LWlkJFggZ2l0LWluaXQkWCBnaXQtcmVwby1jb25maWckWCBcCisJZ2l0LWZzY2stb2JqZWN0cyRYIFwKIAkkKHBhdHN1YnN0IGJ1aWx0aW4tJS5vLGdpdC0lJFgsJChCVUlMVElOX09CSlMpKQogCiAjIHdoYXQgJ2FsbCcgd2lsbCBidWlsZCBhbmQgJ2luc3RhbGwnIHdpbGwgaW5zdGFsbCwgaW4gZ2l0ZXhlY2RpcgpAQCAtMjQxLDcgKzI0Miw3IEBACiAJZGlmZi5oIG9iamVjdC5oIHBhY2suaCBwa3QtbGluZS5oIHF1b3RlLmggcmVmcy5oIGxpc3Qtb2JqZWN0cy5oIHNpZGViYW5kLmggXAogCXJ1bi1jb21tYW5kLmggc3RyYnVmLmggdGFnLmggdHJlZS5oIGdpdC1jb21wYXQtdXRpbC5oIHJldmlzaW9uLmggXAogCXRyZWUtd2Fsay5oIGxvZy10cmVlLmggZGlyLmggcGF0aC1saXN0LmggdW5wYWNrLXRyZWVzLmggYnVpbHRpbi5oIFwKLQl1dGY4LmgKKwl1dGY4LmggcmVmbG9nLXdhbGsuaAogCiBESUZGX09CSlMgPSBcCiAJZGlmZi5vIGRpZmYtbGliLm8gZGlmZmNvcmUtYnJlYWsubyBkaWZmY29yZS1vcmRlci5vIFwKQEAgLTI1NCw3ICsyNTUsNyBAQAogCWludGVycG9sYXRlLm8gXAogCWxvY2tmaWxlLm8gXAogCW9iamVjdC5vIHBhY2stY2hlY2subyBwYXRjaC1kZWx0YS5vIHBhdGgubyBwa3QtbGluZS5vIHNpZGViYW5kLm8gXAotCXJlYWNoYWJsZS5vIFwKKwlyZWFjaGFibGUubyByZWZsb2ctd2Fsay5vIFwKIAlxdW90ZS5vIHJlYWQtY2FjaGUubyByZWZzLm8gcnVuLWNvbW1hbmQubyBkaXIubyBvYmplY3QtcmVmcy5vIFwKIAlzZXJ2ZXItaW5mby5vIHNldHVwLm8gc2hhMV9maWxlLm8gc2hhMV9uYW1lLm8gc3RyYnVmLm8gXAogCXRhZy5vIHRyZWUubyB1c2FnZS5vIGNvbmZpZy5vIGVudmlyb25tZW50Lm8gY3R5cGUubyBjb3B5Lm8gXApAQCAtMjgzLDYgKzI4NCw3IEBACiAJYnVpbHRpbi1kaWZmLXRyZWUubyBcCiAJYnVpbHRpbi1mbXQtbWVyZ2UtbXNnLm8gXAogCWJ1aWx0aW4tZm9yLWVhY2gtcmVmLm8gXAorCWJ1aWx0aW4tZnNjay5vIFwKIAlidWlsdGluLWdyZXAubyBcCiAJYnVpbHRpbi1pbml0LWRiLm8gXAogCWJ1aWx0aW4tbG9nLm8gXApAQCAtMjk5LDcgKzMwMSw3IEBACiAJYnVpbHRpbi1wdXNoLm8gXAogCWJ1aWx0aW4tcmVhZC10cmVlLm8gXAogCWJ1aWx0aW4tcmVmbG9nLm8gXAotCWJ1aWx0aW4tcmVwby1jb25maWcubyBcCisJYnVpbHRpbi1jb25maWcubyBcCiAJYnVpbHRpbi1yZXJlcmUubyBcCiAJYnVpbHRpbi1yZXYtbGlzdC5vIFwKIAlidWlsdGluLXJldi1wYXJzZS5vIFwKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCBjZWU3ZTQzLi40NDExNjdjIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0zLDYgKzMsNyBAQAogCUdJVCAtIHRoZSBzdHVwaWQgY29udGVudCB0cmFja2VyCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogImdpdCIgY2FuIG1lYW4gYW55dGhpbmcsIGRlcGVuZGluZyBvbiB5b3VyIG1vb2QuCiAKICAtIHJhbmRvbSB0aHJlZS1sZXR0ZXIgY29tYmluYXRpb24gdGhhdCBpcyBwcm9ub3VuY2VhYmxlLCBhbmQgbm90CkBAIC0xMSw1NzkgKzEyLDI5IEBACiAgLSBzdHVwaWQuIGNvbnRlbXB0aWJsZSBhbmQgZGVzcGljYWJsZS4gc2ltcGxlLiBUYWtlIHlvdXIgcGljayBmcm9tIHRoZQogICAgZGljdGlvbmFyeSBvZiBzbGFuZy4KICAtICJnbG9iYWwgaW5mb3JtYXRpb24gdHJhY2tlciI6IHlvdSdyZSBpbiBhIGdvb2QgbW9vZCwgYW5kIGl0IGFjdHVhbGx5Ci0gICB3b3JrcyBmb3IgeW91LiBBbmdlbHMgc2luZywgYW5kIGEgbGlnaHQgc3VkZGVubHkgZmlsbHMgdGhlIHJvb20uIAorICAgd29ya3MgZm9yIHlvdS4gQW5nZWxzIHNpbmcsIGFuZCBhIGxpZ2h0IHN1ZGRlbmx5IGZpbGxzIHRoZSByb29tLgogIC0gImdvZGRhbW4gaWRpb3RpYyB0cnVja2xvYWQgb2Ygc2gqdCI6IHdoZW4gaXQgYnJlYWtzCiAKLVRoaXMgaXMgYSBzdHVwaWQgKGJ1dCBleHRyZW1lbHkgZmFzdCkgZGlyZWN0b3J5IGNvbnRlbnQgbWFuYWdlci4gIEl0Ci1kb2Vzbid0IGRvIGEgd2hvbGUgbG90LCBidXQgd2hhdCBpdCAnZG9lcycgZG8gaXMgdHJhY2sgZGlyZWN0b3J5Ci1jb250ZW50cyBlZmZpY2llbnRseS4gCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KIAotVGhlcmUgYXJlIHR3byBvYmplY3QgYWJzdHJhY3Rpb25zOiB0aGUgIm9iamVjdCBkYXRhYmFzZSIsIGFuZCB0aGUKLSJjdXJyZW50IGRpcmVjdG9yeSBjYWNoZSIgYWthICJpbmRleCIuCitHaXQgaXMgYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0l0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgd2l0aCBoZWxwIG9mIGEgZ3JvdXAgb2YKK2hhY2tlcnMgYXJvdW5kIHRoZSBuZXQuIEl0IGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEp1bmlvIEMgSGFtYW5vLgogCi1UaGUgT2JqZWN0IERhdGFiYXNlCi1+fn5+fn5+fn5+fn5+fn5+fn5+Ci1UaGUgb2JqZWN0IGRhdGFiYXNlIGlzIGxpdGVyYWxseSBqdXN0IGEgY29udGVudC1hZGRyZXNzYWJsZSBjb2xsZWN0aW9uCi1vZiBvYmplY3RzLiAgQWxsIG9iamVjdHMgYXJlIG5hbWVkIGJ5IHRoZWlyIGNvbnRlbnQsIHdoaWNoIGlzCi1hcHByb3hpbWF0ZWQgYnkgdGhlIFNIQTEgaGFzaCBvZiB0aGUgb2JqZWN0IGl0c2VsZi4gIE9iamVjdHMgbWF5IHJlZmVyCi10byBvdGhlciBvYmplY3RzIChieSByZWZlcmVuY2luZyB0aGVpciBTSEExIGhhc2gpLCBhbmQgc28geW91IGNhbgotYnVpbGQgdXAgYSBoaWVyYXJjaHkgb2Ygb2JqZWN0cy4KK1BsZWFzZSByZWFkIHRoZSBmaWxlIElOU1RBTEwgZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCitTZWUgRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQgdG8gZ2V0IHN0YXJ0ZWQsIHRoZW4gc2VlCitEb2N1bWVudGF0aW9uL2V2ZXJ5ZGF5LnR4dCBmb3IgYSB1c2VmdWwgbWluaW11bSBzZXQgb2YgY29tbWFuZHMsCithbmQgIm1hbiBnaXQtY29tbWFuZG5hbWUiIGZvciBkb2N1bWVudGF0aW9uIG9mIGVhY2ggY29tbWFuZC4KK0NWUyB1c2VycyBtYXkgYWxzbyB3YW50IHRvIHJlYWQgRG9jdW1lbnRhdGlvbi9jdnMtbWlncmF0aW9uLnR4dC4KIAotQWxsIG9iamVjdHMgaGF2ZSBhIHN0YXRpY2FsbHkgZGV0ZXJtaW5lZCAidHlwZSIgYWthICJ0YWciLCB3aGljaCBpcwotZGV0ZXJtaW5lZCBhdCBvYmplY3QgY3JlYXRpb24gdGltZSwgYW5kIHdoaWNoIGlkZW50aWZpZXMgdGhlIGZvcm1hdCBvZgotdGhlIG9iamVjdCAoaS5lLiBob3cgaXQgaXMgdXNlZCwgYW5kIGhvdyBpdCBjYW4gcmVmZXIgdG8gb3RoZXIKLW9iamVjdHMpLiAgVGhlcmUgYXJlIGN1cnJlbnRseSBmb3VyIGRpZmZlcmVudCBvYmplY3QgdHlwZXM6ICJibG9iIiwKLSJ0cmVlIiwgImNvbW1pdCIgYW5kICJ0YWciLgorTWFueSBHaXQgb25saW5lIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZSBmcm9tIGh0dHA6Ly9naXQub3IuY3ovCitpbmNsdWRpbmcgZnVsbCBkb2N1bWVudGF0aW9uIGFuZCBHaXQgcmVsYXRlZCB0b29scy4KIAotQSAiYmxvYiIgb2JqZWN0IGNhbm5vdCByZWZlciB0byBhbnkgb3RoZXIgb2JqZWN0LCBhbmQgaXMsIGxpa2UgdGhlIHR5cGUKLWltcGxpZXMsIGEgcHVyZSBzdG9yYWdlIG9iamVjdCBjb250YWluaW5nIHNvbWUgdXNlciBkYXRhLiAgSXQgaXMgdXNlZCB0bwotYWN0dWFsbHkgc3RvcmUgdGhlIGZpbGUgZGF0YSwgaS5lLiBhIGJsb2Igb2JqZWN0IGlzIGFzc29jaWF0ZWQgd2l0aCBzb21lCi1wYXJ0aWN1bGFyIHZlcnNpb24gb2Ygc29tZSBmaWxlLiAKLQotQSAidHJlZSIgb2JqZWN0IGlzIGFuIG9iamVjdCB0aGF0IHRpZXMgb25lIG9yIG1vcmUgImJsb2IiIG9iamVjdHMgaW50byBhCi1kaXJlY3Rvcnkgc3RydWN0dXJlLiBJbiBhZGRpdGlvbiwgYSB0cmVlIG9iamVjdCBjYW4gcmVmZXIgdG8gb3RoZXIgdHJlZQotb2JqZWN0cywgdGh1cyBjcmVhdGluZyBhIGRpcmVjdG9yeSBoaWVyYXJjaHkuIAotCi1BICJjb21taXQiIG9iamVjdCB0aWVzIHN1Y2ggZGlyZWN0b3J5IGhpZXJhcmNoaWVzIHRvZ2V0aGVyIGludG8KLWEgREFHIG9mIHJldmlzaW9ucyAtIGVhY2ggImNvbW1pdCIgaXMgYXNzb2NpYXRlZCB3aXRoIGV4YWN0bHkgb25lIHRyZWUKLSh0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeSBhdCB0aGUgdGltZSBvZiB0aGUgY29tbWl0KS4gSW4gYWRkaXRpb24sIGEKLSJjb21taXQiIHJlZmVycyB0byBvbmUgb3IgbW9yZSAicGFyZW50IiBjb21taXQgb2JqZWN0cyB0aGF0IGRlc2NyaWJlIHRoZQotaGlzdG9yeSBvZiBob3cgd2UgYXJyaXZlZCBhdCB0aGF0IGRpcmVjdG9yeSBoaWVyYXJjaHkuCi0KLUFzIGEgc3BlY2lhbCBjYXNlLCBhIGNvbW1pdCBvYmplY3Qgd2l0aCBubyBwYXJlbnRzIGlzIGNhbGxlZCB0aGUgInJvb3QiCi1vYmplY3QsIGFuZCBpcyB0aGUgcG9pbnQgb2YgYW4gaW5pdGlhbCBwcm9qZWN0IGNvbW1pdC4gIEVhY2ggcHJvamVjdAotbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSByb290LCBhbmQgd2hpbGUgeW91IGNhbiB0aWUgc2V2ZXJhbCBkaWZmZXJlbnQKLXJvb3Qgb2JqZWN0cyB0b2dldGhlciBpbnRvIG9uZSBwcm9qZWN0IGJ5IGNyZWF0aW5nIGEgY29tbWl0IG9iamVjdCB3aGljaAotaGFzIHR3byBvciBtb3JlIHNlcGFyYXRlIHJvb3RzIGFzIGl0cyB1bHRpbWF0ZSBwYXJlbnRzLCB0aGF0J3MgcHJvYmFibHkKLWp1c3QgZ29pbmcgdG8gY29uZnVzZSBwZW9wbGUuICBTbyBhaW0gZm9yIHRoZSBub3Rpb24gb2YgIm9uZSByb290IG9iamVjdAotcGVyIHByb2plY3QiLCBldmVuIGlmIGdpdCBpdHNlbGYgZG9lcyBub3QgZW5mb3JjZSB0aGF0LiAKLQotQSAidGFnIiBvYmplY3Qgc3ltYm9saWNhbGx5IGlkZW50aWZpZXMgYW5kIGNhbiBiZSB1c2VkIHRvIHNpZ24gb3RoZXIKLW9iamVjdHMuIEl0IGNvbnRhaW5zIHRoZSBpZGVudGlmaWVyIGFuZCB0eXBlIG9mIGFub3RoZXIgb2JqZWN0LCBhCi1zeW1ib2xpYyBuYW1lIChvZiBjb3Vyc2UhKSBhbmQsIG9wdGlvbmFsbHksIGEgc2lnbmF0dXJlLgotCi1SZWdhcmRsZXNzIG9mIG9iamVjdCB0eXBlLCBhbGwgb2JqZWN0cyBzaGFyZSB0aGUgZm9sbG93aW5nCi1jaGFyYWN0ZXJpc3RpY3M6IHRoZXkgYXJlIGFsbCBkZWZsYXRlZCB3aXRoIHpsaWIsIGFuZCBoYXZlIGEgaGVhZGVyCi10aGF0IG5vdCBvbmx5IHNwZWNpZmllcyB0aGVpciB0eXBlLCBidXQgYWxzbyBwcm92aWRlcyBzaXplIGluZm9ybWF0aW9uCi1hYm91dCB0aGUgZGF0YSBpbiB0aGUgb2JqZWN0LiAgSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgU0hBMSBoYXNoCi10aGF0IGlzIHVzZWQgdG8gbmFtZSB0aGUgb2JqZWN0IGlzIHRoZSBoYXNoIG9mIHRoZSBvcmlnaW5hbCBkYXRhCi1wbHVzIHRoaXMgaGVhZGVyLCBzbyBgc2hhMXN1bWAgJ2ZpbGUnIGRvZXMgbm90IG1hdGNoIHRoZSBvYmplY3QgbmFtZQotZm9yICdmaWxlJy4KLShIaXN0b3JpY2FsIG5vdGU6IGluIHRoZSBkYXduIG9mIHRoZSBhZ2Ugb2YgZ2l0IHRoZSBoYXNoCi13YXMgdGhlIHNoYTEgb2YgdGhlICdjb21wcmVzc2VkJyBvYmplY3QuKQotCi1BcyBhIHJlc3VsdCwgdGhlIGdlbmVyYWwgY29uc2lzdGVuY3kgb2YgYW4gb2JqZWN0IGNhbiBhbHdheXMgYmUgdGVzdGVkCi1pbmRlcGVuZGVudGx5IG9mIHRoZSBjb250ZW50cyBvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0OiBhbGwgb2JqZWN0cyBjYW4KLWJlIHZhbGlkYXRlZCBieSB2ZXJpZnlpbmcgdGhhdCAoYSkgdGhlaXIgaGFzaGVzIG1hdGNoIHRoZSBjb250ZW50IG9mIHRoZQotZmlsZSBhbmQgKGIpIHRoZSBvYmplY3Qgc3VjY2Vzc2Z1bGx5IGluZmxhdGVzIHRvIGEgc3RyZWFtIG9mIGJ5dGVzIHRoYXQKLWZvcm1zIGEgc2VxdWVuY2Ugb2YgPGFzY2lpIHR5cGUgd2l0aG91dCBzcGFjZT4gKyA8c3BhY2U+ICsgPGFzY2lpIGRlY2ltYWwKLXNpemU+ICsgPGJ5dGVcMD4gKyA8YmluYXJ5IG9iamVjdCBkYXRhPi4gCi0KLVRoZSBzdHJ1Y3R1cmVkIG9iamVjdHMgY2FuIGZ1cnRoZXIgaGF2ZSB0aGVpciBzdHJ1Y3R1cmUgYW5kCi1jb25uZWN0aXZpdHkgdG8gb3RoZXIgb2JqZWN0cyB2ZXJpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSB3aXRoCi10aGUgYGdpdC1mc2NrLW9iamVjdHNgIHByb2dyYW0sIHdoaWNoIGdlbmVyYXRlcyBhIGZ1bGwgZGVwZW5kZW5jeSBncmFwaAotb2YgYWxsIG9iamVjdHMsIGFuZCB2ZXJpZmllcyB0aGVpciBpbnRlcm5hbCBjb25zaXN0ZW5jeSAoaW4gYWRkaXRpb24KLXRvIGp1c3QgdmVyaWZ5aW5nIHRoZWlyIHN1cGVyZmljaWFsIGNvbnNpc3RlbmN5IHRocm91Z2ggdGhlIGhhc2gpLgotCi1UaGUgb2JqZWN0IHR5cGVzIGluIHNvbWUgbW9yZSBkZXRhaWw6Ci0KLUJsb2IgT2JqZWN0Ci1+fn5+fn5+fn5+fgotQSAiYmxvYiIgb2JqZWN0IGlzIG5vdGhpbmcgYnV0IGEgYmluYXJ5IGJsb2Igb2YgZGF0YSwgYW5kIGRvZXNuJ3QKLXJlZmVyIHRvIGFueXRoaW5nIGVsc2UuICBUaGVyZSBpcyBubyBzaWduYXR1cmUgb3IgYW55IG90aGVyCi12ZXJpZmljYXRpb24gb2YgdGhlIGRhdGEsIHNvIHdoaWxlIHRoZSBvYmplY3QgaXMgY29uc2lzdGVudCAoaXQgJ2lzJwotaW5kZXhlZCBieSBpdHMgc2hhMSBoYXNoLCBzbyB0aGUgZGF0YSBpdHNlbGYgaXMgY2VydGFpbmx5IGNvcnJlY3QpLCBpdAotaGFzIGFic29sdXRlbHkgbm8gb3RoZXIgYXR0cmlidXRlcy4gIE5vIG5hbWUgYXNzb2NpYXRpb25zLCBubwotcGVybWlzc2lvbnMuICBJdCBpcyBwdXJlbHkgYSBibG9iIG9mIGRhdGEgKGkuZS4gbm9ybWFsbHkgImZpbGUKLWNvbnRlbnRzIikuCi0KLUluIHBhcnRpY3VsYXIsIHNpbmNlIHRoZSBibG9iIGlzIGVudGlyZWx5IGRlZmluZWQgYnkgaXRzIGRhdGEsIGlmIHR3bwotZmlsZXMgaW4gYSBkaXJlY3RvcnkgdHJlZSAob3IgaW4gbXVsdGlwbGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZQotcmVwb3NpdG9yeSkgaGF2ZSB0aGUgc2FtZSBjb250ZW50cywgdGhleSB3aWxsIHNoYXJlIHRoZSBzYW1lIGJsb2IKLW9iamVjdC4gVGhlIG9iamVjdCBpcyB0b3RhbGx5IGluZGVwZW5kZW50IG9mIGl0cyBsb2NhdGlvbiBpbiB0aGUKLWRpcmVjdG9yeSB0cmVlLCBhbmQgcmVuYW1pbmcgYSBmaWxlIGRvZXMgbm90IGNoYW5nZSB0aGUgb2JqZWN0IHRoYXQKLWZpbGUgaXMgYXNzb2NpYXRlZCB3aXRoIGluIGFueSB3YXkuCi0KLUEgYmxvYiBpcyB0eXBpY2FsbHkgY3JlYXRlZCB3aGVuIGdpdGxpbms6Z2l0LXVwZGF0ZS1pbmRleFsxXQotaXMgcnVuLCBhbmQgaXRzIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGJ5IGdpdGxpbms6Z2l0LWNhdC1maWxlWzFdLgotCi1UcmVlIE9iamVjdAotfn5+fn5+fn5+fn4KLVRoZSBuZXh0IGhpZXJhcmNoaWNhbCBvYmplY3QgdHlwZSBpcyB0aGUgInRyZWUiIG9iamVjdC4gIEEgdHJlZSBvYmplY3QKLWlzIGEgbGlzdCBvZiBtb2RlL25hbWUvYmxvYiBkYXRhLCBzb3J0ZWQgYnkgbmFtZS4gIEFsdGVybmF0aXZlbHksIHRoZQotbW9kZSBkYXRhIG1heSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG1vZGUsIGluIHdoaWNoIGNhc2UgaW5zdGVhZCBvZgotbmFtaW5nIGEgYmxvYiwgdGhhdCBuYW1lIGlzIGFzc29jaWF0ZWQgd2l0aCBhbm90aGVyIFRSRUUgb2JqZWN0LgotCi1MaWtlIHRoZSAiYmxvYiIgb2JqZWN0LCBhIHRyZWUgb2JqZWN0IGlzIHVuaXF1ZWx5IGRldGVybWluZWQgYnkgdGhlCi1zZXQgY29udGVudHMsIGFuZCBzbyB0d28gc2VwYXJhdGUgYnV0IGlkZW50aWNhbCB0cmVlcyB3aWxsIGFsd2F5cwotc2hhcmUgdGhlIGV4YWN0IHNhbWUgb2JqZWN0LiBUaGlzIGlzIHRydWUgYXQgYWxsIGxldmVscywgaS5lLiBpdCdzCi10cnVlIGZvciBhICJsZWFmIiB0cmVlICh3aGljaCBkb2VzIG5vdCByZWZlciB0byBhbnkgb3RoZXIgdHJlZXMsIG9ubHkKLWJsb2JzKSBhcyB3ZWxsIGFzIGZvciBhIHdob2xlIHN1YmRpcmVjdG9yeS4KLQotRm9yIHRoYXQgcmVhc29uIGEgInRyZWUiIG9iamVjdCBpcyBqdXN0IGEgcHVyZSBkYXRhIGFic3RyYWN0aW9uOiBpdAotaGFzIG5vIGhpc3RvcnksIG5vIHNpZ25hdHVyZXMsIG5vIHZlcmlmaWNhdGlvbiBvZiB2YWxpZGl0eSwgZXhjZXB0Ci10aGF0IHNpbmNlIHRoZSBjb250ZW50cyBhcmUgYWdhaW4gcHJvdGVjdGVkIGJ5IHRoZSBoYXNoIGl0c2VsZiwgd2UgY2FuCi10cnVzdCB0aGF0IHRoZSB0cmVlIGlzIGltbXV0YWJsZSBhbmQgaXRzIGNvbnRlbnRzIG5ldmVyIGNoYW5nZS4KLQotU28geW91IGNhbiB0cnVzdCB0aGUgY29udGVudHMgb2YgYSB0cmVlIHRvIGJlIHZhbGlkLCB0aGUgc2FtZSB3YXkgeW91Ci1jYW4gdHJ1c3QgdGhlIGNvbnRlbnRzIG9mIGEgYmxvYiwgYnV0IHlvdSBkb24ndCBrbm93IHdoZXJlIHRob3NlCi1jb250ZW50cyAnY2FtZScgZnJvbS4KLQotU2lkZSBub3RlIG9uIHRyZWVzOiBzaW5jZSBhICJ0cmVlIiBvYmplY3QgaXMgYSBzb3J0ZWQgbGlzdCBvZgotImZpbGVuYW1lK2NvbnRlbnQiLCB5b3UgY2FuIGNyZWF0ZSBhIGRpZmYgYmV0d2VlbiB0d28gdHJlZXMgd2l0aG91dAotYWN0dWFsbHkgaGF2aW5nIHRvIHVucGFjayB0d28gdHJlZXMuICBKdXN0IGlnbm9yZSBhbGwgY29tbW9uIHBhcnRzLAotYW5kIHlvdXIgZGlmZiB3aWxsIGxvb2sgcmlnaHQuICBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBlZmZlY3RpdmVseQotKGFuZCBlZmZpY2llbnRseSkgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFueSB0d28gcmFuZG9tIHRyZWVzIGJ5Ci1PKG4pIHdoZXJlICJuIiBpcyB0aGUgc2l6ZSBvZiB0aGUgZGlmZmVyZW5jZSwgcmF0aGVyIHRoYW4gdGhlIHNpemUgb2YKLXRoZSB0cmVlLgotCi1TaWRlIG5vdGUgMiBvbiB0cmVlczogc2luY2UgdGhlIG5hbWUgb2YgYSAiYmxvYiIgZGVwZW5kcyBlbnRpcmVseSBhbmQKLWV4Y2x1c2l2ZWx5IG9uIGl0cyBjb250ZW50cyAoaS5lLiB0aGVyZSBhcmUgbm8gbmFtZXMgb3IgcGVybWlzc2lvbnMKLWludm9sdmVkKSwgeW91IGNhbiBzZWUgdHJpdmlhbCByZW5hbWVzIG9yIHBlcm1pc3Npb24gY2hhbmdlcyBieQotbm90aWNpbmcgdGhhdCB0aGUgYmxvYiBzdGF5ZWQgdGhlIHNhbWUuICBIb3dldmVyLCByZW5hbWVzIHdpdGggZGF0YQotY2hhbmdlcyBuZWVkIGEgc21hcnRlciAiZGlmZiIgaW1wbGVtZW50YXRpb24uCi0KLUEgdHJlZSBpcyBjcmVhdGVkIHdpdGggZ2l0bGluazpnaXQtd3JpdGUtdHJlZVsxXSBhbmQKLWl0cyBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBieSBnaXRsaW5rOmdpdC1scy10cmVlWzFdLgotVHdvIHRyZWVzIGNhbiBiZSBjb21wYXJlZCB3aXRoIGdpdGxpbms6Z2l0LWRpZmYtdHJlZVsxXS4KLQotQ29tbWl0IE9iamVjdAotfn5+fn5+fn5+fn5+fgotVGhlICJjb21taXQiIG9iamVjdCBpcyBhbiBvYmplY3QgdGhhdCBpbnRyb2R1Y2VzIHRoZSBub3Rpb24gb2YKLWhpc3RvcnkgaW50byB0aGUgcGljdHVyZS4gIEluIGNvbnRyYXN0IHRvIHRoZSBvdGhlciBvYmplY3RzLCBpdAotZG9lc24ndCBqdXN0IGRlc2NyaWJlIHRoZSBwaHlzaWNhbCBzdGF0ZSBvZiBhIHRyZWUsIGl0IGRlc2NyaWJlcyBob3cKLXdlIGdvdCB0aGVyZSwgYW5kIHdoeS4KLQotQSAiY29tbWl0IiBpcyBkZWZpbmVkIGJ5IHRoZSB0cmVlLW9iamVjdCB0aGF0IGl0IHJlc3VsdHMgaW4sIHRoZQotcGFyZW50IGNvbW1pdHMgKHplcm8sIG9uZSBvciBtb3JlKSB0aGF0IGxlZCB1cCB0byB0aGF0IHBvaW50LCBhbmQgYQotY29tbWVudCBvbiB3aGF0IGhhcHBlbmVkLiAgQWdhaW4sIGEgY29tbWl0IGlzIG5vdCB0cnVzdGVkIHBlciBzZToKLXRoZSBjb250ZW50cyBhcmUgd2VsbC1kZWZpbmVkIGFuZCAic2FmZSIgZHVlIHRvIHRoZSBjcnlwdG9ncmFwaGljYWxseQotc3Ryb25nIHNpZ25hdHVyZXMgYXQgYWxsIGxldmVscywgYnV0IHRoZXJlIGlzIG5vIHJlYXNvbiB0byBiZWxpZXZlCi10aGF0IHRoZSB0cmVlIGlzICJnb29kIiBvciB0aGF0IHRoZSBtZXJnZSBpbmZvcm1hdGlvbiBtYWtlcyBzZW5zZS4KLVRoZSBwYXJlbnRzIGRvIG5vdCBoYXZlIHRvIGFjdHVhbGx5IGhhdmUgYW55IHJlbGF0aW9uc2hpcCB3aXRoIHRoZQotcmVzdWx0LCBmb3IgZXhhbXBsZS4KLQotTm90ZSBvbiBjb21taXRzOiB1bmxpa2UgcmVhbCBTQ00ncywgY29tbWl0cyBkbyBub3QgY29udGFpbgotcmVuYW1lIGluZm9ybWF0aW9uIG9yIGZpbGUgbW9kZSBjaGFuZ2UgaW5mb3JtYXRpb24uICBBbGwgb2YgdGhhdCBpcwotaW1wbGljaXQgaW4gdGhlIHRyZWVzIGludm9sdmVkICh0aGUgcmVzdWx0IHRyZWUsIGFuZCB0aGUgcmVzdWx0IHRyZWVzCi1vZiB0aGUgcGFyZW50cyksIGFuZCBkZXNjcmliaW5nIHRoYXQgbWFrZXMgbm8gc2Vuc2UgaW4gdGhpcyBpZGlvdGljCi1maWxlIG1hbmFnZXIuCi0KLUEgY29tbWl0IGlzIGNyZWF0ZWQgd2l0aCBnaXRsaW5rOmdpdC1jb21taXQtdHJlZVsxXSBhbmQKLWl0cyBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBieSBnaXRsaW5rOmdpdC1jYXQtZmlsZVsxXS4KLQotVHJ1c3QKLX5+fn5+Ci1BbiBhc2lkZSBvbiB0aGUgbm90aW9uIG9mICJ0cnVzdCIuIFRydXN0IGlzIHJlYWxseSBvdXRzaWRlIHRoZSBzY29wZQotb2YgImdpdCIsIGJ1dCBpdCdzIHdvcnRoIG5vdGluZyBhIGZldyB0aGluZ3MuICBGaXJzdCBvZmYsIHNpbmNlCi1ldmVyeXRoaW5nIGlzIGhhc2hlZCB3aXRoIFNIQTEsIHlvdSAnY2FuJyB0cnVzdCB0aGF0IGFuIG9iamVjdCBpcwotaW50YWN0IGFuZCBoYXMgbm90IGJlZW4gbWVzc2VkIHdpdGggYnkgZXh0ZXJuYWwgc291cmNlcy4gIFNvIHRoZSBuYW1lCi1vZiBhbiBvYmplY3QgdW5pcXVlbHkgaWRlbnRpZmllcyBhIGtub3duIHN0YXRlIC0ganVzdCBub3QgYSBzdGF0ZSB0aGF0Ci15b3UgbWF5IHdhbnQgdG8gdHJ1c3QuCi0KLUZ1cnRoZXJtb3JlLCBzaW5jZSB0aGUgU0hBMSBzaWduYXR1cmUgb2YgYSBjb21taXQgcmVmZXJzIHRvIHRoZQotU0hBMSBzaWduYXR1cmVzIG9mIHRoZSB0cmVlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBhbmQgdGhlIHNpZ25hdHVyZXMKLW9mIHRoZSBwYXJlbnQsIGEgc2luZ2xlIG5hbWVkIGNvbW1pdCBzcGVjaWZpZXMgdW5pcXVlbHkgYSB3aG9sZSBzZXQKLW9mIGhpc3RvcnksIHdpdGggZnVsbCBjb250ZW50cy4gIFlvdSBjYW4ndCBsYXRlciBmYWtlIGFueSBzdGVwIG9mIHRoZQotd2F5IG9uY2UgeW91IGhhdmUgdGhlIG5hbWUgb2YgYSBjb21taXQuCi0KLVNvIHRvIGludHJvZHVjZSBzb21lIHJlYWwgdHJ1c3QgaW4gdGhlIHN5c3RlbSwgdGhlIG9ubHkgdGhpbmcgeW91IG5lZWQKLXRvIGRvIGlzIHRvIGRpZ2l0YWxseSBzaWduIGp1c3QgJ29uZScgc3BlY2lhbCBub3RlLCB3aGljaCBpbmNsdWRlcyB0aGUKLW5hbWUgb2YgYSB0b3AtbGV2ZWwgY29tbWl0LiAgWW91ciBkaWdpdGFsIHNpZ25hdHVyZSBzaG93cyBvdGhlcnMKLXRoYXQgeW91IHRydXN0IHRoYXQgY29tbWl0LCBhbmQgdGhlIGltbXV0YWJpbGl0eSBvZiB0aGUgaGlzdG9yeSBvZgotY29tbWl0cyB0ZWxscyBvdGhlcnMgdGhhdCB0aGV5IGNhbiB0cnVzdCB0aGUgd2hvbGUgaGlzdG9yeS4KLQotSW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gZWFzaWx5IHZhbGlkYXRlIGEgd2hvbGUgYXJjaGl2ZSBieSBqdXN0Ci1zZW5kaW5nIG91dCBhIHNpbmdsZSBlbWFpbCB0aGF0IHRlbGxzIHRoZSBwZW9wbGUgdGhlIG5hbWUgKFNIQTEgaGFzaCkKLW9mIHRoZSB0b3AgY29tbWl0LCBhbmQgZGlnaXRhbGx5IHNpZ24gdGhhdCBlbWFpbCB1c2luZyBzb21ldGhpbmcKLWxpa2UgR1BHL1BHUC4KLQotVG8gYXNzaXN0IGluIHRoaXMsIGdpdCBhbHNvIHByb3ZpZGVzIHRoZSB0YWcgb2JqZWN0Li4uCi0KLVRhZyBPYmplY3QKLX5+fn5+fn5+fn4KLUdpdCBwcm92aWRlcyB0aGUgInRhZyIgb2JqZWN0IHRvIHNpbXBsaWZ5IGNyZWF0aW5nLCBtYW5hZ2luZyBhbmQKLWV4Y2hhbmdpbmcgc3ltYm9saWMgYW5kIHNpZ25lZCB0b2tlbnMuICBUaGUgInRhZyIgb2JqZWN0IGF0IGl0cwotc2ltcGxlc3Qgc2ltcGx5IHN5bWJvbGljYWxseSBpZGVudGlmaWVzIGFub3RoZXIgb2JqZWN0IGJ5IGNvbnRhaW5pbmcKLXRoZSBzaGExLCB0eXBlIGFuZCBzeW1ib2xpYyBuYW1lLgotCi1Ib3dldmVyIGl0IGNhbiBvcHRpb25hbGx5IGNvbnRhaW4gYWRkaXRpb25hbCBzaWduYXR1cmUgaW5mb3JtYXRpb24KLSh3aGljaCBnaXQgZG9lc24ndCBjYXJlIGFib3V0IGFzIGxvbmcgYXMgdGhlcmUncyBsZXNzIHRoYW4gOGsgb2YKLWl0KS4gVGhpcyBjYW4gdGhlbiBiZSB2ZXJpZmllZCBleHRlcm5hbGx5IHRvIGdpdC4KLQotTm90ZSB0aGF0IGRlc3BpdGUgdGhlIHRhZyBmZWF0dXJlcywgImdpdCIgaXRzZWxmIG9ubHkgaGFuZGxlcyBjb250ZW50Ci1pbnRlZ3JpdHk7IHRoZSB0cnVzdCBmcmFtZXdvcmsgKGFuZCBzaWduYXR1cmUgcHJvdmlzaW9uIGFuZAotdmVyaWZpY2F0aW9uKSBoYXMgdG8gY29tZSBmcm9tIG91dHNpZGUuCi0KLUEgdGFnIGlzIGNyZWF0ZWQgd2l0aCBnaXRsaW5rOmdpdC1ta3RhZ1sxXSwKLWl0cyBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBieSBnaXRsaW5rOmdpdC1jYXQtZmlsZVsxXSwKLWFuZCB0aGUgc2lnbmF0dXJlIGNhbiBiZSB2ZXJpZmllZCBieQotZ2l0bGluazpnaXQtdmVyaWZ5LXRhZ1sxXS4KLQotCi1UaGUgImluZGV4IiBha2EgIkN1cnJlbnQgRGlyZWN0b3J5IENhY2hlIgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBpbmRleCBpcyBhIHNpbXBsZSBiaW5hcnkgZmlsZSwgd2hpY2ggY29udGFpbnMgYW4gZWZmaWNpZW50Ci1yZXByZXNlbnRhdGlvbiBvZiBhIHZpcnR1YWwgZGlyZWN0b3J5IGNvbnRlbnQgYXQgc29tZSByYW5kb20gdGltZS4gIEl0Ci1kb2VzIHNvIGJ5IGEgc2ltcGxlIGFycmF5IHRoYXQgYXNzb2NpYXRlcyBhIHNldCBvZiBuYW1lcywgZGF0ZXMsCi1wZXJtaXNzaW9ucyBhbmQgY29udGVudCAoYWthICJibG9iIikgb2JqZWN0cyB0b2dldGhlci4gIFRoZSBjYWNoZSBpcwotYWx3YXlzIGtlcHQgb3JkZXJlZCBieSBuYW1lLCBhbmQgbmFtZXMgYXJlIHVuaXF1ZSAod2l0aCBhIGZldyB2ZXJ5Ci1zcGVjaWZpYyBydWxlcykgYXQgYW55IHBvaW50IGluIHRpbWUsIGJ1dCB0aGUgY2FjaGUgaGFzIG5vIGxvbmctdGVybQotbWVhbmluZywgYW5kIGNhbiBiZSBwYXJ0aWFsbHkgdXBkYXRlZCBhdCBhbnkgdGltZS4KLQotSW4gcGFydGljdWxhciwgdGhlIGluZGV4IGNlcnRhaW5seSBkb2VzIG5vdCBuZWVkIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAotdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGNvbnRlbnRzIChpbiBmYWN0LCBtb3N0IG9wZXJhdGlvbnMgd2lsbCBkZXBlbmQgb24KLWRpZmZlcmVudCB3YXlzIHRvIG1ha2UgdGhlIGluZGV4ICdub3QnIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZGlyZWN0b3J5Ci1oaWVyYXJjaHkpLCBidXQgaXQgaGFzIHRocmVlIHZlcnkgaW1wb3J0YW50IGF0dHJpYnV0ZXM6Ci0KLScoYSkgaXQgY2FuIHJlLWdlbmVyYXRlIHRoZSBmdWxsIHN0YXRlIGl0IGNhY2hlcyAobm90IGp1c3QgdGhlCi1kaXJlY3Rvcnkgc3RydWN0dXJlOiBpdCBjb250YWlucyBwb2ludGVycyB0byB0aGUgImJsb2IiIG9iamVjdHMgc28KLXRoYXQgaXQgY2FuIHJlZ2VuZXJhdGUgdGhlIGRhdGEgdG9vKScKLQotQXMgYSBzcGVjaWFsIGNhc2UsIHRoZXJlIGlzIGEgY2xlYXIgYW5kIHVuYW1iaWd1b3VzIG9uZS13YXkgbWFwcGluZwotZnJvbSBhIGN1cnJlbnQgZGlyZWN0b3J5IGNhY2hlIHRvIGEgInRyZWUgb2JqZWN0Iiwgd2hpY2ggY2FuIGJlCi1lZmZpY2llbnRseSBjcmVhdGVkIGZyb20ganVzdCB0aGUgY3VycmVudCBkaXJlY3RvcnkgY2FjaGUgd2l0aG91dAotYWN0dWFsbHkgbG9va2luZyBhdCBhbnkgb3RoZXIgZGF0YS4gIFNvIGEgZGlyZWN0b3J5IGNhY2hlIGF0IGFueSBvbmUKLXRpbWUgdW5pcXVlbHkgc3BlY2lmaWVzIG9uZSBhbmQgb25seSBvbmUgInRyZWUiIG9iamVjdCAoYnV0IGhhcwotYWRkaXRpb25hbCBkYXRhIHRvIG1ha2UgaXQgZWFzeSB0byBtYXRjaCB1cCB0aGF0IHRyZWUgb2JqZWN0IHdpdGggd2hhdAotaGFzIGhhcHBlbmVkIGluIHRoZSBkaXJlY3RvcnkpCi0KLScoYikgaXQgaGFzIGVmZmljaWVudCBtZXRob2RzIGZvciBmaW5kaW5nIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoYXQKLWNhY2hlZCBzdGF0ZSAoInRyZWUgb2JqZWN0IHdhaXRpbmcgdG8gYmUgaW5zdGFudGlhdGVkIikgYW5kIHRoZQotY3VycmVudCBzdGF0ZS4nCi0KLScoYykgaXQgY2FuIGFkZGl0aW9uYWxseSBlZmZpY2llbnRseSByZXByZXNlbnQgaW5mb3JtYXRpb24gYWJvdXQgbWVyZ2UKLWNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCB0cmVlIG9iamVjdHMsIGFsbG93aW5nIGVhY2ggcGF0aG5hbWUgdG8gYmUKLWFzc29jaWF0ZWQgd2l0aCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cmVlcyBpbnZvbHZlZCB0aGF0Ci15b3UgY2FuIGNyZWF0ZSBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIHRoZW0uJwotCi1UaG9zZSBhcmUgdGhlIHRocmVlIE9OTFkgdGhpbmdzIHRoYXQgdGhlIGRpcmVjdG9yeSBjYWNoZSBkb2VzLiAgSXQncyBhCi1jYWNoZSwgYW5kIHRoZSBub3JtYWwgb3BlcmF0aW9uIGlzIHRvIHJlLWdlbmVyYXRlIGl0IGNvbXBsZXRlbHkgZnJvbSBhCi1rbm93biB0cmVlIG9iamVjdCwgb3IgdXBkYXRlL2NvbXBhcmUgaXQgd2l0aCBhIGxpdmUgdHJlZSB0aGF0IGlzIGJlaW5nCi1kZXZlbG9wZWQuICBJZiB5b3UgYmxvdyB0aGUgZGlyZWN0b3J5IGNhY2hlIGF3YXkgZW50aXJlbHksIHlvdSBnZW5lcmFsbHkKLWhhdmVuJ3QgbG9zdCBhbnkgaW5mb3JtYXRpb24gYXMgbG9uZyBhcyB5b3UgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgdHJlZQotdGhhdCBpdCBkZXNjcmliZWQuIAotCi1BdCB0aGUgc2FtZSB0aW1lLCB0aGUgaW5kZXggaXMgYXQgdGhlIHNhbWUgdGltZSBhbHNvIHRoZQotc3RhZ2luZyBhcmVhIGZvciBjcmVhdGluZyBuZXcgdHJlZXMsIGFuZCBjcmVhdGluZyBhIG5ldyB0cmVlIGFsd2F5cwotaW52b2x2ZXMgYSBjb250cm9sbGVkIG1vZGlmaWNhdGlvbiBvZiB0aGUgaW5kZXggZmlsZS4gIEluIHBhcnRpY3VsYXIsCi10aGUgaW5kZXggZmlsZSBjYW4gaGF2ZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZXJtZWRpYXRlIHRyZWUgdGhhdAotaGFzIG5vdCB5ZXQgYmVlbiBpbnN0YW50aWF0ZWQuICBTbyB0aGUgaW5kZXggY2FuIGJlIHRob3VnaHQgb2YgYXMgYQotd3JpdGUtYmFjayBjYWNoZSwgd2hpY2ggY2FuIGNvbnRhaW4gZGlydHkgaW5mb3JtYXRpb24gdGhhdCBoYXMgbm90IHlldAotYmVlbiB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3RvcmUuCi0KLQotCi1UaGUgV29ya2Zsb3cKLS0tLS0tLS0tLS0tLQotR2VuZXJhbGx5LCBhbGwgImdpdCIgb3BlcmF0aW9ucyB3b3JrIG9uIHRoZSBpbmRleCBmaWxlLiBTb21lIG9wZXJhdGlvbnMKLXdvcmsgKnB1cmVseSogb24gdGhlIGluZGV4IGZpbGUgKHNob3dpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCi1pbmRleCksIGJ1dCBtb3N0IG9wZXJhdGlvbnMgbW92ZSBkYXRhIHRvIGFuZCBmcm9tIHRoZSBpbmRleCBmaWxlLiBFaXRoZXIKLWZyb20gdGhlIGRhdGFiYXNlIG9yIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiBUaHVzIHRoZXJlIGFyZSBmb3VyCi1tYWluIGNvbWJpbmF0aW9uczogCi0KLTEpIHdvcmtpbmcgZGlyZWN0b3J5IC0+IGluZGV4Ci1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1Zb3UgdXBkYXRlIHRoZSBpbmRleCB3aXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGgKLXRoZSBnaXRsaW5rOmdpdC11cGRhdGUtaW5kZXhbMV0gY29tbWFuZC4gIFlvdQotZ2VuZXJhbGx5IHVwZGF0ZSB0aGUgaW5kZXggaW5mb3JtYXRpb24gYnkganVzdCBzcGVjaWZ5aW5nIHRoZSBmaWxlbmFtZQoteW91IHdhbnQgdG8gdXBkYXRlLCBsaWtlIHNvOgotCi0JZ2l0LXVwZGF0ZS1pbmRleCBmaWxlbmFtZQotCi1idXQgdG8gYXZvaWQgY29tbW9uIG1pc3Rha2VzIHdpdGggZmlsZW5hbWUgZ2xvYmJpbmcgZXRjLCB0aGUgY29tbWFuZAotd2lsbCBub3Qgbm9ybWFsbHkgYWRkIHRvdGFsbHkgbmV3IGVudHJpZXMgb3IgcmVtb3ZlIG9sZCBlbnRyaWVzLAotaS5lLiBpdCB3aWxsIG5vcm1hbGx5IGp1c3QgdXBkYXRlIGV4aXN0aW5nIGNhY2hlIGVudHJpZXMuCi0KLVRvIHRlbGwgZ2l0IHRoYXQgeWVzLCB5b3UgcmVhbGx5IGRvIHJlYWxpemUgdGhhdCBjZXJ0YWluIGZpbGVzIG5vCi1sb25nZXIgZXhpc3QsIG9yIHRoYXQgbmV3IGZpbGVzIHNob3VsZCBiZSBhZGRlZCwgeW91Ci1zaG91bGQgdXNlIHRoZSBgLS1yZW1vdmVgIGFuZCBgLS1hZGRgIGZsYWdzIHJlc3BlY3RpdmVseS4KLQotTk9URSEgQSBgLS1yZW1vdmVgIGZsYWcgZG9lcyAnbm90JyBtZWFuIHRoYXQgc3Vic2VxdWVudCBmaWxlbmFtZXMgd2lsbAotbmVjZXNzYXJpbHkgYmUgcmVtb3ZlZDogaWYgdGhlIGZpbGVzIHN0aWxsIGV4aXN0IGluIHlvdXIgZGlyZWN0b3J5Ci1zdHJ1Y3R1cmUsIHRoZSBpbmRleCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGVpciBuZXcgc3RhdHVzLCBub3QKLXJlbW92ZWQuIFRoZSBvbmx5IHRoaW5nIGAtLXJlbW92ZWAgbWVhbnMgaXMgdGhhdCB1cGRhdGUtY2FjaGUgd2lsbCBiZQotY29uc2lkZXJpbmcgYSByZW1vdmVkIGZpbGUgdG8gYmUgYSB2YWxpZCB0aGluZywgYW5kIGlmIHRoZSBmaWxlIHJlYWxseQotZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIGl0IHdpbGwgdXBkYXRlIHRoZSBpbmRleCBhY2NvcmRpbmdseS4KLQotQXMgYSBzcGVjaWFsIGNhc2UsIHlvdSBjYW4gYWxzbyBkbyBgZ2l0LXVwZGF0ZS1pbmRleCAtLXJlZnJlc2hgLCB3aGljaAotd2lsbCByZWZyZXNoIHRoZSAic3RhdCIgaW5mb3JtYXRpb24gb2YgZWFjaCBpbmRleCB0byBtYXRjaCB0aGUgY3VycmVudAotc3RhdCBpbmZvcm1hdGlvbi4gSXQgd2lsbCAnbm90JyB1cGRhdGUgdGhlIG9iamVjdCBzdGF0dXMgaXRzZWxmLCBhbmQKLWl0IHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkcyB0aGF0IGFyZSB1c2VkIHRvIHF1aWNrbHkgdGVzdCB3aGV0aGVyCi1hbiBvYmplY3Qgc3RpbGwgbWF0Y2hlcyBpdHMgb2xkIGJhY2tpbmcgc3RvcmUgb2JqZWN0LgotCi0yKSBpbmRleCAtPiBvYmplY3QgZGF0YWJhc2UKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1Zb3Ugd3JpdGUgeW91ciBjdXJyZW50IGluZGV4IGZpbGUgdG8gYSAidHJlZSIgb2JqZWN0IHdpdGggdGhlIHByb2dyYW0KLQotCWdpdC13cml0ZS10cmVlCi0KLXRoYXQgZG9lc24ndCBjb21lIHdpdGggYW55IG9wdGlvbnMgLSBpdCB3aWxsIGp1c3Qgd3JpdGUgb3V0IHRoZQotY3VycmVudCBpbmRleCBpbnRvIHRoZSBzZXQgb2YgdHJlZSBvYmplY3RzIHRoYXQgZGVzY3JpYmUgdGhhdCBzdGF0ZSwKLWFuZCBpdCB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHRvcC1sZXZlbCB0cmVlLiBZb3UgY2FuCi11c2UgdGhhdCB0cmVlIHRvIHJlLWdlbmVyYXRlIHRoZSBpbmRleCBhdCBhbnkgdGltZSBieSBnb2luZyBpbiB0aGUKLW90aGVyIGRpcmVjdGlvbjoKLQotMykgb2JqZWN0IGRhdGFiYXNlIC0+IGluZGV4Ci1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotWW91IHJlYWQgYSAidHJlZSIgZmlsZSBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UsIGFuZCB1c2UgdGhhdCB0bwotcG9wdWxhdGUgKGFuZCBvdmVyd3JpdGUgLSBkb24ndCBkbyB0aGlzIGlmIHlvdXIgaW5kZXggY29udGFpbnMgYW55Ci11bnNhdmVkIHN0YXRlIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gcmVzdG9yZSBsYXRlciEpIHlvdXIgY3VycmVudAotaW5kZXguICBOb3JtYWwgb3BlcmF0aW9uIGlzIGp1c3QKLQotCQlnaXQtcmVhZC10cmVlIDxzaGExIG9mIHRyZWU+Ci0KLWFuZCB5b3VyIGluZGV4IGZpbGUgd2lsbCBub3cgYmUgZXF1aXZhbGVudCB0byB0aGUgdHJlZSB0aGF0IHlvdSBzYXZlZAotZWFybGllci4gSG93ZXZlciwgdGhhdCBpcyBvbmx5IHlvdXIgJ2luZGV4JyBmaWxlOiB5b3VyIHdvcmtpbmcKLWRpcmVjdG9yeSBjb250ZW50cyBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkLgotCi00KSBpbmRleCAtPiB3b3JraW5nIGRpcmVjdG9yeQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotWW91IHVwZGF0ZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGZyb20gdGhlIGluZGV4IGJ5ICJjaGVja2luZyBvdXQiCi1maWxlcy4gVGhpcyBpcyBub3QgYSB2ZXJ5IGNvbW1vbiBvcGVyYXRpb24sIHNpbmNlIG5vcm1hbGx5IHlvdSdkIGp1c3QKLWtlZXAgeW91ciBmaWxlcyB1cGRhdGVkLCBhbmQgcmF0aGVyIHRoYW4gd3JpdGUgdG8geW91ciB3b3JraW5nCi1kaXJlY3RvcnksIHlvdSdkIHRlbGwgdGhlIGluZGV4IGZpbGVzIGFib3V0IHRoZSBjaGFuZ2VzIGluIHlvdXIKLXdvcmtpbmcgZGlyZWN0b3J5IChpLmUuIGBnaXQtdXBkYXRlLWluZGV4YCkuCi0KLUhvd2V2ZXIsIGlmIHlvdSBkZWNpZGUgdG8ganVtcCB0byBhIG5ldyB2ZXJzaW9uLCBvciBjaGVjayBvdXQgc29tZWJvZHkKLWVsc2UncyB2ZXJzaW9uLCBvciBqdXN0IHJlc3RvcmUgYSBwcmV2aW91cyB0cmVlLCB5b3UnZCBwb3B1bGF0ZSB5b3VyCi1pbmRleCBmaWxlIHdpdGggcmVhZC10cmVlLCBhbmQgdGhlbiB5b3UgbmVlZCB0byBjaGVjayBvdXQgdGhlIHJlc3VsdAotd2l0aAotCi0JCWdpdC1jaGVja291dC1pbmRleCBmaWxlbmFtZQotCi1vciwgaWYgeW91IHdhbnQgdG8gY2hlY2sgb3V0IGFsbCBvZiB0aGUgaW5kZXgsIHVzZSBgLWFgLgotCi1OT1RFISBnaXQtY2hlY2tvdXQtaW5kZXggbm9ybWFsbHkgcmVmdXNlcyB0byBvdmVyd3JpdGUgb2xkIGZpbGVzLCBzbwotaWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gb2YgdGhlIHRyZWUgYWxyZWFkeSBjaGVja2VkIG91dCwgeW91IHdpbGwKLW5lZWQgdG8gdXNlIHRoZSAiLWYiIGZsYWcgKCdiZWZvcmUnIHRoZSAiLWEiIGZsYWcgb3IgdGhlIGZpbGVuYW1lKSB0bwotJ2ZvcmNlJyB0aGUgY2hlY2tvdXQuCi0KLQotRmluYWxseSwgdGhlcmUgYXJlIGEgZmV3IG9kZHMgYW5kIGVuZHMgd2hpY2ggYXJlIG5vdCBwdXJlbHkgbW92aW5nCi1mcm9tIG9uZSByZXByZXNlbnRhdGlvbiB0byB0aGUgb3RoZXI6Ci0KLTUpIFR5aW5nIGl0IGFsbCB0b2dldGhlcgotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1UbyBjb21taXQgYSB0cmVlIHlvdSBoYXZlIGluc3RhbnRpYXRlZCB3aXRoICJnaXQtd3JpdGUtdHJlZSIsIHlvdSdkCi1jcmVhdGUgYSAiY29tbWl0IiBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhhdCB0cmVlIGFuZCB0aGUgaGlzdG9yeQotYmVoaW5kIGl0IC0gbW9zdCBub3RhYmx5IHRoZSAicGFyZW50IiBjb21taXRzIHRoYXQgcHJlY2VkZWQgaXQgaW4KLWhpc3RvcnkuCi0KLU5vcm1hbGx5IGEgImNvbW1pdCIgaGFzIG9uZSBwYXJlbnQ6IHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgdHJlZQotYmVmb3JlIGEgY2VydGFpbiBjaGFuZ2Ugd2FzIG1hZGUuIEhvd2V2ZXIsIHNvbWV0aW1lcyBpdCBjYW4gaGF2ZSB0d28KLW9yIG1vcmUgcGFyZW50IGNvbW1pdHMsIGluIHdoaWNoIGNhc2Ugd2UgY2FsbCBpdCBhICJtZXJnZSIsIGR1ZSB0byB0aGUKLWZhY3QgdGhhdCBzdWNoIGEgY29tbWl0IGJyaW5ncyB0b2dldGhlciAoIm1lcmdlcyIpIHR3byBvciBtb3JlCi1wcmV2aW91cyBzdGF0ZXMgcmVwcmVzZW50ZWQgYnkgb3RoZXIgY29tbWl0cy4KLQotSW4gb3RoZXIgd29yZHMsIHdoaWxlIGEgInRyZWUiIHJlcHJlc2VudHMgYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSBzdGF0ZQotb2YgYSB3b3JraW5nIGRpcmVjdG9yeSwgYSAiY29tbWl0IiByZXByZXNlbnRzIHRoYXQgc3RhdGUgaW4gInRpbWUiLAotYW5kIGV4cGxhaW5zIGhvdyB3ZSBnb3QgdGhlcmUuCi0KLVlvdSBjcmVhdGUgYSBjb21taXQgb2JqZWN0IGJ5IGdpdmluZyBpdCB0aGUgdHJlZSB0aGF0IGRlc2NyaWJlcyB0aGUKLXN0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBjb21taXQsIGFuZCBhIGxpc3Qgb2YgcGFyZW50czoKLQotCWdpdC1jb21taXQtdHJlZSA8dHJlZT4gLXAgPHBhcmVudD4gWy1wIDxwYXJlbnQyPiAuLl0KLQotYW5kIHRoZW4gZ2l2aW5nIHRoZSByZWFzb24gZm9yIHRoZSBjb21taXQgb24gc3RkaW4gKGVpdGhlciB0aHJvdWdoCi1yZWRpcmVjdGlvbiBmcm9tIGEgcGlwZSBvciBmaWxlLCBvciBieSBqdXN0IHR5cGluZyBpdCBhdCB0aGUgdHR5KS4KLQotZ2l0LWNvbW1pdC10cmVlIHdpbGwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdGhhdCByZXByZXNlbnRzCi10aGF0IGNvbW1pdCwgYW5kIHlvdSBzaG91bGQgc2F2ZSBpdCBhd2F5IGZvciBsYXRlciB1c2UuIE5vcm1hbGx5LAoteW91J2QgY29tbWl0IGEgbmV3IGBIRUFEYCBzdGF0ZSwgYW5kIHdoaWxlIGdpdCBkb2Vzbid0IGNhcmUgd2hlcmUgeW91Ci1zYXZlIHRoZSBub3RlIGFib3V0IHRoYXQgc3RhdGUsIGluIHByYWN0aWNlIHdlIHRlbmQgdG8ganVzdCB3cml0ZSB0aGUKLXJlc3VsdCB0byB0aGUgZmlsZSBwb2ludGVkIGF0IGJ5IGAuZ2l0L0hFQURgLCBzbyB0aGF0IHdlIGNhbiBhbHdheXMgc2VlCi13aGF0IHRoZSBsYXN0IGNvbW1pdHRlZCBzdGF0ZSB3YXMuCi0KLUhlcmUgaXMgYW4gQVNDSUkgYXJ0IGJ5IEpvbiBMb2VsaWdlciB0aGF0IGlsbHVzdHJhdGVzIGhvdwotdmFyaW91cyBwaWVjZXMgZml0IHRvZ2V0aGVyLgotCi0tLS0tLS0tLS0tLS0KLQotICAgICAgICAgICAgICAgICAgICAgY29tbWl0LXRyZWUKLSAgICAgICAgICAgICAgICAgICAgICBjb21taXQgb2JqCi0gICAgICAgICAgICAgICAgICAgICAgICstLS0tKwotICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgIFYgICAgVgotICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgIHwgT2JqZWN0IERCIHwKLSAgICAgICAgICAgICAgICAgICAgfCAgQmFja2luZyAgfAotICAgICAgICAgICAgICAgICAgICB8ICAgU3RvcmUgICB8Ci0gICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKLSAgICAgICAgICAgICAgICAgICAgICAgXgotICAgICAgICAgICB3cml0ZS10cmVlICB8ICAgICB8Ci0gICAgICAgICAgICAgdHJlZSBvYmogIHwgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgcmVhZC10cmVlCi0gICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHRyZWUgb2JqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKLSAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICB8ICAgSW5kZXggICB8Ci0gICAgICAgICAgICAgICAgICAgIHwgICJjYWNoZSIgIHwKLSAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKwotICAgICAgICAgdXBkYXRlLWluZGV4ICBeCi0gICAgICAgICAgICAgYmxvYiBvYmogIHwgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAotICAgIGNoZWNrb3V0LWluZGV4IC11ICB8ICAgICB8ICBjaGVja291dC1pbmRleAotICAgICAgICAgICAgIHN0YXQgICAgICB8ICAgICB8ICBibG9iIG9iagotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCi0gICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKLSAgICAgICAgICAgICAgICAgICAgfCAgV29ya2luZyAgfAotICAgICAgICAgICAgICAgICAgICB8IERpcmVjdG9yeSB8Ci0gICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKLQotLS0tLS0tLS0tLS0tCi0KLQotNikgRXhhbWluaW5nIHRoZSBkYXRhCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotWW91IGNhbiBleGFtaW5lIHRoZSBkYXRhIHJlcHJlc2VudGVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZQotaW5kZXggd2l0aCB2YXJpb3VzIGhlbHBlciB0b29scy4gRm9yIGV2ZXJ5IG9iamVjdCwgeW91IGNhbiB1c2UKLWdpdGxpbms6Z2l0LWNhdC1maWxlWzFdIHRvIGV4YW1pbmUgZGV0YWlscyBhYm91dCB0aGUKLW9iamVjdDoKLQotCQlnaXQtY2F0LWZpbGUgLXQgPG9iamVjdG5hbWU+Ci0KLXNob3dzIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIGFuZCBvbmNlIHlvdSBoYXZlIHRoZSB0eXBlICh3aGljaCBpcwotdXN1YWxseSBpbXBsaWNpdCBpbiB3aGVyZSB5b3UgZmluZCB0aGUgb2JqZWN0KSwgeW91IGNhbiB1c2UKLQotCQlnaXQtY2F0LWZpbGUgYmxvYnx0cmVlfGNvbW1pdHx0YWcgPG9iamVjdG5hbWU+Ci0KLXRvIHNob3cgaXRzIGNvbnRlbnRzLiBOT1RFISBUcmVlcyBoYXZlIGJpbmFyeSBjb250ZW50LCBhbmQgYXMgYSByZXN1bHQKLXRoZXJlIGlzIGEgc3BlY2lhbCBoZWxwZXIgZm9yIHNob3dpbmcgdGhhdCBjb250ZW50LCBjYWxsZWQKLWBnaXQtbHMtdHJlZWAsIHdoaWNoIHR1cm5zIHRoZSBiaW5hcnkgY29udGVudCBpbnRvIGEgbW9yZSBlYXNpbHkKLXJlYWRhYmxlIGZvcm0uCi0KLUl0J3MgZXNwZWNpYWxseSBpbnN0cnVjdGl2ZSB0byBsb29rIGF0ICJjb21taXQiIG9iamVjdHMsIHNpbmNlIHRob3NlCi10ZW5kIHRvIGJlIHNtYWxsIGFuZCBmYWlybHkgc2VsZi1leHBsYW5hdG9yeS4gSW4gcGFydGljdWxhciwgaWYgeW91Ci1mb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YgaGF2aW5nIHRoZSB0b3AgY29tbWl0IG5hbWUgaW4gYC5naXQvSEVBRGAsCi15b3UgY2FuIGRvCi0KLQkJZ2l0LWNhdC1maWxlIGNvbW1pdCBIRUFECi0KLXRvIHNlZSB3aGF0IHRoZSB0b3AgY29tbWl0IHdhcy4KLQotNykgTWVyZ2luZyBtdWx0aXBsZSB0cmVlcwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1HaXQgaGVscHMgeW91IGRvIGEgdGhyZWUtd2F5IG1lcmdlLCB3aGljaCB5b3UgY2FuIGV4cGFuZCB0byBuLXdheSBieQotcmVwZWF0aW5nIHRoZSBtZXJnZSBwcm9jZWR1cmUgYXJiaXRyYXJ5IHRpbWVzIHVudGlsIHlvdSBmaW5hbGx5Ci0iY29tbWl0IiB0aGUgc3RhdGUuICBUaGUgbm9ybWFsIHNpdHVhdGlvbiBpcyB0aGF0IHlvdSdkIG9ubHkgZG8gb25lCi10aHJlZS13YXkgbWVyZ2UgKHR3byBwYXJlbnRzKSwgYW5kIGNvbW1pdCBpdCwgYnV0IGlmIHlvdSBsaWtlIHRvLCB5b3UKLWNhbiBkbyBtdWx0aXBsZSBwYXJlbnRzIGluIG9uZSBnby4KLQotVG8gZG8gYSB0aHJlZS13YXkgbWVyZ2UsIHlvdSBuZWVkIHRoZSB0d28gc2V0cyBvZiAiY29tbWl0IiBvYmplY3RzCi10aGF0IHlvdSB3YW50IHRvIG1lcmdlLCB1c2UgdGhvc2UgdG8gZmluZCB0aGUgY2xvc2VzdCBjb21tb24gcGFyZW50IChhCi10aGlyZCAiY29tbWl0IiBvYmplY3QpLCBhbmQgdGhlbiB1c2UgdGhvc2UgY29tbWl0IG9iamVjdHMgdG8gZmluZCB0aGUKLXN0YXRlIG9mIHRoZSBkaXJlY3RvcnkgKCJ0cmVlIiBvYmplY3QpIGF0IHRoZXNlIHBvaW50cy4KLQotVG8gZ2V0IHRoZSAiYmFzZSIgZm9yIHRoZSBtZXJnZSwgeW91IGZpcnN0IGxvb2sgdXAgdGhlIGNvbW1vbiBwYXJlbnQKLW9mIHR3byBjb21taXRzIHdpdGgKLQotCQlnaXQtbWVyZ2UtYmFzZSA8Y29tbWl0MT4gPGNvbW1pdDI+Ci0KLXdoaWNoIHdpbGwgcmV0dXJuIHlvdSB0aGUgY29tbWl0IHRoZXkgYXJlIGJvdGggYmFzZWQgb24uICBZb3Ugc2hvdWxkCi1ub3cgbG9vayB1cCB0aGUgInRyZWUiIG9iamVjdHMgb2YgdGhvc2UgY29tbWl0cywgd2hpY2ggeW91IGNhbiBlYXNpbHkKLWRvIHdpdGggKGZvciBleGFtcGxlKQotCi0JCWdpdC1jYXQtZmlsZSBjb21taXQgPGNvbW1pdG5hbWU+IHwgaGVhZCAtMQotCi1zaW5jZSB0aGUgdHJlZSBvYmplY3QgaW5mb3JtYXRpb24gaXMgYWx3YXlzIHRoZSBmaXJzdCBsaW5lIGluIGEgY29tbWl0Ci1vYmplY3QuCi0KLU9uY2UgeW91IGtub3cgdGhlIHRocmVlIHRyZWVzIHlvdSBhcmUgZ29pbmcgdG8gbWVyZ2UgKHRoZSBvbmUKLSJvcmlnaW5hbCIgdHJlZSwgYWthIHRoZSBjb21tb24gY2FzZSwgYW5kIHRoZSB0d28gInJlc3VsdCIgdHJlZXMsIGFrYQotdGhlIGJyYW5jaGVzIHlvdSB3YW50IHRvIG1lcmdlKSwgeW91IGRvIGEgIm1lcmdlIiByZWFkIGludG8gdGhlCi1pbmRleC4gVGhpcyB3aWxsIGNvbXBsYWluIGlmIGl0IGhhcyB0byB0aHJvdyBhd2F5IHlvdXIgb2xkIGluZGV4IGNvbnRlbnRzLCBzbyB5b3Ugc2hvdWxkCi1tYWtlIHN1cmUgdGhhdCB5b3UndmUgY29tbWl0dGVkIHRob3NlIC0gaW4gZmFjdCB5b3Ugd291bGQgbm9ybWFsbHkKLWFsd2F5cyBkbyBhIG1lcmdlIGFnYWluc3QgeW91ciBsYXN0IGNvbW1pdCAod2hpY2ggc2hvdWxkIHRodXMgbWF0Y2gKLXdoYXQgeW91IGhhdmUgaW4geW91ciBjdXJyZW50IGluZGV4IGFueXdheSkuCi0KLVRvIGRvIHRoZSBtZXJnZSwgZG8KLQotCQlnaXQtcmVhZC10cmVlIC1tIC11IDxvcmlndHJlZT4gPHlvdXJ0cmVlPiA8dGFyZ2V0dHJlZT4KLQotd2hpY2ggd2lsbCBkbyBhbGwgdHJpdmlhbCBtZXJnZSBvcGVyYXRpb25zIGZvciB5b3UgZGlyZWN0bHkgaW4gdGhlCi1pbmRleCBmaWxlLCBhbmQgeW91IGNhbiBqdXN0IHdyaXRlIHRoZSByZXN1bHQgb3V0IHdpdGgKLWBnaXQtd3JpdGUtdHJlZWAuCi0KLUhpc3RvcmljYWwgbm90ZS4gIFdlIGRpZCBub3QgaGF2ZSBgLXVgIGZhY2lsaXR5IHdoZW4gdGhpcwotc2VjdGlvbiB3YXMgZmlyc3Qgd3JpdHRlbiwgc28gd2UgdXNlZCB0byB3YXJuIHRoYXQKLXRoZSBtZXJnZSBpcyBkb25lIGluIHRoZSBpbmRleCBmaWxlLCBub3QgaW4geW91cgotd29ya2luZyB0cmVlLCBhbmQgeW91ciB3b3JraW5nIHRyZWUgd2lsbCBub3QgbWF0Y2ggeW91cgotaW5kZXggYWZ0ZXIgdGhpcyBzdGVwLgotVGhpcyBpcyBubyBsb25nZXIgdHJ1ZS4gIFRoZSBhYm92ZSBjb21tYW5kLCB0aGFua3MgdG8gYC11YAotb3B0aW9uLCB1cGRhdGVzIHlvdXIgd29ya2luZyB0cmVlIHdpdGggdGhlIG1lcmdlIHJlc3VsdHMgZm9yCi1wYXRocyB0aGF0IGhhdmUgYmVlbiB0cml2aWFsbHkgbWVyZ2VkLgotCi0KLTgpIE1lcmdpbmcgbXVsdGlwbGUgdHJlZXMsIGNvbnRpbnVlZAotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVNhZGx5LCBtYW55IG1lcmdlcyBhcmVuJ3QgdHJpdmlhbC4gSWYgdGhlcmUgYXJlIGZpbGVzIHRoYXQgaGF2ZQotYmVlbiBhZGRlZC5tb3ZlZCBvciByZW1vdmVkLCBvciBpZiBib3RoIGJyYW5jaGVzIGhhdmUgbW9kaWZpZWQgdGhlCi1zYW1lIGZpbGUsIHlvdSB3aWxsIGJlIGxlZnQgd2l0aCBhbiBpbmRleCB0cmVlIHRoYXQgY29udGFpbnMgIm1lcmdlCi1lbnRyaWVzIiBpbiBpdC4gU3VjaCBhbiBpbmRleCB0cmVlIGNhbiAnTk9UJyBiZSB3cml0dGVuIG91dCB0byBhIHRyZWUKLW9iamVjdCwgYW5kIHlvdSB3aWxsIGhhdmUgdG8gcmVzb2x2ZSBhbnkgc3VjaCBtZXJnZSBjbGFzaGVzIHVzaW5nCi1vdGhlciB0b29scyBiZWZvcmUgeW91IGNhbiB3cml0ZSBvdXQgdGhlIHJlc3VsdC4KLQotWW91IGNhbiBleGFtaW5lIHN1Y2ggaW5kZXggc3RhdGUgd2l0aCBgZ2l0LWxzLWZpbGVzIC0tdW5tZXJnZWRgCi1jb21tYW5kLiAgQW4gZXhhbXBsZToKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIGdpdC1yZWFkLXRyZWUgLW0gJG9yaWcgSEVBRCAkdGFyZ2V0Ci0kIGdpdC1scy1maWxlcyAtLXVubWVyZ2VkCi0xMDA2NDQgMjYzNDE0ZjQyM2QwZTRkNzBkYWU4ZmU1M2ZhMzQ2MTRmZjNlMjg2MCAxCWhlbGxvLmMKLTEwMDY0NCAwNmZhNmEyNDI1NmRjN2U1NjBlZmE1Njg3ZmE4NGI1MWYwMjYzYzNhIDIJaGVsbG8uYwotMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsby5jCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRWFjaCBsaW5lIG9mIHRoZSBgZ2l0LWxzLWZpbGVzIC0tdW5tZXJnZWRgIG91dHB1dCBiZWdpbnMgd2l0aAotdGhlIGJsb2IgbW9kZSBiaXRzLCBibG9iIFNIQTEsICdzdGFnZSBudW1iZXInLCBhbmQgdGhlCi1maWxlbmFtZS4gIFRoZSAnc3RhZ2UgbnVtYmVyJyBpcyBnaXQncyB3YXkgdG8gc2F5IHdoaWNoIHRyZWUgaXQKLWNhbWUgZnJvbTogc3RhZ2UgMSBjb3JyZXNwb25kcyB0byBgJG9yaWdgIHRyZWUsIHN0YWdlIDIgYEhFQURgCi10cmVlLCBhbmQgc3RhZ2UzIGAkdGFyZ2V0YCB0cmVlLgotCi1FYXJsaWVyIHdlIHNhaWQgdGhhdCB0cml2aWFsIG1lcmdlcyBhcmUgZG9uZSBpbnNpZGUKLWBnaXQtcmVhZC10cmVlIC1tYC4gIEZvciBleGFtcGxlLCBpZiB0aGUgZmlsZSBkaWQgbm90IGNoYW5nZQotZnJvbSBgJG9yaWdgIHRvIGBIRUFEYCBub3IgYCR0YXJnZXRgLCBvciBpZiB0aGUgZmlsZSBjaGFuZ2VkCi1mcm9tIGAkb3JpZ2AgdG8gYEhFQURgIGFuZCBgJG9yaWdgIHRvIGAkdGFyZ2V0YCB0aGUgc2FtZSB3YXksCi1vYnZpb3VzbHkgdGhlIGZpbmFsIG91dGNvbWUgaXMgd2hhdCBpcyBpbiBgSEVBRGAuICBXaGF0IHRoZQotYWJvdmUgZXhhbXBsZSBzaG93cyBpcyB0aGF0IGZpbGUgYGhlbGxvLmNgIHdhcyBjaGFuZ2VkIGZyb20KLWAkb3JpZ2AgdG8gYEhFQURgIGFuZCBgJG9yaWdgIHRvIGAkdGFyZ2V0YCBpbiBhIGRpZmZlcmVudCB3YXkuCi1Zb3UgY291bGQgcmVzb2x2ZSB0aGlzIGJ5IHJ1bm5pbmcgeW91ciBmYXZvcml0ZSAzLXdheSBtZXJnZQotcHJvZ3JhbSwgZS5nLiAgYGRpZmYzYCBvciBgbWVyZ2VgLCBvbiB0aGUgYmxvYiBvYmplY3RzIGZyb20KLXRoZXNlIHRocmVlIHN0YWdlcyB5b3Vyc2VsZiwgbGlrZSB0aGlzOgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0LWNhdC1maWxlIGJsb2IgMjYzNDE0Zi4uLiA+aGVsbG8uY34xCi0kIGdpdC1jYXQtZmlsZSBibG9iIDA2ZmE2YTIuLi4gPmhlbGxvLmN+MgotJCBnaXQtY2F0LWZpbGUgYmxvYiBjYzQ0YzczLi4uID5oZWxsby5jfjMKLSQgbWVyZ2UgaGVsbG8uY34yIGhlbGxvLmN+MSBoZWxsby5jfjMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHdvdWxkIGxlYXZlIHRoZSBtZXJnZSByZXN1bHQgaW4gYGhlbGxvLmN+MmAgZmlsZSwgYWxvbmcKLXdpdGggY29uZmxpY3QgbWFya2VycyBpZiB0aGVyZSBhcmUgY29uZmxpY3RzLiAgQWZ0ZXIgdmVyaWZ5aW5nCi10aGUgbWVyZ2UgcmVzdWx0IG1ha2VzIHNlbnNlLCB5b3UgY2FuIHRlbGwgZ2l0IHdoYXQgdGhlIGZpbmFsCi1tZXJnZSByZXN1bHQgZm9yIHRoaXMgZmlsZSBpcyBieToKLQotCW12IC1mIGhlbGxvLmN+MiBoZWxsby5jCi0JZ2l0LXVwZGF0ZS1pbmRleCBoZWxsby5jCi0KLVdoZW4gYSBwYXRoIGlzIGluIHVubWVyZ2VkIHN0YXRlLCBydW5uaW5nIGBnaXQtdXBkYXRlLWluZGV4YCBmb3IKLXRoYXQgcGF0aCB0ZWxscyBnaXQgdG8gbWFyayB0aGUgcGF0aCByZXNvbHZlZC4KLQotVGhlIGFib3ZlIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIGdpdCBtZXJnZSBhdCB0aGUgbG93ZXN0IGxldmVsLAotdG8gaGVscCB5b3UgdW5kZXJzdGFuZCB3aGF0IGNvbmNlcHR1YWxseSBoYXBwZW5zIHVuZGVyIHRoZSBob29kLgotSW4gcHJhY3RpY2UsIG5vYm9keSwgbm90IGV2ZW4gZ2l0IGl0c2VsZiwgdXNlcyB0aHJlZSBgZ2l0LWNhdC1maWxlYAotZm9yIHRoaXMuICBUaGVyZSBpcyBgZ2l0LW1lcmdlLWluZGV4YCBwcm9ncmFtIHRoYXQgZXh0cmFjdHMgdGhlCi1zdGFnZXMgdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBjYWxscyBhICJtZXJnZSIgc2NyaXB0IG9uIGl0OgotCi0JZ2l0LW1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSBoZWxsby5jCi0KLWFuZCB0aGF0IGlzIHdoYXQgaGlnaGVyIGxldmVsIGBnaXQgcmVzb2x2ZWAgaXMgaW1wbGVtZW50ZWQgd2l0aC4KK1RoZSB1c2VyIGRpc2N1c3Npb24gYW5kIGRldmVsb3BtZW50IG9mIEdpdCB0YWtlIHBsYWNlIG9uIHRoZSBHaXQKK21haWxpbmcgbGlzdCAtLSBldmVyeW9uZSBpcyB3ZWxjb21lIHRvIHBvc3QgYnVnIHJlcG9ydHMsIGZlYXR1cmUKK3JlcXVlc3RzLCBjb21tZW50cyBhbmQgcGF0Y2hlcyB0byBnaXRAdmdlci5rZXJuZWwub3JnLiBUbyBzdWJzY3JpYmUKK3RvIHRoZSBsaXN0LCBzZW5kIGFuIGVtYWlsIHdpdGgganVzdCAic3Vic2NyaWJlIGdpdCIgaW4gdGhlIGJvZHkgdG8KK21ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcuIFRoZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgYXJlIGF2YWlsYWJsZSBhdAoraHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/bD1naXQgYW5kIG90aGVyIGFyY2hpdmFsIHNpdGVzLgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1hZGQuYyBiL2J1aWx0aW4tYWRkLmMKaW5kZXggZTdhMWI0ZC4uODdlMTZhYSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1hZGQuYworKysgYi9idWlsdGluLWFkZC5jCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2FkZF91c2FnZVtdID0KLSJnaXQtYWRkIFstbl0gWy12XSBbLWZdIFstLWludGVyYWN0aXZlXSBbLS1dIDxmaWxlcGF0dGVybj4uLi4iOworImdpdC1hZGQgWy1uXSBbLXZdIFstZl0gWy0taW50ZXJhY3RpdmUgfCAtaV0gWy0tXSA8ZmlsZXBhdHRlcm4+Li4uIjsKIAogc3RhdGljIHZvaWQgcHJ1bmVfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywgaW50IHByZWZpeCkKIHsKQEAgLTEwMiw3ICsxMDIsOCBAQAogCWludCBhZGRfaW50ZXJhY3RpdmUgPSAwOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQlpZiAoIXN0cmNtcCgiLS1pbnRlcmFjdGl2ZSIsIGFyZ3ZbaV0pKQorCQlpZiAoIXN0cmNtcCgiLS1pbnRlcmFjdGl2ZSIsIGFyZ3ZbaV0pIHx8CisJCSAgICAhc3RyY21wKCItaSIsIGFyZ3ZbaV0pKQogCQkJYWRkX2ludGVyYWN0aXZlKys7CiAJfQogCWlmIChhZGRfaW50ZXJhY3RpdmUpIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYXBwbHkuYyBiL2J1aWx0aW4tYXBwbHkuYwppbmRleCA1NGZkMmNiLi4zZmVmZGFjIDEwMDY0NAotLS0gYS9idWlsdGluLWFwcGx5LmMKKysrIGIvYnVpbHRpbi1hcHBseS5jCkBAIC0yNTg5LDcgKzI1ODksNyBAQAogfQogCiAKLWludCBjbWRfYXBwbHkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCitpbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqdW51c2VkX3ByZWZpeCkKIHsKIAlpbnQgaTsKIAlpbnQgcmVhZF9zdGRpbiA9IDE7CmRpZmYgLS1naXQgYS9idWlsdGluLWFyY2hpdmUuYyBiL2J1aWx0aW4tYXJjaGl2ZS5jCmluZGV4IDMyNzM3ZDMuLmY2MTNhYzIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYXJjaGl2ZS5jCisrKyBiL2J1aWx0aW4tYXJjaGl2ZS5jCkBAIC03NCw2ICs3NCw3IEBACiAJLyogTm93LCBzdGFydCByZWFkaW5nIGZyb20gZmRbMF0gYW5kIHNwaXQgaXQgb3V0IHRvIHN0ZG91dCAqLwogCXJ2ID0gcmVjdl9zaWRlYmFuZCgiYXJjaGl2ZSIsIGZkWzBdLCAxLCAyKTsKIAljbG9zZShmZFswXSk7CisJY2xvc2UoZmRbMV0pOwogCXJ2IHw9IGZpbmlzaF9jb25uZWN0KHBpZCk7CiAKIAlyZXR1cm4gISFydjsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYmxhbWUuYyBiL2J1aWx0aW4tYmxhbWUuYwppbmRleCA0YTFhY2NmLi4zMDMzZTliIDEwMDY0NAotLS0gYS9idWlsdGluLWJsYW1lLmMKKysrIGIvYnVpbHRpbi1ibGFtZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgImRpZmZjb3JlLmgiCiAjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJxdW90ZS5oIgogI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgogCiBzdGF0aWMgY2hhciBibGFtZV91c2FnZVtdID0KQEAgLTI3LDYgKzI4LDcgQEAKICIgIC1wLCAtLXBvcmNlbGFpbiAgICAgU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvblxuIgogIiAgLUwgbixtICAgICAgICAgICAgICBQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMVxuIgogIiAgLU0sIC1DICAgICAgICAgICAgICBGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzXG4iCisiICAtLWluY3JlbWVudGFsICAgICAgIFNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHlcbiIKICIgIC1TIHJldnMtZmlsZSAgICAgICAgVXNlIHJldmlzaW9ucyBmcm9tIHJldnMtZmlsZSBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0XG4iOwogCiBzdGF0aWMgaW50IGxvbmdlc3RfZmlsZTsKQEAgLTM2LDYgKzM4LDcgQEAKIHN0YXRpYyBpbnQgbWF4X3Njb3JlX2RpZ2l0czsKIHN0YXRpYyBpbnQgc2hvd19yb290Owogc3RhdGljIGludCBibGFua19ib3VuZGFyeTsKK3N0YXRpYyBpbnQgaW5jcmVtZW50YWw7CiAKICNpZm5kZWYgREVCVUcKICNkZWZpbmUgREVCVUcgMApAQCAtNzQsNiArNzcsMTAgQEAKIAljaGFyIHBhdGhbRkxFWF9BUlJBWV07CiB9OwogCisvKgorICogR2l2ZW4gYW4gb3JpZ2luLCBwcmVwYXJlIG1tZmlsZV90IHN0cnVjdHVyZSB0byBiZSB1c2VkIGJ5IHRoZQorICogZGlmZiBtYWNoaW5lcnkKKyAqLwogc3RhdGljIGNoYXIgKmZpbGxfb3JpZ2luX2Jsb2Ioc3RydWN0IG9yaWdpbiAqbywgbW1maWxlX3QgKmZpbGUpCiB7CiAJaWYgKCFvLT5maWxlLnB0cikgewpAQCAtODgsNiArOTUsMTAgQEAKIAlyZXR1cm4gZmlsZS0+cHRyOwogfQogCisvKgorICogT3JpZ2luIGlzIHJlZmNvdW50ZWQgYW5kIHVzdWFsbHkgd2Uga2VlcCB0aGUgYmxvYiBjb250ZW50cyB0byBiZQorICogcmV1c2VkLgorICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBvcmlnaW4gKm9yaWdpbl9pbmNyZWYoc3RydWN0IG9yaWdpbiAqbykKIHsKIAlpZiAobykKQEAgLTEwNSw2ICsxMTYsMTEgQEAKIAl9CiB9CiAKKy8qCisgKiBFYWNoIGdyb3VwIG9mIGxpbmVzIGlzIGRlc2NyaWJlZCBieSBhIGJsYW1lX2VudHJ5OyBpdCBjYW4gYmUgc3BsaXQKKyAqIGFzIHdlIHBhc3MgYmxhbWUgdG8gdGhlIHBhcmVudHMuICBUaGV5IGZvcm0gYSBsaW5rZWQgbGlzdCBpbiB0aGUKKyAqIHNjb3JlYm9hcmQgc3RydWN0dXJlLCBzb3J0ZWQgYnkgdGhlIHRhcmdldCBsaW5lIG51bWJlci4KKyAqLwogc3RydWN0IGJsYW1lX2VudHJ5IHsKIAlzdHJ1Y3QgYmxhbWVfZW50cnkgKnByZXY7CiAJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXh0OwpAQCAtMTMxLDE5ICsxNDcsMjQgQEAKIAlpbnQgc19sbm87CiAKIAkvKiBob3cgc2lnbmlmaWNhbnQgdGhpcyBlbnRyeSBpcyAtLSBjYWNoZWQgdG8gYXZvaWQKLQkgKiBzY2FubmluZyB0aGUgbGluZXMgb3ZlciBhbmQgb3ZlcgorCSAqIHNjYW5uaW5nIHRoZSBsaW5lcyBvdmVyIGFuZCBvdmVyLgogCSAqLwogCXVuc2lnbmVkIHNjb3JlOwogfTsKIAorLyoKKyAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBibGFtZSBhc3NpZ25tZW50LgorICovCiBzdHJ1Y3Qgc2NvcmVib2FyZCB7CiAJLyogdGhlIGZpbmFsIGNvbW1pdCAoaS5lLiB3aGVyZSB3ZSBzdGFydGVkIGRpZ2dpbmcgZnJvbSkgKi8KIAlzdHJ1Y3QgY29tbWl0ICpmaW5hbDsKIAogCWNvbnN0IGNoYXIgKnBhdGg7CiAKLQkvKiB0aGUgY29udGVudHMgaW4gdGhlIGZpbmFsOyBwb2ludGVkIGludG8gYnkgYnVmIHBvaW50ZXJzIG9mCi0JICogYmxhbWVfZW50cmllcworCS8qCisJICogVGhlIGNvbnRlbnRzIGluIHRoZSBmaW5hbCBpbWFnZS4KKwkgKiBVc2VkIGJ5IG1hbnkgZnVuY3Rpb25zIHRvIG9idGFpbiBjb250ZW50cyBvZiB0aGUgbnRoIGxpbmUsCisJICogaW5kZXhlZCB3aXRoIHNjb3JlYm9hcmQubGluZW5vW2JsYW1lX2VudHJ5Lmxub10uCiAJICovCiAJY29uc3QgY2hhciAqZmluYWxfYnVmOwogCXVuc2lnbmVkIGxvbmcgZmluYWxfYnVmX3NpemU7CkBAIC0xNjgsNiArMTg5LDExIEBACiAKIHN0YXRpYyB2b2lkIHNhbml0eV9jaGVja19yZWZjbnQoc3RydWN0IHNjb3JlYm9hcmQgKik7CiAKKy8qCisgKiBJZiB0d28gYmxhbWUgZW50cmllcyB0aGF0IGFyZSBuZXh0IHRvIGVhY2ggb3RoZXIgY2FtZSBmcm9tCisgKiBjb250aWd1b3VzIGxpbmVzIGluIHRoZSBzYW1lIG9yaWdpbiAoaS5lLiA8Y29tbWl0LCBwYXRoPiBwYWlyKSwKKyAqIG1lcmdlIHRoZW0gdG9nZXRoZXIuCisgKi8KIHN0YXRpYyB2b2lkIGNvYWxlc2NlKHN0cnVjdCBzY29yZWJvYXJkICpzYikKIHsKIAlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwgKm5leHQ7CkBAIC0xOTEsNiArMjE3LDEyIEBACiAJCXNhbml0eV9jaGVja19yZWZjbnQoc2IpOwogfQogCisvKgorICogR2l2ZW4gYSBjb21taXQgYW5kIGEgcGF0aCBpbiBpdCwgY3JlYXRlIGEgbmV3IG9yaWdpbiBzdHJ1Y3R1cmUuCisgKiBUaGUgY2FsbGVycyB0aGF0IGFkZCBibGFtZSB0byB0aGUgc2NvcmVib2FyZCBzaG91bGQgdXNlCisgKiBnZXRfb3JpZ2luKCkgdG8gb2J0YWluIHNoYXJlZCwgcmVmY291bnRlZCBjb3B5IGluc3RlYWQgb2YgY2FsbGluZworICogdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4KKyAqLwogc3RhdGljIHN0cnVjdCBvcmlnaW4gKm1ha2Vfb3JpZ2luKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqcGF0aCkKIHsKIAlzdHJ1Y3Qgb3JpZ2luICpvOwpAQCAtMjAxLDYgKzIzMyw5IEBACiAJcmV0dXJuIG87CiB9CiAKKy8qCisgKiBMb2NhdGUgYW4gZXhpc3Rpbmcgb3JpZ2luIG9yIGNyZWF0ZSBhIG5ldyBvbmUuCisgKi8KIHN0YXRpYyBzdHJ1Y3Qgb3JpZ2luICpnZXRfb3JpZ2luKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKIAkJCQkgc3RydWN0IGNvbW1pdCAqY29tbWl0LAogCQkJCSBjb25zdCBjaGFyICpwYXRoKQpAQCAtMjE1LDYgKzI1MCwxMyBAQAogCXJldHVybiBtYWtlX29yaWdpbihjb21taXQsIHBhdGgpOwogfQogCisvKgorICogRmlsbCB0aGUgYmxvYl9zaGExIGZpZWxkIG9mIGFuIG9yaWdpbiBpZiBpdCBoYXNuJ3QsIHNvIHRoYXQgbGF0ZXIKKyAqIGNhbGwgdG8gZmlsbF9vcmlnaW5fYmxvYigpIGNhbiB1c2UgaXQgdG8gbG9jYXRlIHRoZSBkYXRhLiAgYmxvYl9zaGExCisgKiBmb3IgYW4gb3JpZ2luIGlzIGFsc28gdXNlZCB0byBwYXNzIHRoZSBibGFtZSBmb3IgdGhlIGVudGlyZSBmaWxlIHRvCisgKiB0aGUgcGFyZW50IHRvIGRldGVjdCB0aGUgY2FzZSB3aGVyZSBhIGNoaWxkJ3MgYmxvYiBpcyBpZGVudGljYWwgdG8KKyAqIHRoYXQgb2YgaXRzIHBhcmVudCdzLgorICovCiBzdGF0aWMgaW50IGZpbGxfYmxvYl9zaGExKHN0cnVjdCBvcmlnaW4gKm9yaWdpbikKIHsKIAl1bnNpZ25lZCBtb2RlOwpAQCAtMjM1LDYgKzI3NywxMCBAQAogCXJldHVybiAtMTsKIH0KIAorLyoKKyAqIFdlIGhhdmUgYW4gb3JpZ2luIC0tIGNoZWNrIGlmIHRoZSBzYW1lIHBhdGggZXhpc3RzIGluIHRoZQorICogcGFyZW50IGFuZCByZXR1cm4gYW4gb3JpZ2luIHN0cnVjdHVyZSB0byByZXByZXNlbnQgaXQuCisgKi8KIHN0YXRpYyBzdHJ1Y3Qgb3JpZ2luICpmaW5kX29yaWdpbihzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCiAJCQkJICBzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsCiAJCQkJICBzdHJ1Y3Qgb3JpZ2luICpvcmlnaW4pCkBAIC0yNDQsMTIgKzI5MCwyNiBAQAogCWNvbnN0IGNoYXIgKnBhdGhzWzJdOwogCiAJaWYgKHBhcmVudC0+dXRpbCkgewotCQkvKiBUaGlzIGlzIGEgZnJlZXN0YW5kaW5nIGNvcHkgb2Ygb3JpZ2luIGFuZCBub3QKLQkJICogcmVmY291bnRlZC4KKwkJLyoKKwkJICogRWFjaCBjb21taXQgb2JqZWN0IGNhbiBjYWNoZSBvbmUgb3JpZ2luIGluIHRoYXQKKwkJICogY29tbWl0LiAgVGhpcyBpcyBhIGZyZWVzdGFuZGluZyBjb3B5IG9mIG9yaWdpbiBhbmQKKwkJICogbm90IHJlZmNvdW50ZWQuCiAJCSAqLwogCQlzdHJ1Y3Qgb3JpZ2luICpjYWNoZWQgPSBwYXJlbnQtPnV0aWw7CiAJCWlmICghc3RyY21wKGNhY2hlZC0+cGF0aCwgb3JpZ2luLT5wYXRoKSkgeworCQkJLyoKKwkJCSAqIFRoZSBzYW1lIHBhdGggYmV0d2VlbiBvcmlnaW4gYW5kIGl0cyBwYXJlbnQKKwkJCSAqIHdpdGhvdXQgcmVuYW1pbmcgLS0gdGhlIG1vc3QgY29tbW9uIGNhc2UuCisJCQkgKi8KIAkJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHNiLCBwYXJlbnQsIGNhY2hlZC0+cGF0aCk7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgb3JpZ2luIHdhcyBuZXdseSBjcmVhdGVkIChpLmUuIGdldF9vcmlnaW4KKwkJCSAqIHdvdWxkIGNhbGwgbWFrZV9vcmlnaW4gaWYgbm9uZSBpcyBmb3VuZCBpbiB0aGUKKwkJCSAqIHNjb3JlYm9hcmQpLCBpdCBkb2VzIG5vdCBrbm93IHRoZSBibG9iX3NoYTEsCisJCQkgKiBzbyBjb3B5IGl0LiAgT3RoZXJ3aXNlIHBvcmlnaW4gd2FzIGluIHRoZQorCQkJICogc2NvcmVib2FyZCBhbmQgYWxyZWFkeSBrbm93cyBibG9iX3NoYTEuCisJCQkgKi8KIAkJCWlmIChwb3JpZ2luLT5yZWZjbnQgPT0gMSkKIAkJCQloYXNoY3B5KHBvcmlnaW4tPmJsb2Jfc2hhMSwgY2FjaGVkLT5ibG9iX3NoYTEpOwogCQkJcmV0dXJuIHBvcmlnaW47CkBAIC0zMDYsNyArMzY2LDEzIEBACiAJfQogCWRpZmZfZmx1c2goJmRpZmZfb3B0cyk7CiAJaWYgKHBvcmlnaW4pIHsKKwkJLyoKKwkJICogQ3JlYXRlIGEgZnJlZXN0YW5kaW5nIGNvcHkgdGhhdCBpcyBub3QgcGFydCBvZgorCQkgKiB0aGUgcmVmY291bnRlZCBvcmlnaW4gZm91bmQgaW4gdGhlIHNjb3JlYm9hcmQsIGFuZAorCQkgKiBjYWNoZSBpdCBpbiB0aGUgY29tbWl0LgorCQkgKi8KIAkJc3RydWN0IG9yaWdpbiAqY2FjaGVkOworCiAJCWNhY2hlZCA9IG1ha2Vfb3JpZ2luKHBvcmlnaW4tPmNvbW1pdCwgcG9yaWdpbi0+cGF0aCk7CiAJCWhhc2hjcHkoY2FjaGVkLT5ibG9iX3NoYTEsIHBvcmlnaW4tPmJsb2Jfc2hhMSk7CiAJCXBhcmVudC0+dXRpbCA9IGNhY2hlZDsKQEAgLTMxNCw2ICszODAsMTAgQEAKIAlyZXR1cm4gcG9yaWdpbjsKIH0KIAorLyoKKyAqIFdlIGhhdmUgYW4gb3JpZ2luIC0tIGZpbmQgdGhlIHBhdGggdGhhdCBjb3JyZXNwb25kcyB0byBpdCBpbiBpdHMKKyAqIHBhcmVudCBhbmQgcmV0dXJuIGFuIG9yaWdpbiBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IGl0LgorICovCiBzdGF0aWMgc3RydWN0IG9yaWdpbiAqZmluZF9yZW5hbWUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAogCQkJCSAgc3RydWN0IGNvbW1pdCAqcGFyZW50LAogCQkJCSAgc3RydWN0IG9yaWdpbiAqb3JpZ2luKQpAQCAtMzUwLDYgKzQyMCw5IEBACiAJcmV0dXJuIHBvcmlnaW47CiB9CiAKKy8qCisgKiBQYXJzaW5nIG9mIHBhdGNoIGNodW5rcy4uLgorICovCiBzdHJ1Y3QgY2h1bmsgewogCS8qIGxpbmUgbnVtYmVyIGluIHBvc3RpbWFnZTsgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhpcwogCSAqIGxpbmUgaXMgdGhlIHNhbWUgYXMgcHJlaW1hZ2UKQEAgLTQ1MSw2ICs1MjQsMTEgQEAKIAlyZXR1cm4gc3RhdGUucmV0OwogfQogCisvKgorICogUnVuIGRpZmYgYmV0d2VlbiB0d28gb3JpZ2lucyBhbmQgZ3JhYiB0aGUgcGF0Y2ggb3V0cHV0LCBzbyB0aGF0CisgKiB3ZSBjYW4gcGFzcyBibGFtZSBmb3IgbGluZXMgb3JpZ2luIGlzIGN1cnJlbnRseSBzdXNwZWN0ZWQgZm9yCisgKiB0byBpdHMgcGFyZW50LgorICovCiBzdGF0aWMgc3RydWN0IHBhdGNoICpnZXRfcGF0Y2goc3RydWN0IG9yaWdpbiAqcGFyZW50LCBzdHJ1Y3Qgb3JpZ2luICpvcmlnaW4pCiB7CiAJbW1maWxlX3QgZmlsZV9wLCBmaWxlX287CkBAIC00NzEsNiArNTQ5LDEwIEBACiAJZnJlZShwKTsKIH0KIAorLyoKKyAqIExpbmsgaW4gYSBuZXcgYmxhbWUgZW50cnkgdG8gdGhlIHNjb3JlYm9yZC4gIEVudHJpZXMgdGhhdCBjb3ZlciB0aGUKKyAqIHNhbWUgbGluZSByYW5nZSBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzY29yZWJvYXJkIHByZXZpb3VzbHkuCisgKi8KIHN0YXRpYyB2b2lkIGFkZF9ibGFtZV9lbnRyeShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9lbnRyeSAqZSkKIHsKIAlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwgKnByZXYgPSBOVUxMOwpAQCAtNDk0LDYgKzU3NiwxMiBAQAogCQllLT5uZXh0LT5wcmV2ID0gZTsKIH0KIAorLyoKKyAqIHNyYyB0eXBpY2FsbHkgaXMgb24tc3RhY2s7IHdlIHdhbnQgdG8gY29weSB0aGUgaW5mb3JtYXRpb24gaW4gaXQgdG8KKyAqIGFuIG1hbGxvY2VkIGJsYW1lX2VudHJ5IHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgbGlua2VkIGxpc3Qgb2YgdGhlCisgKiBzY29yZWJvYXJkLiAgVGhlIG9yaWdpbiBvZiBkc3QgbG9zZXMgYSByZWZjbnQgd2hpbGUgdGhlIG9yaWdpbiBvZiBzcmMKKyAqIGdhaW5zIG9uZS4KKyAqLwogc3RhdGljIHZvaWQgZHVwX2VudHJ5KHN0cnVjdCBibGFtZV9lbnRyeSAqZHN0LCBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNyYykKIHsKIAlzdHJ1Y3QgYmxhbWVfZW50cnkgKnAsICpuOwpAQCAtNTEzLDI1ICs2MDEsMjUgQEAKIAlyZXR1cm4gc2ItPmZpbmFsX2J1ZiArIHNiLT5saW5lbm9bbG5vXTsKIH0KIAorLyoKKyAqIEl0IGlzIGtub3duIHRoYXQgbGluZXMgYmV0d2VlbiB0bG5vIHRvIHNhbWUgY2FtZSBmcm9tIHBhcmVudCwgYW5kIGUKKyAqIGhhcyBhbiBvdmVybGFwIHdpdGggdGhhdCByYW5nZS4gIGl0IGFsc28gaXMga25vd24gdGhhdCBwYXJlbnQncworICogbGluZSBwbG5vIGNvcnJlc3BvbmRzIHRvIGUncyBsaW5lIHRsbm8uCisgKgorICogICAgICAgICAgICAgICAgPC0tLS0gZSAtLS0tLT4KKyAqICAgICAgICAgICAgICAgICAgIDwtLS0tLS0+CisgKiAgICAgICAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tPgorICogICAgICAgICAgICAgPC0tLS0tLS0tLS0tLT4KKyAqICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0tLS0tLS0+CisgKgorICogU3BsaXQgZSBpbnRvIHBvdGVudGlhbGx5IHRocmVlIHBhcnRzOyBiZWZvcmUgdGhpcyBjaHVuaywgdGhlIGNodW5rCisgKiB0byBiZSBibGFtZWQgZm9yIHRoZSBwYXJlbnQsIGFuZCBhZnRlciB0aGF0IHBvcnRpb24uCisgKi8KIHN0YXRpYyB2b2lkIHNwbGl0X292ZXJsYXAoc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdCwKIAkJCSAgc3RydWN0IGJsYW1lX2VudHJ5ICplLAogCQkJICBpbnQgdGxubywgaW50IHBsbm8sIGludCBzYW1lLAogCQkJICBzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQpCiB7Ci0JLyogaXQgaXMga25vd24gdGhhdCBsaW5lcyBiZXR3ZWVuIHRsbm8gdG8gc2FtZSBjYW1lIGZyb20KLQkgKiBwYXJlbnQsIGFuZCBlIGhhcyBhbiBvdmVybGFwIHdpdGggdGhhdCByYW5nZS4gIGl0IGFsc28gaXMKLQkgKiBrbm93biB0aGF0IHBhcmVudCdzIGxpbmUgcGxubyBjb3JyZXNwb25kcyB0byBlJ3MgbGluZSB0bG5vLgotCSAqCi0JICogICAgICAgICAgICAgICAgPC0tLS0gZSAtLS0tLT4KLQkgKiAgICAgICAgICAgICAgICAgICA8LS0tLS0tPgotCSAqICAgICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0+Ci0JICogICAgICAgICAgICAgPC0tLS0tLS0tLS0tLT4KLQkgKiAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tLS0tLS0tPgotCSAqCi0JICogUG90ZW50aWFsbHkgd2UgbmVlZCB0byBzcGxpdCBlIGludG8gdGhyZWUgcGFydHM7IGJlZm9yZQotCSAqIHRoaXMgY2h1bmssIHRoZSBjaHVuayB0byBiZSBibGFtZWQgZm9yIHBhcmVudCwgYW5kIGFmdGVyCi0JICogdGhhdCBwb3J0aW9uLgotCSAqLwogCWludCBjaHVua19lbmRfbG5vOwogCW1lbXNldChzcGxpdCwgMCwgc2l6ZW9mKHN0cnVjdCBibGFtZV9lbnRyeSBbM10pKTsKIApAQCAtNTYxLDExICs2NDksMjAgQEAKIAkJY2h1bmtfZW5kX2xubyA9IGUtPmxubyArIGUtPm51bV9saW5lczsKIAlzcGxpdFsxXS5udW1fbGluZXMgPSBjaHVua19lbmRfbG5vIC0gc3BsaXRbMV0ubG5vOwogCisJLyoKKwkgKiBpZiBpdCB0dXJucyBvdXQgdGhlcmUgaXMgbm90aGluZyB0byBibGFtZSB0aGUgcGFyZW50IGZvciwKKwkgKiBmb3JnZXQgYWJvdXQgdGhlIHNwbGl0dGluZy4gICFzcGxpdFsxXS5zdXNwZWN0IHNpZ25hbHMgdGhpcy4KKwkgKi8KIAlpZiAoc3BsaXRbMV0ubnVtX2xpbmVzIDwgMSkKIAkJcmV0dXJuOwogCXNwbGl0WzFdLnN1c3BlY3QgPSBvcmlnaW5faW5jcmVmKHBhcmVudCk7CiB9CiAKKy8qCisgKiBzcGxpdF9vdmVybGFwKCkgZGl2aWRlZCBhbiBleGlzdGluZyBibGFtZSBlIGludG8gdXAgdG8gdGhyZWUgcGFydHMKKyAqIGluIHNwbGl0LiAgQWRqdXN0IHRoZSBsaW5rZWQgbGlzdCBvZiBibGFtZXMgaW4gdGhlIHNjb3JlYm9hcmQgdG8KKyAqIHJlZmxlY3QgdGhlIHNwbGl0LgorICovCiBzdGF0aWMgdm9pZCBzcGxpdF9ibGFtZShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCiAJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0LAogCQkJc3RydWN0IGJsYW1lX2VudHJ5ICplKQpAQCAtNTczLDIxICs2NzAsMjcgQEAKIAlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5ld19lbnRyeTsKIAogCWlmIChzcGxpdFswXS5zdXNwZWN0ICYmIHNwbGl0WzJdLnN1c3BlY3QpIHsKLQkJLyogd2UgbmVlZCB0byBzcGxpdCBlIGludG8gdHdvIGFuZCBhZGQgYW5vdGhlciBmb3IgcGFyZW50ICovCisJCS8qIFRoZSBmaXJzdCBwYXJ0IChyZXVzZSBzdG9yYWdlIGZvciB0aGUgZXhpc3RpbmcgZW50cnkgZSkgKi8KIAkJZHVwX2VudHJ5KGUsICZzcGxpdFswXSk7CiAKKwkJLyogVGhlIGxhc3QgcGFydCAtLSBtZSAqLwogCQluZXdfZW50cnkgPSB4bWFsbG9jKHNpemVvZigqbmV3X2VudHJ5KSk7CiAJCW1lbWNweShuZXdfZW50cnksICYoc3BsaXRbMl0pLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5KSk7CiAJCWFkZF9ibGFtZV9lbnRyeShzYiwgbmV3X2VudHJ5KTsKIAorCQkvKiAuLi4gYW5kIHRoZSBtaWRkbGUgcGFydCAtLSBwYXJlbnQgKi8KIAkJbmV3X2VudHJ5ID0geG1hbGxvYyhzaXplb2YoKm5ld19lbnRyeSkpOwogCQltZW1jcHkobmV3X2VudHJ5LCAmKHNwbGl0WzFdKSwgc2l6ZW9mKHN0cnVjdCBibGFtZV9lbnRyeSkpOwogCQlhZGRfYmxhbWVfZW50cnkoc2IsIG5ld19lbnRyeSk7CiAJfQogCWVsc2UgaWYgKCFzcGxpdFswXS5zdXNwZWN0ICYmICFzcGxpdFsyXS5zdXNwZWN0KQotCQkvKiBwYXJlbnQgY292ZXJzIHRoZSBlbnRpcmUgYXJlYSAqLworCQkvKgorCQkgKiBUaGUgcGFyZW50IGNvdmVycyB0aGUgZW50aXJlIGFyZWE7IHJldXNlIHN0b3JhZ2UgZm9yCisJCSAqIGUgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgcGFyZW50LgorCQkgKi8KIAkJZHVwX2VudHJ5KGUsICZzcGxpdFsxXSk7CiAJZWxzZSBpZiAoc3BsaXRbMF0uc3VzcGVjdCkgeworCQkvKiBtZSBhbmQgdGhlbiBwYXJlbnQgKi8KIAkJZHVwX2VudHJ5KGUsICZzcGxpdFswXSk7CiAKIAkJbmV3X2VudHJ5ID0geG1hbGxvYyhzaXplb2YoKm5ld19lbnRyeSkpOwpAQCAtNTk1LDYgKzY5OCw3IEBACiAJCWFkZF9ibGFtZV9lbnRyeShzYiwgbmV3X2VudHJ5KTsKIAl9CiAJZWxzZSB7CisJCS8qIHBhcmVudCBhbmQgdGhlbiBtZSAqLwogCQlkdXBfZW50cnkoZSwgJnNwbGl0WzFdKTsKIAogCQluZXdfZW50cnkgPSB4bWFsbG9jKHNpemVvZigqbmV3X2VudHJ5KSk7CkBAIC02MjUsNiArNzI5LDEwIEBACiAJfQogfQogCisvKgorICogQWZ0ZXIgc3BsaXR0aW5nIHRoZSBibGFtZSwgdGhlIG9yaWdpbnMgdXNlZCBieSB0aGUKKyAqIG9uLXN0YWNrIGJsYW1lX2VudHJ5IHNob3VsZCBsb3NlIG9uZSByZWZjbnQgZWFjaC4KKyAqLwogc3RhdGljIHZvaWQgZGVjcmVmX3NwbGl0KHN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQpCiB7CiAJaW50IGk7CkBAIC02MzMsNiArNzQxLDEwIEBACiAJCW9yaWdpbl9kZWNyZWYoc3BsaXRbaV0uc3VzcGVjdCk7CiB9CiAKKy8qCisgKiBIZWxwZXIgZm9yIGJsYW1lX2NodW5rKCkuICBibGFtZV9lbnRyeSBlIGlzIGtub3duIHRvIG92ZXJsYXAgd2l0aAorICogdGhlIHBhdGNoIGh1bms7IHNwbGl0IGl0IGFuZCBwYXNzIGJsYW1lIHRvIHRoZSBwYXJlbnQuCisgKi8KIHN0YXRpYyB2b2lkIGJsYW1lX292ZXJsYXAoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmUsCiAJCQkgIGludCB0bG5vLCBpbnQgcGxubywgaW50IHNhbWUsCiAJCQkgIHN0cnVjdCBvcmlnaW4gKnBhcmVudCkKQEAgLTY0NSw2ICs3NTcsOSBAQAogCWRlY3JlZl9zcGxpdChzcGxpdCk7CiB9CiAKKy8qCisgKiBGaW5kIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgbGFzdCBsaW5lIHRoZSB0YXJnZXQgaXMgc3VzcGVjdGVkIGZvci4KKyAqLwogc3RhdGljIGludCBmaW5kX2xhc3RfaW5fdGFyZ2V0KHN0cnVjdCBzY29yZWJvYXJkICpzYiwgc3RydWN0IG9yaWdpbiAqdGFyZ2V0KQogewogCXN0cnVjdCBibGFtZV9lbnRyeSAqZTsKQEAgLTY1OSw2ICs3NzQsMTEgQEAKIAlyZXR1cm4gbGFzdF9pbl90YXJnZXQ7CiB9CiAKKy8qCisgKiBQcm9jZXNzIG9uZSBodW5rIGZyb20gdGhlIHBhdGNoIGJldHdlZW4gdGhlIGN1cnJlbnQgc3VzcGVjdCBmb3IKKyAqIGJsYW1lX2VudHJ5IGUgYW5kIGl0cyBwYXJlbnQuICBGaW5kIGFuZCBzcGxpdCB0aGUgb3ZlcmxhcCwgYW5kCisgKiBwYXNzIGJsYW1lIHRvIHRoZSBvdmVybGFwcGluZyBwYXJ0IHRvIHRoZSBwYXJlbnQuCisgKi8KIHN0YXRpYyB2b2lkIGJsYW1lX2NodW5rKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKIAkJCWludCB0bG5vLCBpbnQgcGxubywgaW50IHNhbWUsCiAJCQlzdHJ1Y3Qgb3JpZ2luICp0YXJnZXQsIHN0cnVjdCBvcmlnaW4gKnBhcmVudCkKQEAgLTY3NSw2ICs3OTUsMTEgQEAKIAl9CiB9CiAKKy8qCisgKiBXZSBhcmUgbG9va2luZyBhdCB0aGUgb3JpZ2luICd0YXJnZXQnIGFuZCBhaW1pbmcgdG8gcGFzcyBibGFtZQorICogZm9yIHRoZSBsaW5lcyBpdCBpcyBzdXNwZWN0ZWQgdG8gaXRzIHBhcmVudC4gIFJ1biBkaWZmIHRvIGZpbmQKKyAqIHdoaWNoIGxpbmVzIGNhbWUgZnJvbSBwYXJlbnQgYW5kIHBhc3MgYmxhbWUgZm9yIHRoZW0uCisgKi8KIHN0YXRpYyBpbnQgcGFzc19ibGFtZV90b19wYXJlbnQoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAogCQkJCXN0cnVjdCBvcmlnaW4gKnRhcmdldCwKIAkJCQlzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQpCkBAIC02OTUsMTMgKzgyMCwyMiBAQAogCQlwbG5vID0gY2h1bmstPnBfbmV4dDsKIAkJdGxubyA9IGNodW5rLT50X25leHQ7CiAJfQotCS8qIHJlc3QgKGkuZS4gYW55dGhpbmcgYWJvdmUgdGxubykgYXJlIHRoZSBzYW1lIGFzIHBhcmVudCAqLworCS8qIFRoZSByZXN0IChpLmUuIGFueXRoaW5nIGFmdGVyIHRsbm8pIGFyZSB0aGUgc2FtZSBhcyB0aGUgcGFyZW50ICovCiAJYmxhbWVfY2h1bmsoc2IsIHRsbm8sIHBsbm8sIGxhc3RfaW5fdGFyZ2V0LCB0YXJnZXQsIHBhcmVudCk7CiAKIAlmcmVlX3BhdGNoKHBhdGNoKTsKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFRoZSBsaW5lcyBpbiBibGFtZV9lbnRyeSBhZnRlciBzcGxpdHRpbmcgYmxhbWVzIG1hbnkgdGltZXMgY2FuIGJlY29tZQorICogdmVyeSBzbWFsbCBhbmQgdHJpdmlhbCwgYW5kIGF0IHNvbWUgcG9pbnQgaXQgYmVjb21lcyBwb2ludGxlc3MgdG8KKyAqIGJsYW1lIHRoZSBwYXJlbnRzLiAgRS5nLiAiXHRcdH1cblx0fVxuXG4iIGFwcGVhcnMgZXZlcnl3aGVyZSBpbiBhbnkKKyAqIG9yZGluYXJ5IEMgcHJvZ3JhbSwgYW5kIGl0IGlzIG5vdCB3b3J0aCB0byBzYXkgaXQgd2FzIGNvcGllZCBmcm9tCisgKiB0b3RhbGx5IHVucmVsYXRlZCBmaWxlIGluIHRoZSBwYXJlbnQuCisgKgorICogQ29tcHV0ZSBob3cgdHJpdmlhbCB0aGUgbGluZXMgaW4gdGhlIGJsYW1lX2VudHJ5IGFyZS4KKyAqLwogc3RhdGljIHVuc2lnbmVkIGVudF9zY29yZShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9lbnRyeSAqZSkKIHsKIAl1bnNpZ25lZCBzY29yZTsKQEAgLTcyMyw2ICs4NTcsMTIgQEAKIAlyZXR1cm4gc2NvcmU7CiB9CiAKKy8qCisgKiBiZXN0X3NvX2ZhcltdIGFuZCB0aGlzW10gYXJlIGJvdGggYSBzcGxpdCBvZiBhbiBleGlzdGluZyBibGFtZV9lbnRyeQorICogdGhhdCBwYXNzZXMgYmxhbWUgdG8gdGhlIHBhcmVudC4gIE1haW50YWluIGJlc3Rfc29fZmFyIHRoZSBiZXN0IHNwbGl0CisgKiBzbyBmYXIsIGJ5IGNvbXBhcmluZyB0aGlzIGFuZCBiZXN0X3NvX2ZhciBhbmQgY29weWluZyB0aGlzIGludG8KKyAqIGJzdF9zb19mYXIgYXMgbmVlZGVkLgorICovCiBzdGF0aWMgdm9pZCBjb3B5X3NwbGl0X2lmX2JldHRlcihzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCiAJCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqYmVzdF9zb19mYXIsCiAJCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqdGhpcykKQEAgLTc0Miw2ICs4ODIsMTEgQEAKIAltZW1jcHkoYmVzdF9zb19mYXIsIHRoaXMsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkgWzNdKSk7CiB9CiAKKy8qCisgKiBGaW5kIHRoZSBsaW5lcyBmcm9tIHBhcmVudCB0aGF0IGFyZSB0aGUgc2FtZSBhcyBlbnQgc28gdGhhdAorICogd2UgY2FuIHBhc3MgYmxhbWVzIHRvIGl0LiAgZmlsZV9wIGhhcyB0aGUgYmxvYiBjb250ZW50cyBmb3IKKyAqIHRoZSBwYXJlbnQuCisgKi8KIHN0YXRpYyB2b2lkIGZpbmRfY29weV9pbl9ibG9iKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKIAkJCSAgICAgIHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LAogCQkJICAgICAgc3RydWN0IG9yaWdpbiAqcGFyZW50LApAQCAtNzU0LDYgKzg5OSw5IEBACiAJc3RydWN0IHBhdGNoICpwYXRjaDsKIAlpbnQgaSwgcGxubywgdGxubzsKIAorCS8qCisJICogUHJlcGFyZSBtbWZpbGUgdGhhdCBjb250YWlucyBvbmx5IHRoZSBsaW5lcyBpbiBlbnQuCisJICovCiAJY3AgPSBudGhfbGluZShzYiwgZW50LT5sbm8pOwogCWZpbGVfby5wdHIgPSAoY2hhciopIGNwOwogCWNudCA9IGVudC0+bnVtX2xpbmVzOwpAQCAtNzg5LDYgKzkzNywxMCBAQAogCWZyZWVfcGF0Y2gocGF0Y2gpOwogfQogCisvKgorICogU2VlIGlmIGxpbmVzIGN1cnJlbnRseSB0YXJnZXQgaXMgc3VzcGVjdGVkIGZvciBjYW4gYmUgYXR0cmlidXRlZCB0bworICogcGFyZW50LgorICovCiBzdGF0aWMgaW50IGZpbmRfbW92ZV9pbl9wYXJlbnQoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAogCQkJICAgICAgIHN0cnVjdCBvcmlnaW4gKnRhcmdldCwKIAkJCSAgICAgICBzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQpCkBAIC04MjMsMTIgKzk3NSwxNSBAQAogCXJldHVybiAwOwogfQogCi0KIHN0cnVjdCBibGFtZV9saXN0IHsKIAlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKIAlzdHJ1Y3QgYmxhbWVfZW50cnkgc3BsaXRbM107CiB9OwogCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoZSB0YXJnZXQgaXMgc3VzcGVjdGVkIGZvciwKKyAqIGFuZCBwcmVwYXJlIGEgbGlzdCBvZiBlbnRyeSBhbmQgdGhlIGJlc3Qgc3BsaXQuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgYmxhbWVfbGlzdCAqc2V0dXBfYmxhbWVfbGlzdChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCiAJCQkJCSAgIHN0cnVjdCBvcmlnaW4gKnRhcmdldCwKIAkJCQkJICAgaW50ICpudW1fZW50c19wKQpAQCAtODM3LDkgKzk5Miw2IEBACiAJaW50IG51bV9lbnRzLCBpOwogCXN0cnVjdCBibGFtZV9saXN0ICpibGFtZV9saXN0ID0gTlVMTDsKIAotCS8qIENvdW50IHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgdGFyZ2V0IGlzIHN1c3BlY3RlZCBmb3IsCi0JICogYW5kIHByZXBhcmUgYSBsaXN0IG9mIGVudHJ5IGFuZCB0aGUgYmVzdCBzcGxpdC4KLQkgKi8KIAlmb3IgKGUgPSBzYi0+ZW50LCBudW1fZW50cyA9IDA7IGU7IGUgPSBlLT5uZXh0KQogCQlpZiAoIWUtPmd1aWx0eSAmJiAhY21wX3N1c3BlY3QoZS0+c3VzcGVjdCwgdGFyZ2V0KSkKIAkJCW51bV9lbnRzKys7CkBAIC04NTMsNiArMTAwNSwxMSBAQAogCXJldHVybiBibGFtZV9saXN0OwogfQogCisvKgorICogRm9yIGxpbmVzIHRhcmdldCBpcyBzdXNwZWN0ZWQgZm9yLCBzZWUgaWYgd2UgY2FuIGZpbmQgY29kZSBtb3ZlbWVudAorICogYWNyb3NzIGZpbGUgYm91bmRhcnkgZnJvbSB0aGUgcGFyZW50IGNvbW1pdC4gIHBvcmlnaW4gaXMgdGhlIHBhdGgKKyAqIGluIHRoZSBwYXJlbnQgd2UgYWxyZWFkeSB0cmllZC4KKyAqLwogc3RhdGljIGludCBmaW5kX2NvcHlfaW5fcGFyZW50KHN0cnVjdCBzY29yZWJvYXJkICpzYiwKIAkJCSAgICAgICBzdHJ1Y3Qgb3JpZ2luICp0YXJnZXQsCiAJCQkgICAgICAgc3RydWN0IGNvbW1pdCAqcGFyZW50LApAQCAtOTUzLDcgKzExMTAsOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qIFRoZSBibG9icyBvZiBvcmlnaW4gYW5kIHBvcmlnaW4gZXhhY3RseSBtYXRjaCwgc28gZXZlcnl0aGluZworLyoKKyAqIFRoZSBibG9icyBvZiBvcmlnaW4gYW5kIHBvcmlnaW4gZXhhY3RseSBtYXRjaCwgc28gZXZlcnl0aGluZwogICogb3JpZ2luIGlzIHN1c3BlY3RlZCBmb3IgY2FuIGJlIGJsYW1lZCBvbiB0aGUgcGFyZW50LgogICovCiBzdGF0aWMgdm9pZCBwYXNzX3dob2xlX2JsYW1lKHN0cnVjdCBzY29yZWJvYXJkICpzYiwKQEAgLTEwMzgsNyArMTE5Niw3IEBACiAJfQogCiAJLyoKLQkgKiBPcHRpb25hbGx5IHJ1biAibWlmZiIgdG8gZmluZCBtb3ZlcyBpbiBwYXJlbnRzJyBmaWxlcyBoZXJlLgorCSAqIE9wdGlvbmFsbHkgZmluZCBtb3ZlcyBpbiBwYXJlbnRzJyBmaWxlcy4KIAkgKi8KIAlpZiAob3B0ICYgUElDS0FYRV9CTEFNRV9NT1ZFKQogCQlmb3IgKGkgPSAwLCBwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CkBAIC0xMDUyLDcgKzEyMTAsNyBAQAogCQl9CiAKIAkvKgotCSAqIE9wdGlvbmFsbHkgcnVuICJjaWZmIiB0byBmaW5kIGNvcGllcyBmcm9tIHBhcmVudHMnIGZpbGVzIGhlcmUuCisJICogT3B0aW9uYWxseSBmaW5kIGNvcGllcyBmcm9tIHBhcmVudHMnIGZpbGVzLgogCSAqLwogCWlmIChvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFkpCiAJCWZvciAoaSA9IDAsIHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKQEAgLTEwNjksNzIgKzEyMjcsOSBAQAogCQlvcmlnaW5fZGVjcmVmKHBhcmVudF9vcmlnaW5baV0pOwogfQogCi1zdGF0aWMgdm9pZCBhc3NpZ25fYmxhbWUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBvcHQpCi17Ci0Jd2hpbGUgKDEpIHsKLQkJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7Ci0JCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKLQkJc3RydWN0IG9yaWdpbiAqc3VzcGVjdCA9IE5VTEw7Ci0KLQkJLyogZmluZCBvbmUgc3VzcGVjdCB0byBicmVhayBkb3duICovCi0JCWZvciAoZW50ID0gc2ItPmVudDsgIXN1c3BlY3QgJiYgZW50OyBlbnQgPSBlbnQtPm5leHQpCi0JCQlpZiAoIWVudC0+Z3VpbHR5KQotCQkJCXN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7Ci0JCWlmICghc3VzcGVjdCkKLQkJCXJldHVybjsgLyogYWxsIGRvbmUgKi8KLQotCQlvcmlnaW5faW5jcmVmKHN1c3BlY3QpOwotCQljb21taXQgPSBzdXNwZWN0LT5jb21taXQ7Ci0JCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKQotCQkJcGFyc2VfY29tbWl0KGNvbW1pdCk7Ci0JCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgJiYKLQkJICAgICEocmV2cy0+bWF4X2FnZSAhPSAtMSAmJiBjb21taXQtPmRhdGUgIDwgcmV2cy0+bWF4X2FnZSkpCi0JCQlwYXNzX2JsYW1lKHNiLCBzdXNwZWN0LCBvcHQpOwotCQllbHNlIHsKLQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7Ci0JCQlpZiAoY29tbWl0LT5vYmplY3QucGFyc2VkKQotCQkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7Ci0JCX0KLQkJLyogdHJlYXQgcm9vdCBjb21taXQgYXMgYm91bmRhcnkgKi8KLQkJaWYgKCFjb21taXQtPnBhcmVudHMgJiYgIXNob3dfcm9vdCkKLQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7Ci0KLQkJLyogVGFrZSByZXNwb25zaWJpbGl0eSBmb3IgdGhlIHJlbWFpbmluZyBlbnRyaWVzICovCi0JCWZvciAoZW50ID0gc2ItPmVudDsgZW50OyBlbnQgPSBlbnQtPm5leHQpCi0JCQlpZiAoIWNtcF9zdXNwZWN0KGVudC0+c3VzcGVjdCwgc3VzcGVjdCkpCi0JCQkJZW50LT5ndWlsdHkgPSAxOwotCQlvcmlnaW5fZGVjcmVmKHN1c3BlY3QpOwotCi0JCWlmIChERUJVRykgLyogc2FuaXR5ICovCi0JCQlzYW5pdHlfY2hlY2tfcmVmY250KHNiKTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfdGltZSh1bnNpZ25lZCBsb25nIHRpbWUsIGNvbnN0IGNoYXIgKnR6X3N0ciwKLQkJCSAgICAgICBpbnQgc2hvd19yYXdfdGltZSkKLXsKLQlzdGF0aWMgY2hhciB0aW1lX2J1ZlsxMjhdOwotCXRpbWVfdCB0ID0gdGltZTsKLQlpbnQgbWludXRlcywgdHo7Ci0Jc3RydWN0IHRtICp0bTsKLQotCWlmIChzaG93X3Jhd190aW1lKSB7Ci0JCXNwcmludGYodGltZV9idWYsICIlbHUgJXMiLCB0aW1lLCB0el9zdHIpOwotCQlyZXR1cm4gdGltZV9idWY7Ci0JfQotCi0JdHogPSBhdG9pKHR6X3N0cik7Ci0JbWludXRlcyA9IHR6IDwgMCA/IC10eiA6IHR6OwotCW1pbnV0ZXMgPSAobWludXRlcyAvIDEwMCkqNjAgKyAobWludXRlcyAlIDEwMCk7Ci0JbWludXRlcyA9IHR6IDwgMCA/IC1taW51dGVzIDogbWludXRlczsKLQl0ID0gdGltZSArIG1pbnV0ZXMgKiA2MDsKLQl0bSA9IGdtdGltZSgmdCk7Ci0KLQlzdHJmdGltZSh0aW1lX2J1Ziwgc2l6ZW9mKHRpbWVfYnVmKSwgIiVZLSVtLSVkICVIOiVNOiVTICIsIHRtKTsKLQlzdHJjYXQodGltZV9idWYsIHR6X3N0cik7Ci0JcmV0dXJuIHRpbWVfYnVmOwotfQotCisvKgorICogSW5mb3JtYXRpb24gb24gY29tbWl0cywgdXNlZCBmb3Igb3V0cHV0LgorICovCiBzdHJ1Y3QgY29tbWl0X2luZm8KIHsKIAljaGFyICphdXRob3I7CkBAIC0xMTUxLDYgKzEyNDYsOSBAQAogCWNoYXIgKnN1bW1hcnk7CiB9OwogCisvKgorICogUGFyc2UgYXV0aG9yL2NvbW1pdHRlciBsaW5lIGluIHRoZSBjb21taXQgb2JqZWN0IGJ1ZmZlcgorICovCiBzdGF0aWMgdm9pZCBnZXRfYWNfbGluZShjb25zdCBjaGFyICppbmJ1ZiwgY29uc3QgY2hhciAqd2hhdCwKIAkJCWludCBidWZzeiwgY2hhciAqcGVyc29uLCBjaGFyICoqbWFpbCwKIAkJCXVuc2lnbmVkIGxvbmcgKnRpbWUsIGNoYXIgKip0eikKQEAgLTEyMDUsNyArMTMwMyw4IEBACiAJc3RhdGljIGNoYXIgY29tbWl0dGVyX2J1ZlsxMDI0XTsKIAlzdGF0aWMgY2hhciBzdW1tYXJ5X2J1ZlsxMDI0XTsKIAotCS8qIFdlJ3ZlIG9wZXJhdGVkIHdpdGhvdXQgc2F2ZV9jb21taXRfYnVmZmVyLCBzbworCS8qCisJICogV2UndmUgb3BlcmF0ZWQgd2l0aG91dCBzYXZlX2NvbW1pdF9idWZmZXIsIHNvCiAJICogd2Ugbm93IG5lZWQgdG8gcG9wdWxhdGUgdGhlbSBmb3Igb3V0cHV0LgogCSAqLwogCWlmICghY29tbWl0LT5idWZmZXIpIHsKQEAgLTEyNDUsNiArMTM0NCwxMjcgQEAKIAlzdW1tYXJ5X2J1ZltsZW5dID0gMDsKIH0KIAorLyoKKyAqIFRvIGFsbG93IExGIGFuZCBvdGhlciBub25wb3J0YWJsZSBjaGFyYWN0ZXJzIGluIHBhdGhuYW1lcywKKyAqIHRoZXkgYXJlIGMtc3R5bGUgcXVvdGVkIGFzIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfZmlsZW5hbWVfaW5mbyhjb25zdCBjaGFyICpwYXRoKQoreworCXByaW50ZigiZmlsZW5hbWUgIik7CisJd3JpdGVfbmFtZV9xdW90ZWQoTlVMTCwgMCwgcGF0aCwgMSwgc3Rkb3V0KTsKKwlwdXRjaGFyKCdcbicpOworfQorCisvKgorICogVGhlIGJsYW1lX2VudHJ5IGlzIGZvdW5kIHRvIGJlIGd1aWx0eSBmb3IgdGhlIHJhbmdlLiAgTWFyayBpdAorICogYXMgc3VjaCwgYW5kIHNob3cgaXQgaW4gaW5jcmVtZW50YWwgb3V0cHV0LgorICovCitzdGF0aWMgdm9pZCBmb3VuZF9ndWlsdHlfZW50cnkoc3RydWN0IGJsYW1lX2VudHJ5ICplbnQpCit7CisJaWYgKGVudC0+Z3VpbHR5KQorCQlyZXR1cm47CisJZW50LT5ndWlsdHkgPSAxOworCWlmIChpbmNyZW1lbnRhbCkgeworCQlzdHJ1Y3Qgb3JpZ2luICpzdXNwZWN0ID0gZW50LT5zdXNwZWN0OworCisJCXByaW50ZigiJXMgJWQgJWQgJWRcbiIsCisJCSAgICAgICBzaGExX3RvX2hleChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5zaGExKSwKKwkJICAgICAgIGVudC0+c19sbm8gKyAxLCBlbnQtPmxubyArIDEsIGVudC0+bnVtX2xpbmVzKTsKKwkJaWYgKCEoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNRVRBSU5GT19TSE9XTikpIHsKKwkJCXN0cnVjdCBjb21taXRfaW5mbyBjaTsKKwkJCXN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IE1FVEFJTkZPX1NIT1dOOworCQkJZ2V0X2NvbW1pdF9pbmZvKHN1c3BlY3QtPmNvbW1pdCwgJmNpLCAxKTsKKwkJCXByaW50ZigiYXV0aG9yICVzXG4iLCBjaS5hdXRob3IpOworCQkJcHJpbnRmKCJhdXRob3ItbWFpbCAlc1xuIiwgY2kuYXV0aG9yX21haWwpOworCQkJcHJpbnRmKCJhdXRob3ItdGltZSAlbHVcbiIsIGNpLmF1dGhvcl90aW1lKTsKKwkJCXByaW50ZigiYXV0aG9yLXR6ICVzXG4iLCBjaS5hdXRob3JfdHopOworCQkJcHJpbnRmKCJjb21taXR0ZXIgJXNcbiIsIGNpLmNvbW1pdHRlcik7CisJCQlwcmludGYoImNvbW1pdHRlci1tYWlsICVzXG4iLCBjaS5jb21taXR0ZXJfbWFpbCk7CisJCQlwcmludGYoImNvbW1pdHRlci10aW1lICVsdVxuIiwgY2kuY29tbWl0dGVyX3RpbWUpOworCQkJcHJpbnRmKCJjb21taXR0ZXItdHogJXNcbiIsIGNpLmNvbW1pdHRlcl90eik7CisJCQlwcmludGYoInN1bW1hcnkgJXNcbiIsIGNpLnN1bW1hcnkpOworCQkJaWYgKHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCQlwcmludGYoImJvdW5kYXJ5XG4iKTsKKwkJfQorCQl3cml0ZV9maWxlbmFtZV9pbmZvKHN1c3BlY3QtPnBhdGgpOworCX0KK30KKworLyoKKyAqIFRoZSBtYWluIGxvb3AgLS0gd2hpbGUgdGhlIHNjb3JlYm9hcmQgaGFzIGxpbmVzIHdob3NlIHRydWUgb3JpZ2luCisgKiBpcyBzdGlsbCB1bmtub3duLCBwaWNrIG9uZSBicmFtZV9lbnRyeSwgYW5kIGFsbG93IGl0cyBjdXJyZW50CisgKiBzdXNwZWN0IHRvIHBhc3MgYmxhbWVzIHRvIGl0cyBwYXJlbnRzLgorICovCitzdGF0aWMgdm9pZCBhc3NpZ25fYmxhbWUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBvcHQpCit7CisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJc3RydWN0IG9yaWdpbiAqc3VzcGVjdCA9IE5VTEw7CisKKwkJLyogZmluZCBvbmUgc3VzcGVjdCB0byBicmVhayBkb3duICovCisJCWZvciAoZW50ID0gc2ItPmVudDsgIXN1c3BlY3QgJiYgZW50OyBlbnQgPSBlbnQtPm5leHQpCisJCQlpZiAoIWVudC0+Z3VpbHR5KQorCQkJCXN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7CisJCWlmICghc3VzcGVjdCkKKwkJCXJldHVybjsgLyogYWxsIGRvbmUgKi8KKworCQkvKgorCQkgKiBXZSB3aWxsIHVzZSB0aGlzIHN1c3BlY3QgbGF0ZXIgaW4gdGhlIGxvb3AsCisJCSAqIHNvIGhvbGQgb250byBpdCBpbiB0aGUgbWVhbnRpbWUuCisJCSAqLworCQlvcmlnaW5faW5jcmVmKHN1c3BlY3QpOworCQljb21taXQgPSBzdXNwZWN0LT5jb21taXQ7CisJCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgJiYKKwkJICAgICEocmV2cy0+bWF4X2FnZSAhPSAtMSAmJiBjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkKKwkJCXBhc3NfYmxhbWUoc2IsIHN1c3BlY3QsIG9wdCk7CisJCWVsc2UgeworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCWlmIChjb21taXQtPm9iamVjdC5wYXJzZWQpCisJCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0KTsKKwkJfQorCQkvKiB0cmVhdCByb290IGNvbW1pdCBhcyBib3VuZGFyeSAqLworCQlpZiAoIWNvbW1pdC0+cGFyZW50cyAmJiAhc2hvd19yb290KQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKworCQkvKiBUYWtlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgcmVtYWluaW5nIGVudHJpZXMgKi8KKwkJZm9yIChlbnQgPSBzYi0+ZW50OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkKKwkJCWlmICghY21wX3N1c3BlY3QoZW50LT5zdXNwZWN0LCBzdXNwZWN0KSkKKwkJCQlmb3VuZF9ndWlsdHlfZW50cnkoZW50KTsKKwkJb3JpZ2luX2RlY3JlZihzdXNwZWN0KTsKKworCQlpZiAoREVCVUcpIC8qIHNhbml0eSAqLworCQkJc2FuaXR5X2NoZWNrX3JlZmNudChzYik7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X3RpbWUodW5zaWduZWQgbG9uZyB0aW1lLCBjb25zdCBjaGFyICp0el9zdHIsCisJCQkgICAgICAgaW50IHNob3dfcmF3X3RpbWUpCit7CisJc3RhdGljIGNoYXIgdGltZV9idWZbMTI4XTsKKwl0aW1lX3QgdCA9IHRpbWU7CisJaW50IG1pbnV0ZXMsIHR6OworCXN0cnVjdCB0bSAqdG07CisKKwlpZiAoc2hvd19yYXdfdGltZSkgeworCQlzcHJpbnRmKHRpbWVfYnVmLCAiJWx1ICVzIiwgdGltZSwgdHpfc3RyKTsKKwkJcmV0dXJuIHRpbWVfYnVmOworCX0KKworCXR6ID0gYXRvaSh0el9zdHIpOworCW1pbnV0ZXMgPSB0eiA8IDAgPyAtdHogOiB0ejsKKwltaW51dGVzID0gKG1pbnV0ZXMgLyAxMDApKjYwICsgKG1pbnV0ZXMgJSAxMDApOworCW1pbnV0ZXMgPSB0eiA8IDAgPyAtbWludXRlcyA6IG1pbnV0ZXM7CisJdCA9IHRpbWUgKyBtaW51dGVzICogNjA7CisJdG0gPSBnbXRpbWUoJnQpOworCisJc3RyZnRpbWUodGltZV9idWYsIHNpemVvZih0aW1lX2J1ZiksICIlWS0lbS0lZCAlSDolTTolUyAiLCB0bSk7CisJc3RyY2F0KHRpbWVfYnVmLCB0el9zdHIpOworCXJldHVybiB0aW1lX2J1ZjsKK30KKwogI2RlZmluZSBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUCTAwMQogI2RlZmluZSBPVVRQVVRfTE9OR19PQkpFQ1RfTkFNRQkwMDIKICNkZWZpbmUgT1VUUFVUX1JBV19USU1FU1RBTVAJMDA0CkBAIC0xMjc5LDEzICsxNDk5LDEzIEBACiAJCXByaW50ZigiY29tbWl0dGVyLW1haWwgJXNcbiIsIGNpLmNvbW1pdHRlcl9tYWlsKTsKIAkJcHJpbnRmKCJjb21taXR0ZXItdGltZSAlbHVcbiIsIGNpLmNvbW1pdHRlcl90aW1lKTsKIAkJcHJpbnRmKCJjb21taXR0ZXItdHogJXNcbiIsIGNpLmNvbW1pdHRlcl90eik7Ci0JCXByaW50ZigiZmlsZW5hbWUgJXNcbiIsIHN1c3BlY3QtPnBhdGgpOworCQl3cml0ZV9maWxlbmFtZV9pbmZvKHN1c3BlY3QtPnBhdGgpOwogCQlwcmludGYoInN1bW1hcnkgJXNcbiIsIGNpLnN1bW1hcnkpOwogCQlpZiAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQogCQkJcHJpbnRmKCJib3VuZGFyeVxuIik7CiAJfQogCWVsc2UgaWYgKHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzICYgTU9SRV9USEFOX09ORV9QQVRIKQotCQlwcmludGYoImZpbGVuYW1lICVzXG4iLCBzdXNwZWN0LT5wYXRoKTsKKwkJd3JpdGVfZmlsZW5hbWVfaW5mbyhzdXNwZWN0LT5wYXRoKTsKIAogCWNwID0gbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKIAlmb3IgKGNudCA9IDA7IGNudCA8IGVudC0+bnVtX2xpbmVzOyBjbnQrKykgewpAQCAtMTM5MCw2ICsxNjEwLDEwIEBACiAJfQogfQogCisvKgorICogVG8gYWxsb3cgcXVpY2sgYWNjZXNzIHRvIHRoZSBjb250ZW50cyBvZiBudGggbGluZSBpbiB0aGUKKyAqIGZpbmFsIGltYWdlLCBwcmVwYXJlIGFuIGluZGV4IGluIHRoZSBzY29yZWJvYXJkLgorICovCiBzdGF0aWMgaW50IHByZXBhcmVfbGluZXMoc3RydWN0IHNjb3JlYm9hcmQgKnNiKQogewogCWNvbnN0IGNoYXIgKmJ1ZiA9IHNiLT5maW5hbF9idWY7CkBAIC0xNDE3LDYgKzE2NDEsMTEgQEAKIAlyZXR1cm4gc2ItPm51bV9saW5lczsKIH0KIAorLyoKKyAqIEFkZCBwaG9ueSBncmFmdHMgZm9yIHVzZSB3aXRoIC1TOyB0aGlzIGlzIHByaW1hcmlseSB0bworICogc3VwcG9ydCBnaXQtY3Zzc2VydmVyIHRoYXQgd2FudHMgdG8gZ2l2ZSBhIGxpbmVhciBoaXN0b3J5CisgKiB0byBpdHMgY2xpZW50cy4KKyAqLwogc3RhdGljIGludCByZWFkX2FuY2VzdHJ5KGNvbnN0IGNoYXIgKmdyYWZ0X2ZpbGUpCiB7CiAJRklMRSAqZnAgPSBmb3BlbihncmFmdF9maWxlLCAiciIpOwpAQCAtMTQzNCw2ICsxNjYzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEhvdyBtYW55IGNvbHVtbnMgZG8gd2UgbmVlZCB0byBzaG93IGxpbmUgbnVtYmVycyBpbiBkZWNpbWFsPworICovCiBzdGF0aWMgaW50IGxpbmVub193aWR0aChpbnQgbGluZXMpCiB7CiAgICAgICAgIGludCBpLCB3aWR0aDsKQEAgLTE0NDMsNiArMTY3NSwxMCBAQAogICAgICAgICByZXR1cm4gd2lkdGg7CiB9CiAKKy8qCisgKiBIb3cgbWFueSBjb2x1bW5zIGRvIHdlIG5lZWQgdG8gc2hvdyBsaW5lIG51bWJlcnMsIGF1dGhvcnMsCisgKiBhbmQgZmlsZW5hbWVzPworICovCiBzdGF0aWMgdm9pZCBmaW5kX2FsaWdubWVudChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIGludCAqb3B0aW9uKQogewogCWludCBsb25nZXN0X3NyY19saW5lcyA9IDA7CkBAIC0xNDgxLDYgKzE3MTcsMTAgQEAKIAltYXhfc2NvcmVfZGlnaXRzID0gbGluZW5vX3dpZHRoKGxhcmdlc3Rfc2NvcmUpOwogfQogCisvKgorICogRm9yIGRlYnVnZ2luZyAtLSBvcmlnaW4gaXMgcmVmY291bnRlZCwgYW5kIHRoaXMgYXNzZXJ0cyB0aGF0CisgKiB3ZSBkbyBub3QgdW5kZXJmbG93LgorICovCiBzdGF0aWMgdm9pZCBzYW5pdHlfY2hlY2tfcmVmY250KHN0cnVjdCBzY29yZWJvYXJkICpzYikKIHsKIAlpbnQgYmFhID0gMDsKQEAgLTE1MDIsOCArMTc0Miw5IEBACiAJCQllbnQtPnN1c3BlY3QtPnJlZmNudCA9IC1lbnQtPnN1c3BlY3QtPnJlZmNudDsKIAl9CiAJZm9yIChlbnQgPSBzYi0+ZW50OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgewotCQkvKiB0aGVuIHBpY2sgZWFjaCBhbmQgc2VlIGlmIHRoZXkgaGF2ZSB0aGUgdGhlIGNvcnJlY3QKLQkJICogcmVmY250LgorCQkvKgorCQkgKiAuLi4gdGhlbiBwaWNrIGVhY2ggYW5kIHNlZSBpZiB0aGV5IGhhdmUgdGhlIHRoZQorCQkgKiBjb3JyZWN0IHJlZmNudC4KIAkJICovCiAJCWludCBmb3VuZDsKIAkJc3RydWN0IGJsYW1lX2VudHJ5ICplOwpAQCAtMTUzMyw2ICsxNzc0LDEwIEBACiAJfQogfQogCisvKgorICogVXNlZCBmb3IgdGhlIGNvbW1hbmQgbGluZSBwYXJzaW5nOyBjaGVjayBpZiB0aGUgcGF0aCBleGlzdHMKKyAqIGluIHRoZSB3b3JraW5nIHRyZWUuCisgKi8KIHN0YXRpYyBpbnQgaGFzX3BhdGhfaW5fd29ya190cmVlKGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJc3RydWN0IHN0YXQgc3Q7CkBAIC0xNTU1LDYgKzE4MDAsOSBAQAogCXJldHVybiBwcmVmaXhfcGF0aChwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCBwYXRoKTsKIH0KIAorLyoKKyAqIFBhcnNpbmcgb2YgKGNvbW1hIHNlcGFyYXRlZCkgb25lIGl0ZW0gaW4gdGhlIC1MIG9wdGlvbgorICovCiBzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfbG9jKGNvbnN0IGNoYXIgKnNwZWMsCiAJCQkgICAgIHN0cnVjdCBzY29yZWJvYXJkICpzYiwgbG9uZyBsbm8sCiAJCQkgICAgIGxvbmcgYmVnaW4sIGxvbmcgKnJldCkKQEAgLTE2MjksNiArMTg3Nyw5IEBACiAJfQogfQogCisvKgorICogUGFyc2luZyBvZiAtTCBvcHRpb24KKyAqLwogc3RhdGljIHZvaWQgcHJlcGFyZV9ibGFtZV9yYW5nZShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCiAJCQkJY29uc3QgY2hhciAqYm90dG9tdG9wLAogCQkJCWxvbmcgbG5vLApAQCAtMTcxNyw2ICsxOTY4LDggQEAKIAkJCQlkaWUoIk1vcmUgdGhhbiBvbmUgJy1MIG4sbScgb3B0aW9uIGdpdmVuIik7CiAJCQlib3R0b210b3AgPSBhcmc7CiAJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcCgiLS1pbmNyZW1lbnRhbCIsIGFyZykpCisJCQlpbmNyZW1lbnRhbCA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoIi0tc2NvcmUtZGVidWciLCBhcmcpKQogCQkJb3V0cHV0X29wdGlvbiB8PSBPVVRQVVRfU0hPV19TQ09SRTsKIAkJZWxzZSBpZiAoIXN0cmNtcCgiLWYiLCBhcmcpIHx8CkBAIC0xNzM3LDEyICsxOTkwLDE2IEBACiAJCQlhcmd2W3VuaysrXSA9IGFyZzsKIAl9CiAKKwlpZiAoIWluY3JlbWVudGFsKQorCQlzZXR1cF9wYWdlcigpOworCiAJaWYgKCFibGFtZV9tb3ZlX3Njb3JlKQogCQlibGFtZV9tb3ZlX3Njb3JlID0gQkxBTUVfREVGQVVMVF9NT1ZFX1NDT1JFOwogCWlmICghYmxhbWVfY29weV9zY29yZSkKIAkJYmxhbWVfY29weV9zY29yZSA9IEJMQU1FX0RFRkFVTFRfQ09QWV9TQ09SRTsKIAotCS8qIFdlIGhhdmUgY29sbGVjdGVkIG9wdGlvbnMgdW5rbm93biB0byB1cyBpbiBhcmd2WzEuLnVua10KKwkvKgorCSAqIFdlIGhhdmUgY29sbGVjdGVkIG9wdGlvbnMgdW5rbm93biB0byB1cyBpbiBhcmd2WzEuLnVua10KIAkgKiB3aGljaCBhcmUgdG8gYmUgcGFzc2VkIHRvIHJldmlzaW9uIG1hY2hpbmVyeSBpZiB3ZSBhcmUKIAkgKiBnb2luZyB0byBkbyB0aGUgImJvdHRvbSIgcHJvY2VzaW5nLgogCSAqCkBAIC0xODIyLDcgKzIwNzksOCBAQAogCWlmIChmaW5hbF9jb21taXRfbmFtZSkKIAkJYXJndlt1bmsrK10gPSBmaW5hbF9jb21taXRfbmFtZTsKIAotCS8qIE5vdyB3ZSBnb3QgcmV2IGFuZCBwYXRoLiAgV2UgZG8gbm90IHdhbnQgdGhlIHBhdGggcHJ1bmluZworCS8qCisJICogTm93IHdlIGdvdCByZXYgYW5kIHBhdGguICBXZSBkbyBub3Qgd2FudCB0aGUgcGF0aCBwcnVuaW5nCiAJICogYnV0IHdlIG1heSB3YW50ICJib3R0b20iIHByb2Nlc3NpbmcuCiAJICovCiAJYXJndlt1bmsrK10gPSAiLS0iOyAvKiB0ZXJtaW5hdGUgdGhlIHJldiBuYW1lICovCkBAIC0xODMyLDcgKzIwOTAsOCBAQAogCXNldHVwX3JldmlzaW9ucyh1bmssIGFyZ3YsICZyZXZzLCAiSEVBRCIpOwogCW1lbXNldCgmc2IsIDAsIHNpemVvZihzYikpOwogCi0JLyogVGhlcmUgbXVzdCBiZSBvbmUgYW5kIG9ubHkgb25lIHBvc2l0aXZlIGNvbW1pdCBpbiB0aGUKKwkvKgorCSAqIFRoZXJlIG11c3QgYmUgb25lIGFuZCBvbmx5IG9uZSBwb3NpdGl2ZSBjb21taXQgaW4gdGhlCiAJICogcmV2cy0+cGVuZGluZyBhcnJheS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcmV2cy5wZW5kaW5nLm5yOyBpKyspIHsKQEAgLTE4NTMsNyArMjExMiwxMCBAQAogCX0KIAogCWlmICghc2IuZmluYWwpIHsKLQkJLyogIi0tbm90IEEgQiAtLSBwYXRoIiB3aXRob3V0IGFueXRoaW5nIHBvc2l0aXZlICovCisJCS8qCisJCSAqICItLW5vdCBBIEIgLS0gcGF0aCIgd2l0aG91dCBhbnl0aGluZyBwb3NpdGl2ZTsKKwkJICogZGVmYXVsdCB0byBIRUFELgorCQkgKi8KIAkJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOwogCiAJCWZpbmFsX2NvbW1pdF9uYW1lID0gIkhFQUQiOwpAQCAtMTg2Myw3ICsyMTI1LDggQEAKIAkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCAmKHNiLmZpbmFsLT5vYmplY3QpLCAiSEVBRCIpOwogCX0KIAotCS8qIElmIHdlIGhhdmUgYm90dG9tLCB0aGlzIHdpbGwgbWFyayB0aGUgYW5jZXN0b3JzIG9mIHRoZQorCS8qCisJICogSWYgd2UgaGF2ZSBib3R0b20sIHRoaXMgd2lsbCBtYXJrIHRoZSBhbmNlc3RvcnMgb2YgdGhlCiAJICogYm90dG9tIGNvbW1pdHMgd2Ugd291bGQgcmVhY2ggd2hpbGUgdHJhdmVyc2luZyBhcwogCSAqIHVuaW50ZXJlc3RpbmcuCiAJICovCkBAIC0xOTA3LDYgKzIxNzAsOSBAQAogCiAJYXNzaWduX2JsYW1lKCZzYiwgJnJldnMsIG9wdCk7CiAKKwlpZiAoaW5jcmVtZW50YWwpCisJCXJldHVybiAwOworCiAJY29hbGVzY2UoJnNiKTsKIAogCWlmICghKG91dHB1dF9vcHRpb24gJiBPVVRQVVRfUE9SQ0VMQUlOKSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYnJhbmNoLmMgYi9idWlsdGluLWJyYW5jaC5jCmluZGV4IGM3NjBlMTguLmQ2MDY5MGIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYnJhbmNoLmMKKysrIGIvYnVpbHRpbi1icmFuY2guYwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJaWYgKHJlc29sdmVfcmVmKHJlZiwgc2hhMSwgMSwgTlVMTCkpIHsKIAkJaWYgKCFmb3JjZSkKIAkJCWRpZSgiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iLCBuYW1lKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChoZWFkLCBuYW1lKSkKKwkJZWxzZSBpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeSgpICYmICFzdHJjbXAoaGVhZCwgbmFtZSkpCiAJCQlkaWUoIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIpOwogCX0KIApAQCAtMzk0LDcgKzM5NCw2IEBACiAJaW50IGtpbmRzID0gUkVGX0xPQ0FMX0JSQU5DSDsKIAlpbnQgaTsKIAotCXNldHVwX2lkZW50KCk7CiAJZ2l0X2NvbmZpZyhnaXRfYnJhbmNoX2NvbmZpZyk7CiAKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CmRpZmYgLS1naXQgYS9idWlsdGluLWNvbW1pdC10cmVlLmMgYi9idWlsdGluLWNvbW1pdC10cmVlLmMKaW5kZXggMDY1MWU1OS4uMmE4MThhMCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb21taXQtdHJlZS5jCisrKyBiL2J1aWx0aW4tY29tbWl0LXRyZWUuYwpAQCAtOTQsNyArOTQsNiBAQAogCXVuc2lnbmVkIGludCBzaXplOwogCWludCBlbmNvZGluZ19pc191dGY4OwogCi0Jc2V0dXBfaWRlbnQoKTsKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CiAKIAlpZiAoYXJnYyA8IDIpCmRpZmYgLS1naXQgYS9idWlsdGluLXJlcG8tY29uZmlnLmMgYi9idWlsdGluLWNvbmZpZy5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGJ1aWx0aW4tcmVwby1jb25maWcuYwpyZW5hbWUgdG8gYnVpbHRpbi1jb25maWcuYwppbmRleCA5MDYzMzExLi4wZjkwNTFkIDEwMDY0NAotLS0gYS9idWlsdGluLXJlcG8tY29uZmlnLmMKKysrIGIvYnVpbHRpbi1jb25maWcuYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBnaXRfY29uZmlnX3NldF91c2FnZVtdID0KLSJnaXQtcmVwby1jb25maWcgWyAtLWdsb2JhbCBdIFsgLS1ib29sIHwgLS1pbnQgXSBbLS1nZXQgfCAtLWdldC1hbGwgfCAtLWdldC1yZWdleHAgfCAtLXJlcGxhY2UtYWxsIHwgLS1hZGQgfCAtLXVuc2V0IHwgLS11bnNldC1hbGxdIG5hbWUgW3ZhbHVlIFt2YWx1ZV9yZWdleF1dIHwgLS1yZW5hbWUtc2VjdGlvbiBvbGRfbmFtZSBuZXdfbmFtZSB8IC0tbGlzdCI7CisiZ2l0LWNvbmZpZyBbIC0tZ2xvYmFsIF0gWyAtLWJvb2wgfCAtLWludCBdIFstLWdldCB8IC0tZ2V0LWFsbCB8IC0tZ2V0LXJlZ2V4cCB8IC0tcmVwbGFjZS1hbGwgfCAtLWFkZCB8IC0tdW5zZXQgfCAtLXVuc2V0LWFsbF0gbmFtZSBbdmFsdWUgW3ZhbHVlX3JlZ2V4XV0gfCAtLXJlbmFtZS1zZWN0aW9uIG9sZF9uYW1lIG5ld19uYW1lIHwgLS1saXN0IjsKIAogc3RhdGljIGNoYXIgKmtleTsKIHN0YXRpYyByZWdleF90ICprZXlfcmVnZXhwOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGNtZF9yZXBvX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK2ludCBjbWRfY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBub25naXQgPSAwOwogCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1kZXNjcmliZS5jIGIvYnVpbHRpbi1kZXNjcmliZS5jCmluZGV4IGE4Yzk4Y2UuLmJjYzY0NTYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZGVzY3JpYmUuYworKysgYi9idWlsdGluLWRlc2NyaWJlLmMKQEAgLTIsNTcgKzIsNDEgQEAKICNpbmNsdWRlICJjb21taXQuaCIKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJyZWZzLmgiCi0jaW5jbHVkZSAiZGlmZi5oIgotI2luY2x1ZGUgImRpZmZjb3JlLmgiCi0jaW5jbHVkZSAicmV2aXNpb24uaCIKICNpbmNsdWRlICJidWlsdGluLmgiCiAKKyNkZWZpbmUgU0VFTgkJKDF1PDwwKQorI2RlZmluZSBNQVhfVEFHUwkoRkxBR19CSVRTIC0gMSkKKwogc3RhdGljIGNvbnN0IGNoYXIgZGVzY3JpYmVfdXNhZ2VbXSA9CiAiZ2l0LWRlc2NyaWJlIFstLWFsbF0gWy0tdGFnc10gWy0tYWJicmV2PTxuPl0gPGNvbW1pdHRpc2g+KiI7CiAKK3N0YXRpYyBpbnQgZGVidWc7CS8qIERpc3BsYXkgbG90cyBvZiB2ZXJib3NlIGluZm8gKi8KIHN0YXRpYyBpbnQgYWxsOwkvKiBEZWZhdWx0IHRvIGFubm90YXRlZCB0YWdzIG9ubHkgKi8KIHN0YXRpYyBpbnQgdGFnczsJLyogQnV0IGFsbG93IGFueSB0YWdzIGlmIC0tdGFncyBpcyBzcGVjaWZpZWQgKi8KLQogc3RhdGljIGludCBhYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKK3N0YXRpYyBpbnQgbWF4X2NhbmRpZGF0ZXMgPSAxMDsKIAotc3RhdGljIGludCBuYW1lcywgYWxsb2NzOwotc3RhdGljIHN0cnVjdCBjb21taXRfbmFtZSB7Ci0Jc3RydWN0IGNvbW1pdCAqY29tbWl0Oworc3RydWN0IGNvbW1pdF9uYW1lIHsKIAlpbnQgcHJpbzsgLyogYW5ub3RhdGVkIHRhZyA9IDIsIHRhZyA9IDEsIGhlYWQgPSAwICovCiAJY2hhciBwYXRoW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCi19ICoqbmFtZV9hcnJheSA9IE5VTEw7Ci0KLXN0YXRpYyBzdHJ1Y3QgY29tbWl0X25hbWUgKm1hdGNoKHN0cnVjdCBjb21taXQgKmNtaXQpCi17Ci0JaW50IGkgPSBuYW1lczsKLQlzdHJ1Y3QgY29tbWl0X25hbWUgKipwID0gbmFtZV9hcnJheTsKLQotCXdoaWxlIChpLS0gPiAwKSB7Ci0JCXN0cnVjdCBjb21taXRfbmFtZSAqbiA9ICpwKys7Ci0JCWlmIChuLT5jb21taXQgPT0gY21pdCkKLQkJCXJldHVybiBuOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KK307CitzdGF0aWMgY29uc3QgY2hhciAqcHJpb19uYW1lc1tdID0geworCSJoZWFkIiwgImxpZ2h0d2VpZ2h0IiwgImFubm90YXRlZCIsCit9OwogCiBzdGF0aWMgdm9pZCBhZGRfdG9fa25vd25fbmFtZXMoY29uc3QgY2hhciAqcGF0aCwKIAkJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCiAJCQkgICAgICAgaW50IHByaW8pCiB7Ci0JaW50IGlkeDsKLQlpbnQgbGVuID0gc3RybGVuKHBhdGgpKzE7Ci0Jc3RydWN0IGNvbW1pdF9uYW1lICpuYW1lID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9uYW1lKSArIGxlbik7Ci0KLQluYW1lLT5jb21taXQgPSBjb21taXQ7Ci0JbmFtZS0+cHJpbyA9IHByaW87Ci0JbWVtY3B5KG5hbWUtPnBhdGgsIHBhdGgsIGxlbik7Ci0JaWR4ID0gbmFtZXM7Ci0JaWYgKGlkeCA+PSBhbGxvY3MpIHsKLQkJYWxsb2NzID0gKGlkeCArIDUwKSAqIDMgLyAyOwotCQluYW1lX2FycmF5ID0geHJlYWxsb2MobmFtZV9hcnJheSwgYWxsb2NzKnNpemVvZigqbmFtZV9hcnJheSkpOworCXN0cnVjdCBjb21taXRfbmFtZSAqZSA9IGNvbW1pdC0+dXRpbDsKKwlpZiAoIWUgfHwgZS0+cHJpbyA8IHByaW8pIHsKKwkJc2l6ZV90IGxlbiA9IHN0cmxlbihwYXRoKSsxOworCQlmcmVlKGUpOworCQllID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9uYW1lKSArIGxlbik7CisJCWUtPnByaW8gPSBwcmlvOworCQltZW1jcHkoZS0+cGF0aCwgcGF0aCwgbGVuKTsKKwkJY29tbWl0LT51dGlsID0gZTsKIAl9Ci0JbmFtZV9hcnJheVtpZHhdID0gbmFtZTsKLQluYW1lcyA9ICsraWR4OwogfQogCiBzdGF0aWMgaW50IGdldF9uYW1lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQpAQCAtODcsMzIgKzcxLDY5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGFyZV9uYW1lcyhjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCi17Ci0Jc3RydWN0IGNvbW1pdF9uYW1lICphID0gKihzdHJ1Y3QgY29tbWl0X25hbWUgKiopX2E7Ci0Jc3RydWN0IGNvbW1pdF9uYW1lICpiID0gKihzdHJ1Y3QgY29tbWl0X25hbWUgKiopX2I7Ci0JdW5zaWduZWQgbG9uZyBhX2RhdGUgPSBhLT5jb21taXQtPmRhdGU7Ci0JdW5zaWduZWQgbG9uZyBiX2RhdGUgPSBiLT5jb21taXQtPmRhdGU7CitzdHJ1Y3QgcG9zc2libGVfdGFnIHsKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKm5hbWU7CisJaW50IGRlcHRoOworCWludCBmb3VuZF9vcmRlcjsKKwl1bnNpZ25lZCBmbGFnX3dpdGhpbjsKK307CiAKLQlpZiAoYS0+cHJpbyAhPSBiLT5wcmlvKQotCQlyZXR1cm4gYi0+cHJpbyAtIGEtPnByaW87Ci0JcmV0dXJuIChhX2RhdGUgPiBiX2RhdGUpID8gLTEgOiAoYV9kYXRlID09IGJfZGF0ZSkgPyAwIDogMTsKK3N0YXRpYyBpbnQgY29tcGFyZV9wdChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHBvc3NpYmxlX3RhZyAqYSA9IChzdHJ1Y3QgcG9zc2libGVfdGFnICopYV87CisJc3RydWN0IHBvc3NpYmxlX3RhZyAqYiA9IChzdHJ1Y3QgcG9zc2libGVfdGFnICopYl87CisJaWYgKGEtPm5hbWUtPnByaW8gIT0gYi0+bmFtZS0+cHJpbykKKwkJcmV0dXJuIGItPm5hbWUtPnByaW8gLSBhLT5uYW1lLT5wcmlvOworCWlmIChhLT5kZXB0aCAhPSBiLT5kZXB0aCkKKwkJcmV0dXJuIGEtPmRlcHRoIC0gYi0+ZGVwdGg7CisJaWYgKGEtPmZvdW5kX29yZGVyICE9IGItPmZvdW5kX29yZGVyKQorCQlyZXR1cm4gYS0+Zm91bmRfb3JkZXIgLSBiLT5mb3VuZF9vcmRlcjsKKwlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHBvc3NpYmxlX3RhZyB7Ci0Jc3RydWN0IHBvc3NpYmxlX3RhZyAqbmV4dDsKLQlzdHJ1Y3QgY29tbWl0X25hbWUgKm5hbWU7Ci0JdW5zaWduZWQgbG9uZyBkZXB0aDsKLX07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5pc2hfZGVwdGhfY29tcHV0YXRpb24oCisJc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwKKwlzdHJ1Y3QgcG9zc2libGVfdGFnICpiZXN0KQoreworCXVuc2lnbmVkIGxvbmcgc2Vlbl9jb21taXRzID0gMDsKKwl3aGlsZSAoKmxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IHBvcF9jb21taXQobGlzdCk7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCXNlZW5fY29tbWl0cysrOworCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgYmVzdC0+ZmxhZ193aXRoaW4pIHsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqYSA9ICpsaXN0OworCQkJd2hpbGUgKGEpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICppID0gYS0+aXRlbTsKKwkJCQlpZiAoIShpLT5vYmplY3QuZmxhZ3MgJiBiZXN0LT5mbGFnX3dpdGhpbikpCisJCQkJCWJyZWFrOworCQkJCWEgPSBhLT5uZXh0OworCQkJfQorCQkJaWYgKCFhKQorCQkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWJlc3QtPmRlcHRoKys7CisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCXBhcnNlX2NvbW1pdChwKTsKKwkJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pKQorCQkJCWluc2VydF9ieV9kYXRlKHAsIGxpc3QpOworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IGMtPm9iamVjdC5mbGFnczsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQl9CisJfQorCXJldHVybiBzZWVuX2NvbW1pdHM7Cit9CiAKIHN0YXRpYyB2b2lkIGRlc2NyaWJlKGNvbnN0IGNoYXIgKmFyZywgaW50IGxhc3Rfb25lKQogewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0Jc3RydWN0IGNvbW1pdCAqY21pdDsKKwlzdHJ1Y3QgY29tbWl0ICpjbWl0LCAqZ2F2ZV91cF9vbiA9IE5VTEw7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OwogCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOwogCXN0cnVjdCBjb21taXRfbmFtZSAqbjsKLQlzdHJ1Y3QgcG9zc2libGVfdGFnICphbGxfbWF0Y2hlcywgKm1pbl9tYXRjaCwgKmN1cl9tYXRjaDsKKwlzdHJ1Y3QgcG9zc2libGVfdGFnIGFsbF9tYXRjaGVzW01BWF9UQUdTXTsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hfY250ID0gMCwgYW5ub3RhdGVkX2NudCA9IDAsIGN1cl9tYXRjaDsKKwl1bnNpZ25lZCBsb25nIHNlZW5fY29tbWl0cyA9IDA7CiAKIAlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSkKIAkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CkBAIC0xMjMsNzggKzE0NCw5OSBAQAogCWlmICghaW5pdGlhbGl6ZWQpIHsKIAkJaW5pdGlhbGl6ZWQgPSAxOwogCQlmb3JfZWFjaF9yZWYoZ2V0X25hbWUsIE5VTEwpOwotCQlxc29ydChuYW1lX2FycmF5LCBuYW1lcywgc2l6ZW9mKCpuYW1lX2FycmF5KSwgY29tcGFyZV9uYW1lcyk7CiAJfQogCi0JbiA9IG1hdGNoKGNtaXQpOworCW4gPSBjbWl0LT51dGlsOwogCWlmIChuKSB7CiAJCXByaW50ZigiJXNcbiIsIG4tPnBhdGgpOwogCQlyZXR1cm47CiAJfQogCisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgInNlYXJjaGluZyB0byBkZXNjcmliZSAlc1xuIiwgYXJnKTsKKwogCWxpc3QgPSBOVUxMOwotCWFsbF9tYXRjaGVzID0gTlVMTDsKLQljdXJfbWF0Y2ggPSBOVUxMOworCWNtaXQtPm9iamVjdC5mbGFncyA9IFNFRU47CiAJY29tbWl0X2xpc3RfaW5zZXJ0KGNtaXQsICZsaXN0KTsKIAl3aGlsZSAobGlzdCkgewogCQlzdHJ1Y3QgY29tbWl0ICpjID0gcG9wX2NvbW1pdCgmbGlzdCk7Ci0JCW4gPSBtYXRjaChjKTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gYy0+cGFyZW50czsKKwkJc2Vlbl9jb21taXRzKys7CisJCW4gPSBjLT51dGlsOwogCQlpZiAobikgewotCQkJc3RydWN0IHBvc3NpYmxlX3RhZyAqcCA9IHhtYWxsb2Moc2l6ZW9mKCpwKSk7Ci0JCQlwLT5uYW1lID0gbjsKLQkJCXAtPm5leHQgPSBOVUxMOwotCQkJaWYgKGN1cl9tYXRjaCkKLQkJCQljdXJfbWF0Y2gtPm5leHQgPSBwOwotCQkJZWxzZQotCQkJCWFsbF9tYXRjaGVzID0gcDsKLQkJCWN1cl9tYXRjaCA9IHA7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBjLT5wYXJlbnRzOwotCQkJd2hpbGUgKHBhcmVudHMpIHsKLQkJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKLQkJCQlwYXJzZV9jb21taXQocCk7Ci0JCQkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgU0VFTikpIHsKLQkJCQkJcC0+b2JqZWN0LmZsYWdzIHw9IFNFRU47Ci0JCQkJCWluc2VydF9ieV9kYXRlKHAsICZsaXN0KTsKLQkJCQl9Ci0JCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCQlpZiAobWF0Y2hfY250IDwgbWF4X2NhbmRpZGF0ZXMpIHsKKwkJCQlzdHJ1Y3QgcG9zc2libGVfdGFnICp0ID0gJmFsbF9tYXRjaGVzW21hdGNoX2NudCsrXTsKKwkJCQl0LT5uYW1lID0gbjsKKwkJCQl0LT5kZXB0aCA9IHNlZW5fY29tbWl0cyAtIDE7CisJCQkJdC0+ZmxhZ193aXRoaW4gPSAxdSA8PCBtYXRjaF9jbnQ7CisJCQkJdC0+Zm91bmRfb3JkZXIgPSBtYXRjaF9jbnQ7CisJCQkJYy0+b2JqZWN0LmZsYWdzIHw9IHQtPmZsYWdfd2l0aGluOworCQkJCWlmIChuLT5wcmlvID09IDIpCisJCQkJCWFubm90YXRlZF9jbnQrKzsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWdhdmVfdXBfb24gPSBjOworCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCWZvciAoY3VyX21hdGNoID0gMDsgY3VyX21hdGNoIDwgbWF0Y2hfY250OyBjdXJfbWF0Y2grKykgeworCQkJc3RydWN0IHBvc3NpYmxlX3RhZyAqdCA9ICZhbGxfbWF0Y2hlc1tjdXJfbWF0Y2hdOworCQkJaWYgKCEoYy0+b2JqZWN0LmZsYWdzICYgdC0+ZmxhZ193aXRoaW4pKQorCQkJCXQtPmRlcHRoKys7CisJCX0KKwkJaWYgKGFubm90YXRlZF9jbnQgJiYgIWxpc3QpIHsKKwkJCWlmIChkZWJ1ZykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIiwKKwkJCQkJc2hhMV90b19oZXgoYy0+b2JqZWN0LnNoYTEpKTsKKwkJCWJyZWFrOworCQl9CisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCXBhcnNlX2NvbW1pdChwKTsKKwkJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pKQorCQkJCWluc2VydF9ieV9kYXRlKHAsICZsaXN0KTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBjLT5vYmplY3QuZmxhZ3M7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJfQogCX0KIAotCWlmICghYWxsX21hdGNoZXMpCisJaWYgKCFtYXRjaF9jbnQpCiAJCWRpZSgiY2Fubm90IGRlc2NyaWJlICclcyciLCBzaGExX3RvX2hleChjbWl0LT5vYmplY3Quc2hhMSkpOwogCi0JbWluX21hdGNoID0gTlVMTDsKLQlmb3IgKGN1cl9tYXRjaCA9IGFsbF9tYXRjaGVzOyBjdXJfbWF0Y2g7IGN1cl9tYXRjaCA9IGN1cl9tYXRjaC0+bmV4dCkgewotCQlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKLQkJc3RydWN0IGNvbW1pdCAqdGFnZ2VkID0gY3VyX21hdGNoLT5uYW1lLT5jb21taXQ7CisJcXNvcnQoYWxsX21hdGNoZXMsIG1hdGNoX2NudCwgc2l6ZW9mKGFsbF9tYXRjaGVzWzBdKSwgY29tcGFyZV9wdCk7CiAKLQkJY2xlYXJfY29tbWl0X21hcmtzKGNtaXQsIC0xKTsKLQkJaW5pdF9yZXZpc2lvbnMoJnJldnMsIE5VTEwpOwotCQl0YWdnZWQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOwotCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsICZ0YWdnZWQtPm9iamVjdCwgTlVMTCk7Ci0JCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgJmNtaXQtPm9iamVjdCwgTlVMTCk7Ci0KLQkJcHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKTsKLQkJY3VyX21hdGNoLT5kZXB0aCA9IDA7Ci0JCXdoaWxlICgoIW1pbl9tYXRjaCB8fCBjdXJfbWF0Y2gtPmRlcHRoIDwgbWluX21hdGNoLT5kZXB0aCkKLQkJCSYmIGdldF9yZXZpc2lvbigmcmV2cykpCi0JCQljdXJfbWF0Y2gtPmRlcHRoKys7Ci0JCWlmICghbWluX21hdGNoIHx8IGN1cl9tYXRjaC0+ZGVwdGggPCBtaW5fbWF0Y2gtPmRlcHRoKQotCQkJbWluX21hdGNoID0gY3VyX21hdGNoOwotCQlmcmVlX2NvbW1pdF9saXN0KHJldnMuY29tbWl0cyk7CisJaWYgKGdhdmVfdXBfb24pIHsKKwkJaW5zZXJ0X2J5X2RhdGUoZ2F2ZV91cF9vbiwgJmxpc3QpOworCQlzZWVuX2NvbW1pdHMtLTsKIAl9Ci0JcHJpbnRmKCIlcy1nJXNcbiIsIG1pbl9tYXRjaC0+bmFtZS0+cGF0aCwKLQkJICAgZmluZF91bmlxdWVfYWJicmV2KGNtaXQtPm9iamVjdC5zaGExLCBhYmJyZXYpKTsKKwlzZWVuX2NvbW1pdHMgKz0gZmluaXNoX2RlcHRoX2NvbXB1dGF0aW9uKCZsaXN0LCAmYWxsX21hdGNoZXNbMF0pOworCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CiAKLQlpZiAoIWxhc3Rfb25lKSB7Ci0JCWZvciAoY3VyX21hdGNoID0gYWxsX21hdGNoZXM7IGN1cl9tYXRjaDsgY3VyX21hdGNoID0gbWluX21hdGNoKSB7Ci0JCQltaW5fbWF0Y2ggPSBjdXJfbWF0Y2gtPm5leHQ7Ci0JCQlmcmVlKGN1cl9tYXRjaCk7CisJaWYgKGRlYnVnKSB7CisJCWZvciAoY3VyX21hdGNoID0gMDsgY3VyX21hdGNoIDwgbWF0Y2hfY250OyBjdXJfbWF0Y2grKykgeworCQkJc3RydWN0IHBvc3NpYmxlX3RhZyAqdCA9ICZhbGxfbWF0Y2hlc1tjdXJfbWF0Y2hdOworCQkJZnByaW50ZihzdGRlcnIsICIgJS0xMXMgJThkICVzXG4iLAorCQkJCXByaW9fbmFtZXNbdC0+bmFtZS0+cHJpb10sCisJCQkJdC0+ZGVwdGgsIHQtPm5hbWUtPnBhdGgpOwogCQl9Ci0JCWNsZWFyX2NvbW1pdF9tYXJrcyhjbWl0LCBTRUVOKTsKKwkJZnByaW50ZihzdGRlcnIsICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIsIHNlZW5fY29tbWl0cyk7CisJCWlmIChnYXZlX3VwX29uKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorCQkJCSJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIiwKKwkJCQltYXhfY2FuZGlkYXRlcywgbWF4X2NhbmRpZGF0ZXMsCisJCQkJc2hhMV90b19oZXgoZ2F2ZV91cF9vbi0+b2JqZWN0LnNoYTEpKTsKKwkJfQogCX0KKwlpZiAoYWJicmV2ID09IDApCisJCXByaW50ZigiJXNcbiIsIGFsbF9tYXRjaGVzWzBdLm5hbWUtPnBhdGggKTsKKwllbHNlCisJCXByaW50ZigiJXMtJWQtZyVzXG4iLCBhbGxfbWF0Y2hlc1swXS5uYW1lLT5wYXRoLAorCQkgICAgICAgYWxsX21hdGNoZXNbMF0uZGVwdGgsCisJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY21pdC0+b2JqZWN0LnNoYTEsIGFiYnJldikpOworCisJaWYgKCFsYXN0X29uZSkKKwkJY2xlYXJfY29tbWl0X21hcmtzKGNtaXQsIC0xKTsKIH0KIAogaW50IGNtZF9kZXNjcmliZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKQEAgLTIwNiwxNSArMjQ4LDI0IEBACiAKIAkJaWYgKCphcmcgIT0gJy0nKQogCQkJYnJlYWs7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kZWJ1ZyIpKQorCQkJZGVidWcgPSAxOwogCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWxsIikpCiAJCQlhbGwgPSAxOwogCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tdGFncyIpKQogCQkJdGFncyA9IDE7CiAJCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi0tYWJicmV2PSIsIDkpKSB7CiAJCQlhYmJyZXYgPSBzdHJ0b3VsKGFyZyArIDksIE5VTEwsIDEwKTsKLQkJCWlmIChhYmJyZXYgPCBNSU5JTVVNX0FCQlJFViB8fCA0MCA8IGFiYnJldikKKwkJCWlmIChhYmJyZXYgIT0gMCAmJiAoYWJicmV2IDwgTUlOSU1VTV9BQkJSRVYgfHwgNDAgPCBhYmJyZXYpKQogCQkJCWFiYnJldiA9IERFRkFVTFRfQUJCUkVWOwogCQl9CisJCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi0tY2FuZGlkYXRlcz0iLCAxMykpIHsKKwkJCW1heF9jYW5kaWRhdGVzID0gc3RydG91bChhcmcgKyAxMywgTlVMTCwgMTApOworCQkJaWYgKG1heF9jYW5kaWRhdGVzIDwgMSkKKwkJCQltYXhfY2FuZGlkYXRlcyA9IDE7CisJCQllbHNlIGlmIChtYXhfY2FuZGlkYXRlcyA+IE1BWF9UQUdTKQorCQkJCW1heF9jYW5kaWRhdGVzID0gTUFYX1RBR1M7CisJCX0KIAkJZWxzZQogCQkJdXNhZ2UoZGVzY3JpYmVfdXNhZ2UpOwogCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tZm9yLWVhY2gtcmVmLmMgYi9idWlsdGluLWZvci1lYWNoLXJlZi5jCmluZGV4IGFmNzJhMTIuLjlkNWYyNjYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZm9yLWVhY2gtcmVmLmMKKysrIGIvYnVpbHRpbi1mb3ItZWFjaC1yZWYuYwpAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBRVU9URV9TSEVMTCAxCiAjZGVmaW5lIFFVT1RFX1BFUkwgMgogI2RlZmluZSBRVU9URV9QWVRIT04gMworI2RlZmluZSBRVU9URV9UQ0wgNAogCiB0eXBlZGVmIGVudW0geyBGSUVMRF9TVFIsIEZJRUxEX1VMT05HLCBGSUVMRF9USU1FIH0gY21wX3R5cGU7CiAKQEAgLTcyMyw2ICs3MjQsOSBAQAogCWNhc2UgUVVPVEVfUFlUSE9OOgogCQlweXRob25fcXVvdGVfcHJpbnQoc3Rkb3V0LCB2LT5zKTsKIAkJYnJlYWs7CisJY2FzZSBRVU9URV9UQ0w6CisJCXRjbF9xdW90ZV9wcmludChzdGRvdXQsIHYtPnMpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTgzNCw2ICs4MzgsMTIgQEAKIAkJCXF1b3RlX3N0eWxlID0gUVVPVEVfUFlUSE9OOwogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS10Y2wiKSApIHsKKwkJCWlmICgwIDw9IHF1b3RlX3N0eWxlKQorCQkJCWRpZSgibW9yZSB0aGFuIG9uZSBxdW90aW5nIHN0eWxlPyIpOworCQkJcXVvdGVfc3R5bGUgPSBRVU9URV9UQ0w7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoIXN0cm5jbXAoYXJnLCAiLS1jb3VudD0iLCA4KSkgewogCQkJaWYgKG1heGNvdW50KQogCQkJCWRpZSgibW9yZSB0aGFuIG9uZSAtLWNvdW50PyIpOwpkaWZmIC0tZ2l0IGEvZnNjay1vYmplY3RzLmMgYi9idWlsdGluLWZzY2suYwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBmc2NrLW9iamVjdHMuYwpyZW5hbWUgdG8gYnVpbHRpbi1mc2NrLmMKaW5kZXggODFmMDBkYi4uZmVjMWNiZCAxMDA2NDQKLS0tIGEvZnNjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi1mc2NrLmMKQEAgLTU0LDYgKzU0LDk5IEBACiAJcmV0dXJuIC0xOwogfQogCisvKgorICogQ2hlY2sgYSBzaW5nbGUgcmVhY2hhYmxlIG9iamVjdAorICovCitzdGF0aWMgdm9pZCBjaGVja19yZWFjaGFibGVfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X3JlZnMgKnJlZnM7CisKKwkvKgorCSAqIFdlIG9idmlvdXNseSB3YW50IHRoZSBvYmplY3QgdG8gYmUgcGFyc2VkLAorCSAqIGV4Y2VwdCBpZiBpdCB3YXMgaW4gYSBwYWNrLWZpbGUgYW5kIHdlIGRpZG4ndAorCSAqIGRvIGEgZnVsbCBmc2NrCisJICovCisJaWYgKCFvYmotPnBhcnNlZCkgeworCQlpZiAoaGFzX3NoYTFfZmlsZShvYmotPnNoYTEpKQorCQkJcmV0dXJuOyAvKiBpdCBpcyBpbiBwYWNrIC0gZm9yZ2V0IGFib3V0IGl0ICovCisJCXByaW50ZigibWlzc2luZyAlcyAlc1xuIiwgdHlwZW5hbWUob2JqLT50eXBlKSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgZXZlcnl0aGluZyB0aGF0IHdlIHRyeSB0byByZWZlcmVuY2UgaXMgYWxzbyBnb29kLgorCSAqLworCXJlZnMgPSBsb29rdXBfb2JqZWN0X3JlZnMob2JqKTsKKwlpZiAocmVmcykgeworCQl1bnNpZ25lZCBqOworCQlmb3IgKGogPSAwOyBqIDwgcmVmcy0+Y291bnQ7IGorKykgeworCQkJc3RydWN0IG9iamVjdCAqcmVmID0gcmVmcy0+cmVmW2pdOworCQkJaWYgKHJlZi0+cGFyc2VkIHx8CisJCQkgICAgKGhhc19zaGExX2ZpbGUocmVmLT5zaGExKSkpCisJCQkJY29udGludWU7CisJCQlwcmludGYoImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iLAorCQkJICAgICAgIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQkJcHJpbnRmKCIgICAgICAgICAgICAgIHRvICU3cyAlc1xuIiwKKwkJCSAgICAgICB0eXBlbmFtZShyZWYtPnR5cGUpLCBzaGExX3RvX2hleChyZWYtPnNoYTEpKTsKKwkJfQorCX0KK30KKworLyoKKyAqIENoZWNrIGEgc2luZ2xlIHVucmVhY2hhYmxlIG9iamVjdAorICovCitzdGF0aWMgdm9pZCBjaGVja191bnJlYWNoYWJsZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCS8qCisJICogTWlzc2luZyB1bnJlYWNoYWJsZSBvYmplY3Q/IElnbm9yZSBpdC4gSXQncyBub3QgbGlrZQorCSAqIHdlIG1pc3MgaXQgKHNpbmNlIGl0IGNhbid0IGJlIHJlYWNoZWQpLCBub3IgZG8gd2Ugd2FudAorCSAqIHRvIGNvbXBsYWluIGFib3V0IGl0IGJlaW5nIHVucmVhY2hhYmxlIChzaW5jZSBpdCBkb2VzCisJICogbm90IGV4aXN0KS4KKwkgKi8KKwlpZiAoIW9iai0+cGFyc2VkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVucmVhY2hhYmxlIG9iamVjdCB0aGF0IGV4aXN0cz8gU2hvdyBpdCBpZiBhc2tlZCB0bywKKwkgKiBzaW5jZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIHBydW5hYmxlLgorCSAqLworCWlmIChzaG93X3VucmVhY2hhYmxlKSB7CisJCXByaW50ZigidW5yZWFjaGFibGUgJXMgJXNcbiIsIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiAiIXVzZWQiIG1lYW5zIHRoYXQgbm90aGluZyBhdCBhbGwgcG9pbnRzIHRvIGl0LCBpbmNsdWRpbmcKKwkgKiBvdGhlciB1bnJlYWNhaGJsZSBvYmplY3RzLiBJbiBvdGhlciB3b3JkcywgaXQncyB0aGUgInRpcCIKKwkgKiBvZiBzb21lIHNldCBvZiB1bnJlYWNoYWJsZSBvYmplY3RzLCB1c3VhbGx5IGEgY29tbWl0IHRoYXQKKwkgKiBnb3QgZHJvcHBlZC4KKwkgKgorCSAqIFN1Y2ggc3RhcnRpbmcgcG9pbnRzIGFyZSBtb3JlIGludGVyZXN0aW5nIHRoYW4gc29tZSByYW5kb20KKwkgKiBzZXQgb2YgdW5yZWFjaGFibGUgb2JqZWN0cywgc28gd2Ugc2hvdyB0aGVtIGV2ZW4gaWYgdGhlIHVzZXIKKwkgKiBoYXNuJ3QgYXNrZWQgZm9yIF9hbGxfIHVucmVhY2hhYmxlIG9iamVjdHMuIElmIHlvdSBoYXZlCisJICogZGVsZXRlZCBhIGJyYW5jaCBieSBtaXN0YWtlLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIHRvCisJICogc3RhcnQgbG9va2luZyBhdCwgZm9yIGV4YW1wbGUuCisJICovCisJaWYgKCFvYmotPnVzZWQpIHsKKwkJcHJpbnRmKCJkYW5nbGluZyAlcyAlc1xuIiwgdHlwZW5hbWUob2JqLT50eXBlKSwKKwkJICAgICAgIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPdGhlcndpc2U/IEl0J3MgdGhlcmUsIGl0J3MgdW5yZWFjaGFibGUsIGFuZCBzb21lIG90aGVyIHVucmVhY2hhYmxlCisJICogb2JqZWN0IHBvaW50cyB0byBpdC4gSWdub3JlIGl0IC0gaXQncyBub3QgaW50ZXJlc3RpbmcsIGFuZCB3ZSBzaG93ZWQKKwkgKiBhbGwgdGhlIGludGVyZXN0aW5nIGNhc2VzIGFib3ZlLgorCSAqLworfQorCitzdGF0aWMgdm9pZCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCWlmIChvYmotPmZsYWdzICYgUkVBQ0hBQkxFKQorCQljaGVja19yZWFjaGFibGVfb2JqZWN0KG9iaik7CisJZWxzZQorCQljaGVja191bnJlYWNoYWJsZV9vYmplY3Qob2JqKTsKK30KIAogc3RhdGljIHZvaWQgY2hlY2tfY29ubmVjdGl2aXR5KHZvaWQpCiB7CkBAIC02Miw0NiArMTU1LDEwIEBACiAJLyogTG9vayB1cCBhbGwgdGhlIHJlcXVpcmVtZW50cywgd2FybiBhYm91dCBtaXNzaW5nIG9iamVjdHMuLiAqLwogCW1heCA9IGdldF9tYXhfb2JqZWN0X2luZGV4KCk7CiAJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7Ci0JCWNvbnN0IHN0cnVjdCBvYmplY3RfcmVmcyAqcmVmczsKIAkJc3RydWN0IG9iamVjdCAqb2JqID0gZ2V0X2luZGV4ZWRfb2JqZWN0KGkpOwogCi0JCWlmICghb2JqKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFvYmotPnBhcnNlZCkgewotCQkJaWYgKGhhc19zaGExX2ZpbGUob2JqLT5zaGExKSkKLQkJCQk7IC8qIGl0IGlzIGluIHBhY2sgKi8KLQkJCWVsc2UKLQkJCQlwcmludGYoIm1pc3NpbmcgJXMgJXNcbiIsCi0JCQkJICAgICAgIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlyZWZzID0gbG9va3VwX29iamVjdF9yZWZzKG9iaik7Ci0JCWlmIChyZWZzKSB7Ci0JCQl1bnNpZ25lZCBqOwotCQkJZm9yIChqID0gMDsgaiA8IHJlZnMtPmNvdW50OyBqKyspIHsKLQkJCQlzdHJ1Y3Qgb2JqZWN0ICpyZWYgPSByZWZzLT5yZWZbal07Ci0JCQkJaWYgKHJlZi0+cGFyc2VkIHx8Ci0JCQkJICAgIChoYXNfc2hhMV9maWxlKHJlZi0+c2hhMSkpKQotCQkJCQljb250aW51ZTsKLQkJCQlwcmludGYoImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iLAotCQkJCSAgICAgICB0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKLQkJCQlwcmludGYoIiAgICAgICAgICAgICAgdG8gJTdzICVzXG4iLAotCQkJCSAgICAgICB0eXBlbmFtZShyZWYtPnR5cGUpLCBzaGExX3RvX2hleChyZWYtPnNoYTEpKTsKLQkJCX0KLQkJfQotCi0JCWlmIChzaG93X3VucmVhY2hhYmxlICYmICEob2JqLT5mbGFncyAmIFJFQUNIQUJMRSkpIHsKLQkJCXByaW50ZigidW5yZWFjaGFibGUgJXMgJXNcbiIsCi0JCQkgICAgICAgdHlwZW5hbWUob2JqLT50eXBlKSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghb2JqLT51c2VkKSB7Ci0JCQlwcmludGYoImRhbmdsaW5nICVzICVzXG4iLCB0eXBlbmFtZShvYmotPnR5cGUpLAotCQkJICAgICAgIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOwotCQl9CisJCWlmIChvYmopCisJCQljaGVja19vYmplY3Qob2JqKTsKIAl9CiB9CiAKQEAgLTUxNCwxMiArNTcxLDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IGNtZF9mc2NrKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpLCBoZWFkczsKIAogCXRyYWNrX29iamVjdF9yZWZzID0gMTsKLQlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CkBAIC01NDksNyArNjA1LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICgqYXJnID09ICctJykKLQkJCXVzYWdlKCJnaXQtZnNjay1vYmplY3RzIFstLXRhZ3NdIFstLXJvb3RdIFtbLS11bnJlYWNoYWJsZV0gWy0tY2FjaGVdIFstLWZ1bGxdIFstLXN0cmljdF0gPGhlYWQtc2hhMT4qXSIpOworCQkJdXNhZ2UoImdpdC1mc2NrIFstLXRhZ3NdIFstLXJvb3RdIFtbLS11bnJlYWNoYWJsZV0gWy0tY2FjaGVdIFstLWZ1bGxdIFstLXN0cmljdF0gPGhlYWQtc2hhMT4qXSIpOwogCX0KIAogCWZzY2tfaGVhZF9saW5rKCk7CmRpZmYgLS1naXQgYS9idWlsdGluLWluaXQtZGIuYyBiL2J1aWx0aW4taW5pdC1kYi5jCmluZGV4IDhlNzU0MGIuLjE4NjU0ODkgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4taW5pdC1kYi5jCisrKyBiL2J1aWx0aW4taW5pdC1kYi5jCkBAIC0yNTcsNyArMjU3LDkgQEAKIAl9CiAJZWxzZSB7CiAJCWdpdF9jb25maWdfc2V0KCJjb3JlLmJhcmUiLCAiZmFsc2UiKTsKLQkJZ2l0X2NvbmZpZ19zZXQoImNvcmUubG9nYWxscmVmdXBkYXRlcyIsICJ0cnVlIik7CisJCS8qIGFsbG93IHRlbXBsYXRlIGNvbmZpZyBmaWxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0ICovCisJCWlmIChsb2dfYWxsX3JlZl91cGRhdGVzID09IC0xKQorCQkgICAgZ2l0X2NvbmZpZ19zZXQoImNvcmUubG9nYWxscmVmdXBkYXRlcyIsICJ0cnVlIik7CiAJfQogCXJldHVybiByZWluaXQ7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLWxvZy5jIGIvYnVpbHRpbi1sb2cuYwppbmRleCBhNTliNGFjLi45ODJkODcxIDEwMDY0NAotLS0gYS9idWlsdGluLWxvZy5jCisrKyBiL2J1aWx0aW4tbG9nLmMKQEAgLTUwLDggKzUwLDExIEBACiAJcHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldik7CiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkgIT0gTlVMTCkgewogCQlsb2dfdHJlZV9jb21taXQocmV2LCBjb21taXQpOwotCQlmcmVlKGNvbW1pdC0+YnVmZmVyKTsKLQkJY29tbWl0LT5idWZmZXIgPSBOVUxMOworCQlpZiAoIXJldi0+cmVmbG9nX2luZm8pIHsKKwkJCS8qIHdlIGFsbG93IGN5Y2xlcyBpbiByZWZsb2cgYW5jZXN0cnkgKi8KKwkJCWZyZWUoY29tbWl0LT5idWZmZXIpOworCQkJY29tbWl0LT5idWZmZXIgPSBOVUxMOworCQl9CiAJCWZyZWVfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKIAkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKIAl9CkBAIC0xOTcsMTcgKzIwMCwyOCBAQAogCiBzdGF0aWMgY2hhciAqZXh0cmFfaGVhZGVycyA9IE5VTEw7CiBzdGF0aWMgaW50IGV4dHJhX2hlYWRlcnNfc2l6ZSA9IDA7CitzdGF0aWMgY29uc3QgY2hhciAqZm10X3BhdGNoX3N1ZmZpeCA9ICIucGF0Y2giOwogCiBzdGF0aWMgaW50IGdpdF9mb3JtYXRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCiB7CiAJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LmhlYWRlcnMiKSkgewotCQlpbnQgbGVuID0gc3RybGVuKHZhbHVlKTsKKwkJaW50IGxlbjsKKworCQlpZiAoIXZhbHVlKQorCQkJZGllKCJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIik7CisJCWxlbiA9IHN0cmxlbih2YWx1ZSk7CiAJCWV4dHJhX2hlYWRlcnNfc2l6ZSArPSBsZW4gKyAxOwogCQlleHRyYV9oZWFkZXJzID0geHJlYWxsb2MoZXh0cmFfaGVhZGVycywgZXh0cmFfaGVhZGVyc19zaXplKTsKIAkJZXh0cmFfaGVhZGVyc1tleHRyYV9oZWFkZXJzX3NpemUgLSBsZW4gLSAxXSA9IDA7CiAJCXN0cmNhdChleHRyYV9oZWFkZXJzLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuc3VmZml4IikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCWRpZSgiZm9ybWF0LnN1ZmZpeCB3aXRob3V0IHZhbHVlIik7CisJCWZtdF9wYXRjaF9zdWZmaXggPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQogCWlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLmRpZmYiKSkgewogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMjMsOSArMjM3LDEwIEBACiAJY2hhciBmaWxlbmFtZVsxMDI0XTsKIAljaGFyICpzb2w7CiAJaW50IGxlbiA9IDA7CisJaW50IHN1ZmZpeF9sZW4gPSBzdHJsZW4oZm10X3BhdGNoX3N1ZmZpeCkgKyAxMDsgLyogLiwgTlVMIGFuZCBzbG9wICovCiAKIAlpZiAob3V0cHV0X2RpcmVjdG9yeSkgewotCQlzdHJsY3B5KGZpbGVuYW1lLCBvdXRwdXRfZGlyZWN0b3J5LCAxMDEwKTsKKwkJc3RybGNweShmaWxlbmFtZSwgb3V0cHV0X2RpcmVjdG9yeSwgMTAwMCk7CiAJCWxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CiAJCWlmIChmaWxlbmFtZVtsZW4gLSAxXSAhPSAnLycpCiAJCQlmaWxlbmFtZVtsZW4rK10gPSAnLyc7CkBAIC0yNDksNyArMjY0LDEwIEBACiAJCQl9CiAJCX0KIAotCQlmb3IgKGogPSAwOyBsZW4gPCAxMDI0IC0gNiAmJiBzb2xbal0gJiYgc29sW2pdICE9ICdcbic7IGorKykgeworCQlmb3IgKGogPSAwOworCQkgICAgIGxlbiA8IHNpemVvZihmaWxlbmFtZSkgLSBzdWZmaXhfbGVuICYmCisJCQkgICAgIHNvbFtqXSAmJiBzb2xbal0gIT0gJ1xuJzsKKwkJICAgICBqKyspIHsKIAkJCWlmIChpc3RpdGxlY2hhcihzb2xbal0pKSB7CiAJCQkJaWYgKHNwYWNlKSB7CiAJCQkJCWZpbGVuYW1lW2xlbisrXSA9ICctJzsKQEAgLTI2NSw3ICsyODMsNyBAQAogCQl3aGlsZSAoZmlsZW5hbWVbbGVuIC0gMV0gPT0gJy4nIHx8IGZpbGVuYW1lW2xlbiAtIDFdID09ICctJykKIAkJCWxlbi0tOwogCX0KLQlzdHJjcHkoZmlsZW5hbWUgKyBsZW4sICIudHh0Iik7CisJc3RyY3B5KGZpbGVuYW1lICsgbGVuLCBmbXRfcGF0Y2hfc3VmZml4KTsKIAlmcHJpbnRmKHJlYWxzdGRvdXQsICIlc1xuIiwgZmlsZW5hbWUpOwogCWZyZW9wZW4oZmlsZW5hbWUsICJ3Iiwgc3Rkb3V0KTsKIH0KQEAgLTMzNCw3ICszNTIsNyBAQAogCiBzdGF0aWMgdm9pZCBnZW5fbWVzc2FnZV9pZChjaGFyICpkZXN0LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCBjaGFyICpiYXNlKQogewotCWNvbnN0IGNoYXIgKmNvbW1pdHRlciA9IGdpdF9jb21taXR0ZXJfaW5mbygxKTsKKwljb25zdCBjaGFyICpjb21taXR0ZXIgPSBnaXRfY29tbWl0dGVyX2luZm8oLTEpOwogCWNvbnN0IGNoYXIgKmVtYWlsX3N0YXJ0ID0gc3RycmNocihjb21taXR0ZXIsICc8Jyk7CiAJY29uc3QgY2hhciAqZW1haWxfZW5kID0gc3RycmNocihjb21taXR0ZXIsICc+Jyk7CiAJaWYoIWVtYWlsX3N0YXJ0IHx8ICFlbWFpbF9lbmQgfHwgZW1haWxfc3RhcnQgPiBlbWFpbF9lbmQgLSAxKQpAQCAtMzYyLDcgKzM4MCw2IEBACiAJY2hhciBtZXNzYWdlX2lkWzEwMjRdOwogCWNoYXIgcmVmX21lc3NhZ2VfaWRbMTAyNF07CiAKLQlzZXR1cF9pZGVudCgpOwogCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcpOwogCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CiAJcmV2LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9FTUFJTDsKQEAgLTQzNiw2ICs0NTMsOCBAQAogCQkJCWRpZSgiTmVlZCBhIE1lc3NhZ2UtSWQgZm9yIC0taW4tcmVwbHktdG8iKTsKIAkJCWluX3JlcGx5X3RvID0gYXJndltpXTsKIAkJfQorCQllbHNlIGlmICghc3RybmNtcChhcmd2W2ldLCAiLS1zdWZmaXg9IiwgOSkpCisJCQlmbXRfcGF0Y2hfc3VmZml4ID0gYXJndltpXSArIDk7CiAJCWVsc2UKIAkJCWFyZ3ZbaisrXSA9IGFyZ3ZbaV07CiAJfQpAQCAtNDUxLDkgKzQ3MCwxMiBAQAogCQlkaWUgKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiwgYXJndlsxXSk7CiAKIAlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCi0JCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8IERJRkZfRk9STUFUX1BBVENIOworCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfRElGRlNUQVQgfCBESUZGX0ZPUk1BVF9TVU1NQVJZIHwgRElGRl9GT1JNQVRfUEFUQ0g7CiAKLQlpZiAoIW91dHB1dF9kaXJlY3RvcnkpCisJaWYgKCFyZXYuZGlmZm9wdC50ZXh0KQorCQlyZXYuZGlmZm9wdC5iaW5hcnkgPSAxOworCisJaWYgKCFvdXRwdXRfZGlyZWN0b3J5ICYmICF1c2Vfc3Rkb3V0KQogCQlvdXRwdXRfZGlyZWN0b3J5ID0gcHJlZml4OwogCiAJaWYgKG91dHB1dF9kaXJlY3RvcnkpIHsKQEAgLTQ2NSw4ICs0ODcsMTMgQEAKIAl9CiAKIAlpZiAocmV2LnBlbmRpbmcubnIgPT0gMSkgewotCQlyZXYucGVuZGluZy5vYmplY3RzWzBdLml0ZW0tPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7Ci0JCWFkZF9oZWFkKCZyZXYpOworCQlpZiAocmV2Lm1heF9jb3VudCA8IDApIHsKKwkJCXJldi5wZW5kaW5nLm9iamVjdHNbMF0uaXRlbS0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCWFkZF9oZWFkKCZyZXYpOworCQl9CisJCS8qIE90aGVyd2lzZSwgaXQgaXMgImZvcm1hdC1wYXRjaCAtMjIgSEVBRCIsIGFuZAorCQkgKiBnZXRfcmV2aXNpb24oKSB3b3VsZCByZXR1cm4gb25seSB0aGUgc3BlY2lmaWVkIGNvdW50LgorCQkgKi8KIAl9CiAKIAlpZiAoaWdub3JlX2lmX2luX3Vwc3RyZWFtKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4tcGFjay1vYmplY3RzLmMKaW5kZXggNDJkZDhjOC4uMzgyNGVlMyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wYWNrLW9iamVjdHMuYworKysgYi9idWlsdGluLXBhY2stb2JqZWN0cy5jCkBAIC01NjksNyArNTY5LDcgQEAKIAkJCQkJc2hhMV90b19oZXgob2JqZWN0X2xpc3Rfc2hhMSksICJpZHgiKTsKIAlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqbGlzdCA9IHNvcnRlZF9ieV9zaGE7CiAJc3RydWN0IG9iamVjdF9lbnRyeSAqKmxhc3QgPSBsaXN0ICsgbnJfcmVzdWx0OwotCXVuc2lnbmVkIGludCBhcnJheVsyNTZdOworCXVpbnQzMl90IGFycmF5WzI1Nl07CiAKIAkvKgogCSAqIFdyaXRlIHRoZSBmaXJzdC1sZXZlbCB0YWJsZSAodGhlIGxpc3QgaXMgc29ydGVkLApAQCAtNTg3LDcgKzU4Nyw3IEBACiAJCWFycmF5W2ldID0gaHRvbmwobmV4dCAtIHNvcnRlZF9ieV9zaGEpOwogCQlsaXN0ID0gbmV4dDsKIAl9Ci0Jc2hhMXdyaXRlKGYsIGFycmF5LCAyNTYgKiBzaXplb2YoaW50KSk7CisJc2hhMXdyaXRlKGYsIGFycmF5LCAyNTYgKiA0KTsKIAogCS8qCiAJICogV3JpdGUgdGhlIGFjdHVhbCBTSEExIGVudHJpZXMuLgpAQCAtNTk1LDcgKzU5NSw3IEBACiAJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CiAJZm9yIChpID0gMDsgaSA8IG5yX3Jlc3VsdDsgaSsrKSB7CiAJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gKmxpc3QrKzsKLQkJdW5zaWduZWQgaW50IG9mZnNldCA9IGh0b25sKGVudHJ5LT5vZmZzZXQpOworCQl1aW50MzJfdCBvZmZzZXQgPSBodG9ubChlbnRyeS0+b2Zmc2V0KTsKIAkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOwogCQlzaGExd3JpdGUoZiwgZW50cnktPnNoYTEsIDIwKTsKIAl9CmRpZmYgLS1naXQgYS9idWlsdGluLXBhY2stcmVmcy5jIGIvYnVpbHRpbi1wYWNrLXJlZnMuYwppbmRleCA2ZGU3MTI4Li4zZGU5YjNlIDEwMDY0NAotLS0gYS9idWlsdGluLXBhY2stcmVmcy5jCisrKyBiL2J1aWx0aW4tcGFjay1yZWZzLmMKQEAgLTM3LDcgKzM3LDkgQEAKIAlpZiAoKGZsYWdzICYgUkVGX0lTU1lNUkVGKSkKIAkJcmV0dXJuIDA7CiAJaXNfdGFnX3JlZiA9ICFzdHJuY21wKHBhdGgsICJyZWZzL3RhZ3MvIiwgMTApOwotCWlmICghY2ItPmFsbCAmJiAhaXNfdGFnX3JlZikKKworCS8qIEFMV0FZUyBwYWNrIHJlZnMgdGhhdCB3ZXJlIGFscmVhZHkgcGFja2VkIG9yIGFyZSB0YWdzICovCisJaWYgKCFjYi0+YWxsICYmICFpc190YWdfcmVmICYmICEoZmxhZ3MgJiBSRUZfSVNQQUNLRUQpKQogCQlyZXR1cm4gMDsKIAogCWZwcmludGYoY2ItPnJlZnNfZmlsZSwgIiVzICVzXG4iLCBzaGExX3RvX2hleChzaGExKSwgcGF0aCk7CmRpZmYgLS1naXQgYS9idWlsdGluLXBydW5lLXBhY2tlZC5jIGIvYnVpbHRpbi1wcnVuZS1wYWNrZWQuYwppbmRleCBhNTdiNzZkLi45Nzc3MzAwIDEwMDY0NAotLS0gYS9idWlsdGluLXBydW5lLXBhY2tlZC5jCisrKyBiL2J1aWx0aW4tcHJ1bmUtcGFja2VkLmMKQEAgLTIsNyArMiw3IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgcHJ1bmVfcGFja2VkX3VzYWdlW10gPQotImdpdC1wcnVuZS1wYWNrZWQgWy1uXSI7CisiZ2l0LXBydW5lLXBhY2tlZCBbLW5dIFstcV0iOwogCiAjZGVmaW5lIERSWV9SVU4gMDEKICNkZWZpbmUgVkVSQk9TRSAwMgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1wdXNoLmMgYi9idWlsdGluLXB1c2guYwppbmRleCA3YTNkMmJiLi41ZjRkN2QzIDEwMDY0NAotLS0gYS9idWlsdGluLXB1c2guYworKysgYi9idWlsdGluLXB1c2guYwpAQCAtOCwxMCArOCwxMCBAQAogCiAjZGVmaW5lIE1BWF9VUkkgKDE2KQogCi1zdGF0aWMgY29uc3QgY2hhciBwdXNoX3VzYWdlW10gPSAiZ2l0LXB1c2ggWy0tYWxsXSBbLS10YWdzXSBbLWYgfCAtLWZvcmNlXSA8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl0iOworc3RhdGljIGNvbnN0IGNoYXIgcHVzaF91c2FnZVtdID0gImdpdC1wdXNoIFstLWFsbF0gWy0tdGFnc10gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0gWy0tcmVwbz1hbGxdIFstZiB8IC0tZm9yY2VdIFstdl0gWzxyZXBvc2l0b3J5PiA8cmVmc3BlYz4uLi5dIjsKIAogc3RhdGljIGludCBhbGwsIHRhZ3MsIGZvcmNlLCB0aGluID0gMSwgdmVyYm9zZTsKLXN0YXRpYyBjb25zdCBjaGFyICpleGVjdXRlOworc3RhdGljIGNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrOwogCiAjZGVmaW5lIEJVRl9TSVpFICgyMDg0KQogc3RhdGljIGNoYXIgYnVmZmVyW0JVRl9TSVpFXTsKQEAgLTE0Myw2ICsxNDMsNyBAQAogc3RhdGljIGludCBjb25maWdfcmVwb19sZW47CiBzdGF0aWMgaW50IGNvbmZpZ19jdXJyZW50X3VyaTsKIHN0YXRpYyBpbnQgY29uZmlnX2dldF9yZWZzcGVjczsKK3N0YXRpYyBpbnQgY29uZmlnX2dldF9yZWNlaXZlcGFjazsKIAogc3RhdGljIGludCBnZXRfcmVtb3RlX2NvbmZpZyhjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlKQogewpAQCAtMTU3LDYgKzE1OCwxNSBAQAogCQllbHNlIGlmIChjb25maWdfZ2V0X3JlZnNwZWNzICYmCiAJCQkgIXN0cmNtcChrZXkgKyA3ICsgY29uZmlnX3JlcG9fbGVuLCAiLnB1c2giKSkKIAkJCWFkZF9yZWZzcGVjKHhzdHJkdXAodmFsdWUpKTsKKwkJZWxzZSBpZiAoY29uZmlnX2dldF9yZWNlaXZlcGFjayAmJgorCQkJICFzdHJjbXAoa2V5ICsgNyArIGNvbmZpZ19yZXBvX2xlbiwgIi5yZWNlaXZlcGFjayIpKSB7CisJCQlpZiAoIXJlY2VpdmVwYWNrKSB7CisJCQkJY2hhciAqcnAgPSB4bWFsbG9jKHN0cmxlbih2YWx1ZSkgKyAxNik7CisJCQkJc3ByaW50ZihycCwgIi0tcmVjZWl2ZS1wYWNrPSVzIiwgdmFsdWUpOworCQkJCXJlY2VpdmVwYWNrID0gcnA7CisJCQl9IGVsc2UKKwkJCQllcnJvcigibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0Iik7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjgsNiArMTc4LDcgQEAKIAljb25maWdfY3VycmVudF91cmkgPSAwOwogCWNvbmZpZ191cmkgPSB1cmk7CiAJY29uZmlnX2dldF9yZWZzcGVjcyA9ICEocmVmc3BlY19uciB8fCBhbGwgfHwgdGFncyk7CisJY29uZmlnX2dldF9yZWNlaXZlcGFjayA9IChyZWNlaXZlcGFjayA9PSBOVUxMKTsKIAogCWdpdF9jb25maWcoZ2V0X3JlbW90ZV9jb25maWcpOwogCXJldHVybiBjb25maWdfY3VycmVudF91cmk7CkBAIC0yNTIsOCArMjYzLDggQEAKIAkJYXJndlthcmdjKytdID0gIi0tYWxsIjsKIAlpZiAoZm9yY2UpCiAJCWFyZ3ZbYXJnYysrXSA9ICItLWZvcmNlIjsKLQlpZiAoZXhlY3V0ZSkKLQkJYXJndlthcmdjKytdID0gZXhlY3V0ZTsKKwlpZiAocmVjZWl2ZXBhY2spCisJCWFyZ3ZbYXJnYysrXSA9IHJlY2VpdmVwYWNrOwogCWNvbW1vbl9hcmdjID0gYXJnYzsKIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTMzNiw4ICszNDcsMTIgQEAKIAkJCXRoaW4gPSAwOwogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKCFzdHJuY21wKGFyZywgIi0tcmVjZWl2ZS1wYWNrPSIsIDE1KSkgeworCQkJcmVjZWl2ZXBhY2sgPSBhcmc7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoIXN0cm5jbXAoYXJnLCAiLS1leGVjPSIsIDcpKSB7Ci0JCQlleGVjdXRlID0gYXJnOworCQkJcmVjZWl2ZXBhY2sgPSBhcmc7CiAJCQljb250aW51ZTsKIAkJfQogCQl1c2FnZShwdXNoX3VzYWdlKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVmbG9nLmMgYi9idWlsdGluLXJlZmxvZy5jCmluZGV4IDcyMDZiN2EuLmI0NDNlZDkgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmVmbG9nLmMKKysrIGIvYnVpbHRpbi1yZWZsb2cuYwpAQCAtMTMsNyArMTMsNyBAQAogICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIHJlZmxvZ19leHBpcmVfdXNhZ2VbXSA9Ci0iZ2l0LXJlZmxvZyBleHBpcmUgWy0tdmVyYm9zZV0gWy0tZHJ5LXJ1bl0gWy0tZml4LXN0YWxlXSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS1hbGxdIDxyZWZzPi4uLiI7CisiZ2l0LXJlZmxvZyBleHBpcmUgWy0tdmVyYm9zZV0gWy0tZHJ5LXJ1bl0gWy0tc3RhbGUtZml4XSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS1hbGxdIDxyZWZzPi4uLiI7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmF1bHRfcmVmbG9nX2V4cGlyZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZTsKQEAgLTI2Myw5ICsyNjMsNiBAQAogCX0KIAogCWNiLnJlZl9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7Ci0JaWYgKCFjYi5yZWZfY29tbWl0KQotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJ3YXJuaW5nOiByZWYgJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdFxuIiwgcmVmKTsKIAljYi5yZWYgPSByZWY7CiAJY2IuY21kID0gY21kOwogCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmLCBleHBpcmVfcmVmbG9nX2VudCwgJmNiKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcm0uYyBiL2J1aWx0aW4tcm0uYwppbmRleCBkODFmMjg5Yy4uMDBkYmUzOSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1ybS5jCisrKyBiL2J1aWx0aW4tcm0uYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX3JtX3VzYWdlW10gPQotImdpdC1ybSBbLW5dIFstZl0gWy0tY2FjaGVkXSA8ZmlsZXBhdHRlcm4+Li4uIjsKKyJnaXQtcm0gWy1mXSBbLW5dIFstcl0gWy0tY2FjaGVkXSBbLS1dIDxmaWxlPi4uLiI7CiAKIHN0YXRpYyBzdHJ1Y3QgewogCWludCBuciwgYWxsb2M7CmRpZmYgLS1naXQgYS9idWlsdGluLXNob3ctYnJhbmNoLmMgYi9idWlsdGluLXNob3ctYnJhbmNoLmMKaW5kZXggYzY3ZjJmYS4uZmE2MmU0OCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zaG93LWJyYW5jaC5jCisrKyBiL2J1aWx0aW4tc2hvdy1icmFuY2guYwpAQCAtNCw3ICs0LDkgQEAKICNpbmNsdWRlICJidWlsdGluLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHNob3dfYnJhbmNoX3VzYWdlW10gPQotImdpdC1zaG93LWJyYW5jaCBbLS1zcGFyc2VdIFstLWN1cnJlbnRdIFstLWFsbF0gWy0tcmVtb3Rlc10gWy0tdG9wby1vcmRlcl0gWy0tbW9yZT1jb3VudCB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2UgXSBbLS10b3BpY3NdIFs8cmVmcz4uLi5dIHwgLS1yZWZsb2dbPW5dIDxicmFuY2g+IjsKKyJnaXQtc2hvdy1icmFuY2ggWy0tc3BhcnNlXSBbLS1jdXJyZW50XSBbLS1hbGxdIFstLXJlbW90ZXNdIFstLXRvcG8tb3JkZXJdIFstLW1vcmU9Y291bnQgfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlIF0gWy0tdG9waWNzXSBbPHJlZnM+Li4uXSB8IC0tcmVmbG9nWz1uWyxiXV0gPGJyYW5jaD4iOworc3RhdGljIGNvbnN0IGNoYXIgc2hvd19icmFuY2hfdXNhZ2VfcmVmbG9nW10gPQorIi0tcmVmbG9nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLXJlbW90ZXMsIC0taW5kZXBlbmRlbnQgb3IgLS1tZXJnZS1iYXNlIjsKIAogc3RhdGljIGludCBkZWZhdWx0X251bTsKIHN0YXRpYyBpbnQgZGVmYXVsdF9hbGxvYzsKQEAgLTM0NiwxOCArMzQ4LDIxIEBACiAJICAgICAgY29tcGFyZV9yZWZfbmFtZSk7CiB9CiAKLXN0YXRpYyBpbnQgYXBwZW5kX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3N0YXRpYyBpbnQgYXBwZW5kX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgICBpbnQgYWxsb3dfZHVwcykKIHsKIAlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CiAJaW50IGk7CiAKIAlpZiAoIWNvbW1pdCkKIAkJcmV0dXJuIDA7Ci0JLyogQXZvaWQgYWRkaW5nIHRoZSBzYW1lIHRoaW5nIHR3aWNlICovCi0JZm9yIChpID0gMDsgaSA8IHJlZl9uYW1lX2NudDsgaSsrKQotCQlpZiAoIXN0cmNtcChyZWZuYW1lLCByZWZfbmFtZVtpXSkpCi0JCQlyZXR1cm4gMDsKIAorCWlmICghYWxsb3dfZHVwcykgeworCQkvKiBBdm9pZCBhZGRpbmcgdGhlIHNhbWUgdGhpbmcgdHdpY2UgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJlZl9uYW1lX2NudDsgaSsrKQorCQkJaWYgKCFzdHJjbXAocmVmbmFtZSwgcmVmX25hbWVbaV0pKQorCQkJCXJldHVybiAwOworCX0KIAlpZiAoTUFYX1JFVlMgPD0gcmVmX25hbWVfY250KSB7CiAJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogaWdub3JpbmcgJXM7ICIKIAkJCSJjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzXG4iLApAQCAtMzgwLDcgKzM4NSw3IEBACiAJICovCiAJaWYgKGdldF9zaGExKHJlZm5hbWUgKyBvZnMsIHRtcCkgfHwgaGFzaGNtcCh0bXAsIHNoYTEpKQogCQlvZnMgPSA1OwotCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyBvZnMsIHNoYTEsIGZsYWcsIGNiX2RhdGEpOworCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyBvZnMsIHNoYTEsIDApOwogfQogCiBzdGF0aWMgaW50IGFwcGVuZF9yZW1vdGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQpAQCAtMzk0LDE0ICszOTksMTQgQEAKIAkgKi8KIAlpZiAoZ2V0X3NoYTEocmVmbmFtZSArIG9mcywgdG1wKSB8fCBoYXNoY21wKHRtcCwgc2hhMSkpCiAJCW9mcyA9IDU7Ci0JcmV0dXJuIGFwcGVuZF9yZWYocmVmbmFtZSArIG9mcywgc2hhMSwgZmxhZywgY2JfZGF0YSk7CisJcmV0dXJuIGFwcGVuZF9yZWYocmVmbmFtZSArIG9mcywgc2hhMSwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgYXBwZW5kX3RhZ19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCiB7CiAJaWYgKHN0cm5jbXAocmVmbmFtZSwgInJlZnMvdGFncy8iLCAxMCkpCiAJCXJldHVybiAwOwotCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyA1LCBzaGExLCBmbGFnLCBjYl9kYXRhKTsKKwlyZXR1cm4gYXBwZW5kX3JlZihyZWZuYW1lICsgNSwgc2hhMSwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICptYXRjaF9yZWZfcGF0dGVybiA9IE5VTEw7CkBAIC00MzQsNyArNDM5LDcgQEAKIAkJcmV0dXJuIGFwcGVuZF9oZWFkX3JlZihyZWZuYW1lLCBzaGExLCBmbGFnLCBjYl9kYXRhKTsKIAlpZiAoIXN0cm5jbXAoInJlZnMvdGFncy8iLCByZWZuYW1lLCAxMCkpCiAJCXJldHVybiBhcHBlbmRfdGFnX3JlZihyZWZuYW1lLCBzaGExLCBmbGFnLCBjYl9kYXRhKTsKLQlyZXR1cm4gYXBwZW5kX3JlZihyZWZuYW1lLCBzaGExLCBmbGFnLCBjYl9kYXRhKTsKKwlyZXR1cm4gYXBwZW5kX3JlZihyZWZuYW1lLCBzaGExLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgc25hcmZfcmVmcyhpbnQgaGVhZCwgaW50IHJlbW90ZXMpCkBAIC01MDcsNyArNTEyLDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHJldmtleVsyMF07CiAJaWYgKCFnZXRfc2hhMShhdiwgcmV2a2V5KSkgewotCQlhcHBlbmRfcmVmKGF2LCByZXZrZXksIDAsIE5VTEwpOworCQlhcHBlbmRfcmVmKGF2LCByZXZrZXksIDApOwogCQlyZXR1cm47CiAJfQogCWlmIChzdHJjaHIoYXYsICcqJykgfHwgc3RyY2hyKGF2LCAnPycpIHx8IHN0cmNocihhdiwgJ1snKSkgewpAQCAtNTYyLDkgKzU2NywyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwYXJzZV9yZWZsb2dfcGFyYW0oY29uc3QgY2hhciAqYXJnLCBpbnQgKmNudCwgY29uc3QgY2hhciAqKmJhc2UpCit7CisJY2hhciAqZXA7CisJKmNudCA9IHN0cnRvdWwoYXJnLCAmZXAsIDEwKTsKKwlpZiAoKmVwID09ICcsJykKKwkJKmJhc2UgPSBlcCArIDE7CisJZWxzZSBpZiAoKmVwKQorCQlkaWUoInVucmVjb2duaXplZCByZWZsb2cgcGFyYW0gJyVzJyIsIGFyZyArIDkpOworCWVsc2UKKwkJKmJhc2UgPSBOVUxMOworCWlmICgqY250IDw9IDApCisJCSpjbnQgPSBERUZBVUxUX1JFRkxPRzsKK30KKwogaW50IGNtZF9zaG93X2JyYW5jaChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCBjb21taXQgKnJldltNQVhfUkVWU10sICpjb21taXQ7CisJY2hhciAqcmVmbG9nX21zZ1tNQVhfUkVWU107CiAJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTCwgKnNlZW4gPSBOVUxMOwogCXVuc2lnbmVkIGludCByZXZfbWFza1tNQVhfUkVWU107CiAJaW50IG51bV9yZXYsIGksIGV4dHJhID0gMDsKQEAgLTU4NSw2ICs2MDUsNyBAQAogCWludCB0b3BpY3MgPSAwOwogCWludCBkZW5zZSA9IDE7CiAJaW50IHJlZmxvZyA9IDA7CisJY29uc3QgY2hhciAqcmVmbG9nX2Jhc2UgPSBOVUxMOwogCiAJZ2l0X2NvbmZpZyhnaXRfc2hvd19icmFuY2hfY29uZmlnKTsKIApAQCAtNjI4LDQyICs2NDksMTAxIEBACiAJCQlkZW5zZSA9IDA7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kYXRlLW9yZGVyIikpCiAJCQlsaWZvID0gMDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlZmxvZyIpKSB7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSB8fCAhc3RyY21wKGFyZywgIi1nIikpIHsKIAkJCXJlZmxvZyA9IERFRkFVTFRfUkVGTE9HOwogCQl9Ci0JCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi0tcmVmbG9nPSIsIDkpKSB7Ci0JCQljaGFyICplbmQ7Ci0JCQlyZWZsb2cgPSBzdHJ0b3VsKGFyZyArIDksICZlbmQsIDEwKTsKLQkJCWlmICgqZW5kICE9ICdcMCcpCi0JCQkJZGllKCJ1bnJlY29nbml6ZWQgcmVmbG9nIGNvdW50ICclcyciLCBhcmcgKyA5KTsKLQkJfQorCQllbHNlIGlmICghc3RybmNtcChhcmcsICItLXJlZmxvZz0iLCA5KSkKKwkJCXBhcnNlX3JlZmxvZ19wYXJhbShhcmcgKyA5LCAmcmVmbG9nLCAmcmVmbG9nX2Jhc2UpOworCQllbHNlIGlmICghc3RybmNtcChhcmcsICItZz0iLCAzKSkKKwkJCXBhcnNlX3JlZmxvZ19wYXJhbShhcmcgKyAzLCAmcmVmbG9nLCAmcmVmbG9nX2Jhc2UpOwogCQllbHNlCiAJCQl1c2FnZShzaG93X2JyYW5jaF91c2FnZSk7CiAJCWFjLS07IGF2Kys7CiAJfQogCWFjLS07IGF2Kys7CiAKLQkvKiBPbmx5IG9uZSBvZiB0aGVzZSBpcyBhbGxvd2VkICovCi0JaWYgKDEgPCBpbmRlcGVuZGVudCArIG1lcmdlX2Jhc2UgKyAoZXh0cmEgIT0gMCkgKyAoISFyZWZsb2cpKQotCQl1c2FnZShzaG93X2JyYW5jaF91c2FnZSk7CisJaWYgKGV4dHJhIHx8IHJlZmxvZykgeworCQkvKiAibGlzdGluZyIgbW9kZSBpcyBpbmNvbXBhdGlibGUgd2l0aAorCQkgKiBpbmRlcGVuZGVudCBub3IgbWVyZ2UtYmFzZSBtb2Rlcy4KKwkJICovCisJCWlmIChpbmRlcGVuZGVudCB8fCBtZXJnZV9iYXNlKQorCQkJdXNhZ2Uoc2hvd19icmFuY2hfdXNhZ2UpOworCQlpZiAocmVmbG9nICYmICgoMCA8IGV4dHJhKSB8fCBhbGxfaGVhZHMgfHwgYWxsX3JlbW90ZXMpKQorCQkJLyoKKwkJCSAqIEFza2luZyBmb3IgLS1tb3JlIGluIHJlZmxvZyBtb2RlIGRvZXMgbm90CisJCQkgKiBtYWtlIHNlbnNlLiAgLS1saXN0IGlzIE9rLgorCQkJICoKKwkJCSAqIEFsc28gLS1hbGwgYW5kIC0tcmVtb3RlcyBkbyBub3QgbWFrZSBzZW5zZSBlaXRoZXIuCisJCQkgKi8KKwkJCXVzYWdlKHNob3dfYnJhbmNoX3VzYWdlX3JlZmxvZyk7CisJfQogCiAJLyogSWYgbm90aGluZyBpcyBzcGVjaWZpZWQsIHNob3cgYWxsIGJyYW5jaGVzIGJ5IGRlZmF1bHQgKi8KIAlpZiAoYWMgKyBhbGxfaGVhZHMgKyBhbGxfcmVtb3RlcyA9PSAwKQogCQlhbGxfaGVhZHMgPSAxOwogCi0JaWYgKGFsbF9oZWFkcyArIGFsbF9yZW1vdGVzKQotCQlzbmFyZl9yZWZzKGFsbF9oZWFkcywgYWxsX3JlbW90ZXMpOwogCWlmIChyZWZsb2cpIHsKLQkJaW50IHJlZmxlbjsKLQkJaWYgKCFhYykKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY2hhciBudGhfZGVzY1syNTZdOworCQljaGFyICpyZWY7CisJCWludCBiYXNlID0gMDsKKworCQlpZiAoYWMgPT0gMCkgeworCQkJc3RhdGljIGNvbnN0IGNoYXIgKmZha2VfYXZbMl07CisJCQlmYWtlX2F2WzBdID0gIkhFQUQiOworCQkJZmFrZV9hdlsxXSA9IE5VTEw7CisJCQlhdiA9IGZha2VfYXY7CisJCQlhYyA9IDE7CisJCX0KKwkJaWYgKGFjICE9IDEpCiAJCQlkaWUoIi0tcmVmbG9nIG9wdGlvbiBuZWVkcyBvbmUgYnJhbmNoIG5hbWUiKTsKLQkJcmVmbGVuID0gc3RybGVuKCphdik7CisKKwkJaWYgKE1BWF9SRVZTIDwgcmVmbG9nKQorCQkJZGllKCJPbmx5ICVkIGVudHJpZXMgY2FuIGJlIHNob3duIGF0IG9uZSB0aW1lLiIsCisJCQkgICAgTUFYX1JFVlMpOworCQlpZiAoIWR3aW1fcmVmKCphdiwgc3RybGVuKCphdiksIHNoYTEsICZyZWYpKQorCQkJZGllKCJObyBzdWNoIHJlZiAlcyIsICphdik7CisKKwkJLyogSGFzIHRoZSBiYXNlIGJlZW4gc3BlY2lmaWVkPyAqLworCQlpZiAocmVmbG9nX2Jhc2UpIHsKKwkJCWNoYXIgKmVwOworCQkJYmFzZSA9IHN0cnRvdWwocmVmbG9nX2Jhc2UsICZlcCwgMTApOworCQkJaWYgKCplcCkgeworCQkJCS8qIEFoLCB0aGF0IGlzIGEgZGF0ZSBzcGVjLi4uICovCisJCQkJdW5zaWduZWQgbG9uZyBhdDsKKwkJCQlhdCA9IGFwcHJveGlkYXRlKHJlZmxvZ19iYXNlKTsKKwkJCQlyZWFkX3JlZl9hdChyZWYsIGF0LCAtMSwgc2hhMSwgTlVMTCwKKwkJCQkJICAgIE5VTEwsIE5VTEwsICZiYXNlKTsKKwkJCX0KKwkJfQorCiAJCWZvciAoaSA9IDA7IGkgPCByZWZsb2c7IGkrKykgewotCQkJY2hhciAqbmFtZSA9IHhtYWxsb2MocmVmbGVuICsgMjApOwotCQkJc3ByaW50ZihuYW1lLCAiJXNAeyVkfSIsICphdiwgaSk7Ci0JCQlhcHBlbmRfb25lX3JldihuYW1lKTsKKwkJCWNoYXIgKmxvZ21zZywgKm1zZywgKm07CisJCQl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKKwkJCWludCB0ejsKKworCQkJaWYgKHJlYWRfcmVmX2F0KHJlZiwgMCwgYmFzZStpLCBzaGExLCAmbG9nbXNnLAorCQkJCQkmdGltZXN0YW1wLCAmdHosIE5VTEwpKSB7CisJCQkJcmVmbG9nID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1zZyA9IHN0cmNocihsb2dtc2csICdcdCcpOworCQkJaWYgKCFtc2cpCisJCQkJbXNnID0gIihub25lKSI7CisJCQllbHNlCisJCQkJbXNnKys7CisJCQltID0geG1hbGxvYyhzdHJsZW4obXNnKSArIDIwMCk7CisJCQlzcHJpbnRmKG0sICIoJXMpICVzIiwKKwkJCQlzaG93X2RhdGUodGltZXN0YW1wLCB0eiwgMSksCisJCQkJbXNnKTsKKwkJCXJlZmxvZ19tc2dbaV0gPSBtOworCQkJZnJlZShsb2dtc2cpOworCQkJc3ByaW50ZihudGhfZGVzYywgIiVzQHslZH0iLCAqYXYsIGJhc2UraSk7CisJCQlhcHBlbmRfcmVmKG50aF9kZXNjLCBzaGExLCAxKTsKIAkJfQogCX0KKwllbHNlIGlmIChhbGxfaGVhZHMgKyBhbGxfcmVtb3RlcykKKwkJc25hcmZfcmVmcyhhbGxfaGVhZHMsIGFsbF9yZW1vdGVzKTsKIAllbHNlIHsKIAkJd2hpbGUgKDAgPCBhYykgewogCQkJYXBwZW5kX29uZV9yZXYoKmF2KTsKQEAgLTc2MCw4ICs4NDAsMTQgQEAKIAkJCQlwcmludGYoIiVjIFslc10gIiwKIAkJCQkgICAgICAgaXNfaGVhZCA/ICcqJyA6ICchJywgcmVmX25hbWVbaV0pOwogCQkJfQotCQkJLyogaGVhZGVyIGxpbmVzIG5ldmVyIG5lZWQgbmFtZSAqLwotCQkJc2hvd19vbmVfY29tbWl0KHJldltpXSwgMSk7CisKKwkJCWlmICghcmVmbG9nKSB7CisJCQkJLyogaGVhZGVyIGxpbmVzIG5ldmVyIG5lZWQgbmFtZSAqLworCQkJCXNob3dfb25lX2NvbW1pdChyZXZbaV0sIDEpOworCQkJfQorCQkJZWxzZQorCQkJCXB1dHMocmVmbG9nX21zZ1tpXSk7CisKIAkJCWlmIChpc19oZWFkKQogCQkJCWhlYWRfYXQgPSBpOwogCQl9CmRpZmYgLS1naXQgYS9idWlsdGluLXN5bWJvbGljLXJlZi5jIGIvYnVpbHRpbi1zeW1ib2xpYy1yZWYuYwppbmRleCBkOGJlMDUyLi4yMjdjOWQ0IDEwMDY0NAotLS0gYS9idWlsdGluLXN5bWJvbGljLXJlZi5jCisrKyBiL2J1aWx0aW4tc3ltYm9saWMtcmVmLmMKQEAgLTMsOSArMyw5IEBACiAjaW5jbHVkZSAicmVmcy5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBnaXRfc3ltYm9saWNfcmVmX3VzYWdlW10gPQotImdpdC1zeW1ib2xpYy1yZWYgbmFtZSBbcmVmXSI7CisiZ2l0LXN5bWJvbGljLXJlZiBbLXFdIG5hbWUgW3JlZl0iOwogCi1zdGF0aWMgdm9pZCBjaGVja19zeW1yZWYoY29uc3QgY2hhciAqSEVBRCkKK3N0YXRpYyB2b2lkIGNoZWNrX3N5bXJlZihjb25zdCBjaGFyICpIRUFELCBpbnQgcXVpZXQpCiB7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAlpbnQgZmxhZzsKQEAgLTEzLDE3ICsxMyw0MSBAQAogCiAJaWYgKCFyZWZzX2hlYWRzX21hc3RlcikKIAkJZGllKCJObyBzdWNoIHJlZjogJXMiLCBIRUFEKTsKLQllbHNlIGlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQotCQlkaWUoInJlZiAlcyBpcyBub3QgYSBzeW1ib2xpYyByZWYiLCBIRUFEKTsKKwllbHNlIGlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKSB7CisJCWlmICghcXVpZXQpCisJCQlkaWUoInJlZiAlcyBpcyBub3QgYSBzeW1ib2xpYyByZWYiLCBIRUFEKTsKKwkJZWxzZQorCQkJZXhpdCgxKTsKKwl9CiAJcHV0cyhyZWZzX2hlYWRzX21hc3Rlcik7CiB9CiAKIGludCBjbWRfc3ltYm9saWNfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogeworCWludCBxdWlldCA9IDA7CisKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisKKwl3aGlsZSAoMSA8IGFyZ2MpIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndlsxXTsKKwkJaWYgKGFyZ1swXSAhPSAnLScpCisJCQlicmVhazsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiLXEiLCBhcmcpKQorCQkJcXVpZXQgPSAxOworCQllbHNlIGlmICghc3RyY21wKCItLSIsIGFyZykpIHsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UKKwkJCWRpZSgidW5rbm93biBvcHRpb24gJXMiLCBhcmcpOworCQlhcmdjLS07CisJCWFyZ3YrKzsKKwl9CisKIAlzd2l0Y2ggKGFyZ2MpIHsKIAljYXNlIDI6Ci0JCWNoZWNrX3N5bXJlZihhcmd2WzFdKTsKKwkJY2hlY2tfc3ltcmVmKGFyZ3ZbMV0sIHF1aWV0KTsKIAkJYnJlYWs7CiAJY2FzZSAzOgogCQljcmVhdGVfc3ltcmVmKGFyZ3ZbMV0sIGFyZ3ZbMl0pOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi11cGRhdGUtaW5kZXguYyBiL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMKaW5kZXggMTgyMzMxZC4uMWFjNjEzYSAxMDA2NDQKLS0tIGEvYnVpbHRpbi11cGRhdGUtaW5kZXguYworKysgYi9idWlsdGluLXVwZGF0ZS1pbmRleC5jCkBAIC01MDEsNiArNTAxLDcgQEAKIAogCWZvciAoaSA9IDEgOyBpIDwgYXJnYzsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKnBhdGggPSBhcmd2W2ldOworCQljb25zdCBjaGFyICpwOwogCiAJCWlmIChhbGxvd19vcHRpb25zICYmICpwYXRoID09ICctJykgewogCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0tIikpIHsKQEAgLTYxNiw5ICs2MTcsMTIgQEAKIAkJCQl1c2FnZSh1cGRhdGVfaW5kZXhfdXNhZ2UpOwogCQkJZGllKCJ1bmtub3duIG9wdGlvbiAlcyIsIHBhdGgpOwogCQl9Ci0JCXVwZGF0ZV9vbmUocGF0aCwgcHJlZml4LCBwcmVmaXhfbGVuZ3RoKTsKKwkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgcGF0aCk7CisJCXVwZGF0ZV9vbmUocCwgTlVMTCwgMCk7CiAJCWlmIChzZXRfZXhlY3V0YWJsZV9iaXQpCi0JCQljaG1vZF9wYXRoKHNldF9leGVjdXRhYmxlX2JpdCwgcGF0aCk7CisJCQljaG1vZF9wYXRoKHNldF9leGVjdXRhYmxlX2JpdCwgcCk7CisJCWlmIChwIDwgcGF0aCB8fCBwID4gcGF0aCArIHN0cmxlbihwYXRoKSkKKwkJCWZyZWUoKGNoYXIqKXApOwogCX0KIAlpZiAocmVhZF9mcm9tX3N0ZGluKSB7CiAJCXN0cnVjdCBzdHJidWYgYnVmOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi11cGRhdGUtcmVmLmMgYi9idWlsdGluLXVwZGF0ZS1yZWYuYwppbmRleCBiMzRlNTk4Li41ZWU5NjBiIDEwMDY0NAotLS0gYS9idWlsdGluLXVwZGF0ZS1yZWYuYworKysgYi9idWlsdGluLXVwZGF0ZS1yZWYuYwpAQCAtMTMsNyArMTMsNiBAQAogCWludCBpLCBkZWxldGU7CiAKIAlkZWxldGUgPSAwOwotCXNldHVwX2lkZW50KCk7CiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewpAQCAtNjIsMTAgKzYxLDggQEAKIAogCWxvY2sgPSBsb2NrX2FueV9yZWZfZm9yX3VwZGF0ZShyZWZuYW1lLCBvbGR2YWwgPyBvbGRzaGExIDogTlVMTCk7CiAJaWYgKCFsb2NrKQotCQlyZXR1cm4gMTsKKwkJZGllKCIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIsIHJlZm5hbWUpOwogCWlmICh3cml0ZV9yZWZfc2hhMShsb2NrLCBzaGExLCBtc2cpIDwgMCkKLQkJcmV0dXJuIDE7Ci0KLQkvKiB3cml0ZV9yZWZfc2hhMSBhbHdheXMgdW5sb2NrcyB0aGUgcmVmLCBubyBuZWVkIHRvIGRvIGl0IGV4cGxpY2l0bHkgKi8KKwkJZGllKCIlczogY2Fubm90IHVwZGF0ZSB0aGUgcmVmIiwgcmVmbmFtZSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLmggYi9idWlsdGluLmgKaW5kZXggMGIzYzlmNi4uZGQwZTM1MiAxMDA2NDQKLS0tIGEvYnVpbHRpbi5oCisrKyBiL2J1aWx0aW4uaApAQCAtMzQsNiArMzQsNyBAQAogZXh0ZXJuIGludCBjbWRfZm10X21lcmdlX21zZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9mb3JfZWFjaF9yZWYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfZm9ybWF0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2ZzY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfZ2V0X3Rhcl9jb21taXRfaWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfZ3JlcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKQEAgLTUzLDcgKzU0LDcgQEAKIGV4dGVybiBpbnQgY21kX3B1c2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcmVhZF90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3JlZmxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7Ci1leHRlcm4gaW50IGNtZF9yZXBvX2NvbmZpZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcmVyZXJlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3Jldl9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3Jldl9wYXJzZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CmRpZmYgLS1naXQgYS9jYWNoZS5oIGIvY2FjaGUuaAppbmRleCA2MjBiNmE0Li45ODczZWU5IDEwMDY0NAotLS0gYS9jYWNoZS5oCisrKyBiL2NhY2hlLmgKQEAgLTEyOSw2ICsxMjksNyBAQAogCiBleHRlcm4gaW50IGlzX2JhcmVfcmVwb3NpdG9yeV9jZmc7CiBleHRlcm4gaW50IGlzX2JhcmVfcmVwb3NpdG9yeSh2b2lkKTsKK2V4dGVybiBpbnQgaXNfaW5zaWRlX2dpdF9kaXIodm9pZCk7CiBleHRlcm4gY29uc3QgY2hhciAqZ2V0X2dpdF9kaXIodm9pZCk7CiBleHRlcm4gY2hhciAqZ2V0X29iamVjdF9kaXJlY3Rvcnkodm9pZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JlZnNfZGlyZWN0b3J5KHZvaWQpOwpAQCAtMjk5LDYgKzMwMCw4IEBACiBleHRlcm4gY2hhciAqc2hhMV90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CS8qIHN0YXRpYyBidWZmZXIgcmVzdWx0ISAqLwogZXh0ZXJuIGludCByZWFkX3JlZihjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gY29uc3QgY2hhciAqcmVzb2x2ZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50LCBpbnQgKik7CitleHRlcm4gaW50IGR3aW1fcmVmKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqKnJlZik7CisKIGV4dGVybiBpbnQgY3JlYXRlX3N5bXJlZihjb25zdCBjaGFyICpyZWYsIGNvbnN0IGNoYXIgKnJlZnNfaGVhZHNfbWFzdGVyKTsKIGV4dGVybiBpbnQgdmFsaWRhdGVfaGVhZHJlZihjb25zdCBjaGFyICpyZWYpOwogCkBAIC0zMTYsOCArMzE5LDYgQEAKIHZvaWQgZGF0ZXN0YW1wKGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpOwogdW5zaWduZWQgbG9uZyBhcHByb3hpZGF0ZShjb25zdCBjaGFyICopOwogCi1leHRlcm4gaW50IHNldHVwX2lkZW50KHZvaWQpOwotZXh0ZXJuIHZvaWQgaWdub3JlX21pc3NpbmdfY29tbWl0dGVyX25hbWUoKTsKIGV4dGVybiBjb25zdCBjaGFyICpnaXRfYXV0aG9yX2luZm8oaW50KTsKIGV4dGVybiBjb25zdCBjaGFyICpnaXRfY29tbWl0dGVyX2luZm8oaW50KTsKIApAQCAtMzUxLDcgKzM1Miw3IEBACiBleHRlcm4gc3RydWN0IHBhY2tlZF9naXQgewogCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXh0OwogCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luZG93czsKLQl1bnNpZ25lZCBpbnQgKmluZGV4X2Jhc2U7CisJdWludDMyX3QgKmluZGV4X2Jhc2U7CiAJb2ZmX3QgaW5kZXhfc2l6ZTsKIAlvZmZfdCBwYWNrX3NpemU7CiAJaW50IHBhY2tfZmQ7CkBAIC00MDAsNyArNDAxLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqZmluZF9zaGExX3BhY2soY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgCiAJCQkJCSBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja3MpOwogCi1leHRlcm4gdm9pZCBwYWNrX3JlcG9ydCgpOworZXh0ZXJuIHZvaWQgcGFja19yZXBvcnQodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgY2hhciogdXNlX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKiwgc3RydWN0IHBhY2tfd2luZG93ICoqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQgKik7CiBleHRlcm4gdm9pZCB1bnVzZV9wYWNrKHN0cnVjdCBwYWNrX3dpbmRvdyAqKik7CiBleHRlcm4gc3RydWN0IHBhY2tlZF9naXQgKmFkZF9wYWNrZWRfZ2l0KGNoYXIgKiwgaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvY29tbWl0LmggYi9jb21taXQuaAppbmRleCA5MzZmOGZjLi40OTFiMGM0IDEwMDY0NAotLS0gYS9jb21taXQuaAorKysgYi9jb21taXQuaApAQCAtMTEwLDcgKzExMCw3IEBACiBleHRlcm4gaW50IHJlZ2lzdGVyX3NoYWxsb3coY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gaW50IHVucmVnaXN0ZXJfc2hhbGxvdyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGV4dGVybiBpbnQgd3JpdGVfc2hhbGxvd19jb21taXRzKGludCBmZCwgaW50IHVzZV9wYWNrX3Byb3RvY29sKTsKLWV4dGVybiBpbnQgaXNfcmVwb3NpdG9yeV9zaGFsbG93KCk7CitleHRlcm4gaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9zaGFsbG93X2NvbW1pdHMoc3RydWN0IG9iamVjdF9hcnJheSAqaGVhZHMsCiAJCWludCBkZXB0aCwgaW50IHNoYWxsb3dfZmxhZywgaW50IG5vdF9zaGFsbG93X2ZsYWcpOwogCmRpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCmluZGV4IGI2MDgyZjUuLmMwOGM2NjggMTAwNjQ0Ci0tLSBhL2NvbmZpZy5jCisrKyBiL2NvbmZpZy5jCkBAIC02NjEsNiArNjYxLDExIEBACiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KIAkJCWMgPSB0b2xvd2VyKGMpOworCQl9IGVsc2UgaWYgKGMgPT0gJ1xuJykgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzXG4iLCBrZXkpOworCQkJZnJlZShzdG9yZS5rZXkpOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAkJc3RvcmUua2V5W2ldID0gYzsKIAl9CmRpZmYgLS1naXQgYS9jb25uZWN0LmMgYi9jb25uZWN0LmMKaW5kZXggNjZkYWExMS4uNzg0NDg4OCAxMDA2NDQKLS0tIGEvY29ubmVjdC5jCisrKyBiL2Nvbm5lY3QuYwpAQCAtNTI5LDcgKzUyOSw3IEBACiAJaW50IHNvY2tmZCA9IGdpdF90Y3BfY29ubmVjdF9zb2NrKGhvc3QpOwogCiAJZmRbMF0gPSBzb2NrZmQ7Ci0JZmRbMV0gPSBzb2NrZmQ7CisJZmRbMV0gPSBkdXAoc29ja2ZkKTsKIH0KIAogCmRpZmYgLS1naXQgYS9jb250cmliL2JsYW1ldmlldy9SRUFETUUgYi9jb250cmliL2JsYW1ldmlldy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhNmY2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYmxhbWV2aWV3L1JFQURNRQpAQCAtMCwwICsxLDEwIEBACitUaGlzIGlzIGEgc2FtcGxlIHByb2dyYW0gdG8gdXNlICdnaXQtYmxhbWUgLS1pbmNyZW1lbnRhbCcsIGJhc2VkCitvbiB0aGlzIG1lc3NhZ2UuCisKK0Zyb206IEplZmYgS2luZyA8cGVmZkBwZWZmLm5ldD4KK1N1YmplY3Q6IFJlOiBNb3JlIHByZWNpc2UgdGFnIGZvbGxvd2luZworVG86IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0NjOiBnaXRAdmdlci5rZXJuZWwub3JnCitEYXRlOiBTYXQsIDI3IEphbiAyMDA3IDE4OjUyOjM4IC0wNTAwCitNZXNzYWdlLUlEOiA8MjAwNzAxMjcyMzUyMzguR0EyODcwNkBjb3JlZHVtcC5pbnRyYS5wZWZmLm5ldD4KKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9ibGFtZXZpZXcvYmxhbWV2aWV3LnBlcmwgYi9jb250cmliL2JsYW1ldmlldy9ibGFtZXZpZXcucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZTlhNjdjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ibGFtZXZpZXcvYmxhbWV2aWV3LnBlcmwKQEAgLTAsMCArMSwxMTkgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2UgR3RrMiAtaW5pdDsKK3VzZSBHdGsyOjpTaW1wbGVMaXN0OworCitteSAkZm4gPSBzaGlmdCBvciBkaWUgInJlcXVpcmUgZmlsZW5hbWUgdG8gYmxhbWUiOworCitHdGsyOjpSYy0+cGFyc2Vfc3RyaW5nKDw8J0VPUycpOworc3R5bGUgInRyZWV2aWV3X3N0eWxlIgoreworICBHdGtUcmVlVmlldzo6dmVydGljYWwtc2VwYXJhdG9yID0gMAorfQorY2xhc3MgIkd0a1RyZWVWaWV3IiBzdHlsZSAidHJlZXZpZXdfc3R5bGUiCitFT1MKKworbXkgJHdpbmRvdyA9IEd0azI6OldpbmRvdy0+bmV3KCd0b3BsZXZlbCcpOworJHdpbmRvdy0+c2lnbmFsX2Nvbm5lY3QoZGVzdHJveSA9PiBzdWIgeyBHdGsyLT5tYWluX3F1aXQgfSk7CitteSAkc2Nyb2xsZWRfd2luZG93ID0gR3RrMjo6U2Nyb2xsZWRXaW5kb3ctPm5ldzsKKyR3aW5kb3ctPmFkZCgkc2Nyb2xsZWRfd2luZG93KTsKK215ICRmaWxldmlldyA9IEd0azI6OlNpbXBsZUxpc3QtPm5ldygKKyAgICAnQ29tbWl0JyA9PiAndGV4dCcsCisgICAgJ0NvbW1pdEluZm8nID0+ICd0ZXh0JywKKyAgICAnRmlsZUxpbmUnID0+ICd0ZXh0JywKKyAgICAnRGF0YScgPT4gJ3RleHQnCispOworJHNjcm9sbGVkX3dpbmRvdy0+YWRkKCRmaWxldmlldyk7CiskZmlsZXZpZXctPmdldF9jb2x1bW4oMCktPnNldF9zcGFjaW5nKDApOworJGZpbGV2aWV3LT5zZXRfc2l6ZV9yZXF1ZXN0KDEwMjQsIDc2OCk7CiskZmlsZXZpZXctPnNldF9ydWxlc19oaW50KDEpOworCitteSAkZmg7CitvcGVuKCRmaCwgJy18JywgImdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6JGZuIikKKyAgb3IgZGllICJ1bmFibGUgdG8gb3BlbiAkZm46ICQhIjsKK3doaWxlKDwkZmg+KSB7CisgIGNob21wOworICAkZmlsZXZpZXctPntkYXRhfS0+WyQuXSA9IFsnSEVBRCcsICc/JywgIiRmbjokLiIsICRfXTsKK30KKworbXkgJGJsYW1lOworb3BlbigkYmxhbWUsICctfCcsIHF3KGdpdCBibGFtZSAtLWluY3JlbWVudGFsIC0tKSwgJGZuKQorICAgIG9yIGRpZSAiY2Fubm90IHN0YXJ0IGdpdC1ibGFtZSAkZm4iOworCitHbGliOjpJTy0+YWRkX3dhdGNoKGZpbGVubygkYmxhbWUpLCAnaW4nLCBcJnJlYWRfYmxhbWVfbGluZSk7CisKKyR3aW5kb3ctPnNob3dfYWxsOworR3RrMi0+bWFpbjsKK2V4aXQgMDsKKworbXkgJWNvbW1pdGluZm8gPSAoKTsKKworc3ViIGZsdXNoX2JsYW1lX2xpbmUgeworCW15ICgkYXR0cikgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkYXR0cjsKKworCW15ICgkY29tbWl0LCAkc19sbm8sICRsbm8sICRjbnQpID0KKwkgICAgQHskYXR0cn17cXcoQ09NTUlUIFNfTE5PIExOTyBDTlQpfTsKKworCW15ICgkZmlsZW5hbWUsICRhdXRob3IsICRhdXRob3JfdGltZSwgJGF1dGhvcl90eikgPQorCSAgICBAeyRjb21taXRpbmZveyRjb21taXR9fXtxdyhGSUxFTkFNRSBBVVRIT1IgQVVUSE9SLVRJTUUgQVVUSE9SLVRaKX07CisJbXkgJGluZm8gPSAkYXV0aG9yIC4gJyAnIC4gZm9ybWF0X3RpbWUoJGF1dGhvcl90aW1lLCAkYXV0aG9yX3R6KTsKKworCWZvcihteSAkaSA9IDA7ICRpIDwgJGNudDsgJGkrKykgeworCQlAeyRmaWxldmlldy0+e2RhdGF9LT5bJGxubyskaS0xXX1bMCwxLDJdID0KKwkJICAgIChzdWJzdHIoJGNvbW1pdCwgMCwgOCksICRpbmZvLAorCQkgICAgICRmaWxlbmFtZSAuICc6JyAuICgkc19sbm8rJGkpKTsKKwl9Cit9CisKK215ICRidWY7CitteSAkY3VycmVudDsKK3N1YiByZWFkX2JsYW1lX2xpbmUgeworCisJbXkgJHIgPSBzeXNyZWFkKCRibGFtZSwgJGJ1ZiwgMTAyNCwgbGVuZ3RoKCRidWYpKTsKKwlkaWUgIkkvTyBlcnJvciIgdW5sZXNzIGRlZmluZWQgJHI7CisKKwlpZiAoJHIgPT0gMCkgeworCQlmbHVzaF9ibGFtZV9saW5lKCRjdXJyZW50KTsKKwkJJGN1cnJlbnQgPSB1bmRlZjsKKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKCRidWYgPX4gcy8oW15cbl0qKVxuLy8pIHsKKwkJbXkgJGxpbmUgPSAkMTsKKworCQlpZiAoKCRjb21taXQsICRzX2xubywgJGxubywgJGNudCkgPQorCQkgICAgKCRsaW5lID1+IC9eKFswLTlhLWZdezQwfSkgKFxkKykgKFxkKykgKFxkKykkLykpIHsKKwkJCWZsdXNoX2JsYW1lX2xpbmUoJGN1cnJlbnQpOworCQkJJGN1cnJlbnQgPSAreworCQkJCUNPTU1JVCA9PiAkMSwKKwkJCQlTX0xOTyA9PiAkMiwKKwkJCQlMTk8gPT4gJDMsCisJCQkJQ05UID0+ICQ0LAorCQkJfTsKKwkJCW5leHQ7CisJCX0KKworCQkjIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZXMKKwkJaWYgKCRsaW5lID1+IC9eKGF1dGhvcnxhdXRob3ItbWFpbHxhdXRob3ItdGltZXxhdXRob3ItdHp8Y29tbWl0dGVyfGNvbW1pdHRlci1tYWlsfGNvbW1pdHRlci10aW1lfGNvbW1pdHRlci10enxzdW1tYXJ5fGZpbGVuYW1lKSAoLiopJC8pIHsKKwkJCW15ICRjb21taXQgPSAkY3VycmVudC0+e0NPTU1JVH07CisJCQkkY29tbWl0aW5mb3skY29tbWl0fXt1YygkMSl9ID0gJDI7CisJCQluZXh0OworCQl9CisJfQorCXJldHVybiAxOworfQorCitzdWIgZm9ybWF0X3RpbWUgeworICBteSAkdGltZSA9IHNoaWZ0OworICBteSAkdHogPSBzaGlmdDsKKworICBteSAkbWludXRlcyA9ICR0eiA8IDAgPyAwLSR0eiA6ICR0ejsKKyAgJG1pbnV0ZXMgPSAoJG1pbnV0ZXMgLyAxMDApKjYwICsgKCRtaW51dGVzICUgMTAwKTsKKyAgJG1pbnV0ZXMgPSAkdHogPCAwID8gMC0kbWludXRlcyA6ICRtaW51dGVzOworICAkdGltZSArPSAkbWludXRlcyAqIDYwOworICBteSBAdCA9IGdtdGltZSgkdGltZSk7CisgIHJldHVybiBzcHJpbnRmKCclMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCAlcycsCisJCSAkdFs1XSArIDE5MDAsIEB0WzQsMywyLDEsMF0sICR0eik7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoCmluZGV4IDdjNzUyMGUuLjgzYzY5ZWMgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoCisrKyBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJZWNobyAke2kjJGQvcmVtb3Rlcy99CiAJZG9uZQogCVsgIiRuZ29mZiIgXSAmJiBzaG9wdCAtdSBudWxsZ2xvYgotCWZvciBpIGluICQoZ2l0IC0tZ2l0LWRpcj0iJGQiIHJlcG8tY29uZmlnIC0tbGlzdCk7IGRvCisJZm9yIGkgaW4gJChnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIC0tbGlzdCk7IGRvCiAJCWNhc2UgIiRpIiBpbgogCQlyZW1vdGUuKi51cmw9KikKIAkJCWk9IiR7aSNyZW1vdGUufSIKQEAgLTI4Niw3ICsyODYsNyBAQAogX19naXRfYWxpYXNlcyAoKQogewogCWxvY2FsIGkgSUZTPSQnXG4nCi0JZm9yIGkgaW4gJChnaXQgLS1naXQtZGlyPSIkKF9fZ2l0ZGlyKSIgcmVwby1jb25maWcgLS1saXN0KTsgZG8KKwlmb3IgaSBpbiAkKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBjb25maWcgLS1saXN0KTsgZG8KIAkJY2FzZSAiJGkiIGluCiAJCWFsaWFzLiopCiAJCQlpPSIke2kjYWxpYXMufSIKQEAgLTI5OSw3ICsyOTksNyBAQAogX19naXRfYWxpYXNlZF9jb21tYW5kICgpCiB7CiAJbG9jYWwgd29yZCBjbWRsaW5lPSQoZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIFwKLQkJcmVwby1jb25maWcgLS1nZXQgImFsaWFzLiQxIikKKwkJY29uZmlnIC0tZ2V0ICJhbGlhcy4kMSIpCiAJZm9yIHdvcmQgaW4gJGNtZGxpbmU7IGRvCiAJCWlmIFsgIiR7d29yZCMjLSp9IiBdOyB0aGVuCiAJCQllY2hvICR3b3JkCkBAIC02MjksNyArNjI5LDcgQEAKIAlDT01QUkVQTFk9KCQoY29tcGdlbiAtVyAiJChfX2dpdF9yZWZzKSIgLS0gIiRjdXIiKSkKIH0KIAotX2dpdF9yZXBvX2NvbmZpZyAoKQorX2dpdF9jb25maWcgKCkKIHsKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJbG9jYWwgcHJ2PSIke0NPTVBfV09SRFNbQ09NUF9DV09SRC0xXX0iCkBAIC04MDYsNiArODA2LDcgQEAKIAljaGVja291dCkgICAgX2dpdF9jaGVja291dCA7OwogCWNoZXJyeS1waWNrKSBfZ2l0X2NoZXJyeV9waWNrIDs7CiAJY29tbWl0KSAgICAgIF9naXRfY29tbWl0IDs7CisJY29uZmlnKSAgICAgIF9naXRfY29uZmlnIDs7CiAJZGlmZikgICAgICAgIF9naXRfZGlmZiA7OwogCWRpZmYtdHJlZSkgICBfZ2l0X2RpZmZfdHJlZSA7OwogCWZldGNoKSAgICAgICBfZ2l0X2ZldGNoIDs7CkBAIC04MTksNyArODIwLDcgQEAKIAlwdWxsKSAgICAgICAgX2dpdF9wdWxsIDs7CiAJcHVzaCkgICAgICAgIF9naXRfcHVzaCA7OwogCXJlYmFzZSkgICAgICBfZ2l0X3JlYmFzZSA7OwotCXJlcG8tY29uZmlnKSBfZ2l0X3JlcG9fY29uZmlnIDs7CisJcmVwby1jb25maWcpIF9naXRfY29uZmlnIDs7CiAJcmVzZXQpICAgICAgIF9naXRfcmVzZXQgOzsKIAlzaG93KSAgICAgICAgX2dpdF9zaG93IDs7CiAJc2hvdy1icmFuY2gpIF9naXRfbG9nIDs7CkBAIC04NTYsNyArODU3LDcgQEAKIGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiBfZ2l0X3B1bGwgZ2l0LXB1bGwKIGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiBfZ2l0X3B1c2ggZ2l0LXB1c2gKIGNvbXBsZXRlIC1vIGRlZmF1bHQgICAgICAgICAgICAtRiBfZ2l0X3JlYmFzZSBnaXQtcmViYXNlCi1jb21wbGV0ZSAtbyBkZWZhdWx0ICAgICAgICAgICAgLUYgX2dpdF9yZXBvX2NvbmZpZyBnaXQtcmVwby1jb25maWcKK2NvbXBsZXRlIC1vIGRlZmF1bHQgICAgICAgICAgICAtRiBfZ2l0X2NvbmZpZyBnaXQtY29uZmlnCiBjb21wbGV0ZSAtbyBkZWZhdWx0ICAgICAgICAgICAgLUYgX2dpdF9yZXNldCBnaXQtcmVzZXQKIGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiBfZ2l0X3Nob3cgZ2l0LXNob3cKIGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiBfZ2l0X2xvZyBnaXQtc2hvdy1icmFuY2gKQEAgLTg3OSw3ICs4ODAsNyBAQAogY29tcGxldGUgLW8gZGVmYXVsdCAgICAgICAgICAgIC1GIF9naXRfbWVyZ2VfYmFzZSBnaXQtbWVyZ2UtYmFzZS5leGUKIGNvbXBsZXRlIC1vIGRlZmF1bHQgICAgICAgICAgICAtRiBfZ2l0X25hbWVfcmV2IGdpdC1uYW1lLXJldi5leGUKIGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiBfZ2l0X3B1c2ggZ2l0LXB1c2guZXhlCi1jb21wbGV0ZSAtbyBkZWZhdWx0ICAgICAgICAgICAgLUYgX2dpdF9yZXBvX2NvbmZpZyBnaXQtcmVwby1jb25maWcKK2NvbXBsZXRlIC1vIGRlZmF1bHQgICAgICAgICAgICAtRiBfZ2l0X2NvbmZpZyBnaXQtY29uZmlnCiBjb21wbGV0ZSAtbyBkZWZhdWx0IC1vIG5vc3BhY2UgLUYgX2dpdF9zaG93IGdpdC1zaG93LmV4ZQogY29tcGxldGUgLW8gZGVmYXVsdCAtbyBub3NwYWNlIC1GIF9naXRfbG9nIGdpdC1zaG93LWJyYW5jaC5leGUKIGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiBfZ2l0X2xvZyBnaXQtd2hhdGNoYW5nZWQuZXhlCmRpZmYgLS1naXQgYS9jb250cmliL2VtYWNzL2dpdC5lbCBiL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCmluZGV4IGQ5MGJhODEuLjI0NjI5ZWIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCisrKyBiL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCkBAIC0yMjIsNyArMjIyLDcgQEAKICAgIlJldHVybiB0aGUgbmFtZSB0byB1c2UgYXMgR0lUX0NPTU1JVFRFUl9OQU1FLiIKICAgOyBjb3BpZWQgZnJvbSBsb2ctZWRpdAogICAob3IgZ2l0LWNvbW1pdHRlci1uYW1lCi0gICAgICAoZ2l0LXJlcG8tY29uZmlnICJ1c2VyLm5hbWUiKQorICAgICAgKGdpdC1jb25maWcgInVzZXIubmFtZSIpCiAgICAgICAoYW5kIChib3VuZHAgJ2FkZC1sb2ctZnVsbC1uYW1lKSBhZGQtbG9nLWZ1bGwtbmFtZSkKICAgICAgIChhbmQgKGZib3VuZHAgJ3VzZXItZnVsbC1uYW1lKSAodXNlci1mdWxsLW5hbWUpKQogICAgICAgKGFuZCAoYm91bmRwICd1c2VyLWZ1bGwtbmFtZSkgdXNlci1mdWxsLW5hbWUpKSkKQEAgLTIzMSw3ICsyMzEsNyBAQAogICAiUmV0dXJuIHRoZSBlbWFpbCBhZGRyZXNzIHRvIHVzZSBhcyBHSVRfQ09NTUlUVEVSX0VNQUlMLiIKICAgOyBjb3BpZWQgZnJvbSBsb2ctZWRpdAogICAob3IgZ2l0LWNvbW1pdHRlci1lbWFpbAotICAgICAgKGdpdC1yZXBvLWNvbmZpZyAidXNlci5lbWFpbCIpCisgICAgICAoZ2l0LWNvbmZpZyAidXNlci5lbWFpbCIpCiAgICAgICAoYW5kIChib3VuZHAgJ2FkZC1sb2ctbWFpbGluZy1hZGRyZXNzKSBhZGQtbG9nLW1haWxpbmctYWRkcmVzcykKICAgICAgIChhbmQgKGZib3VuZHAgJ3VzZXItbWFpbC1hZGRyZXNzKSAodXNlci1tYWlsLWFkZHJlc3MpKQogICAgICAgKGFuZCAoYm91bmRwICd1c2VyLW1haWwtYWRkcmVzcykgdXNlci1tYWlsLWFkZHJlc3MpKSkKQEAgLTI5OCw5ICsyOTgsOSBAQAogICAoZ2l0LWdldC1zdHJpbmctc2hhMQogICAgKGdpdC1jYWxsLXByb2Nlc3MtZW52LXN0cmluZyBuaWwgInJldi1wYXJzZSIgcmV2KSkpCiAKLShkZWZ1biBnaXQtcmVwby1jb25maWcgKGtleSkKKyhkZWZ1biBnaXQtY29uZmlnIChrZXkpCiAgICJSZXRyaWV2ZSB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBLRVkgaW4gdGhlIGdpdCByZXBvc2l0b3J5IGNvbmZpZyBmaWxlLiIKLSAgKGxldCAoKHN0ciAoZ2l0LWNhbGwtcHJvY2Vzcy1lbnYtc3RyaW5nIG5pbCAicmVwby1jb25maWciIGtleSkpKQorICAobGV0ICgoc3RyIChnaXQtY2FsbC1wcm9jZXNzLWVudi1zdHJpbmcgbmlsICJjb25maWciIGtleSkpKQogICAgIChhbmQgc3RyIChjYXIgKHNwbGl0LXN0cmluZyBzdHIgIlxuIikpKSkpCiAKIChkZWZ1biBnaXQtc3ltYm9saWMtcmVmIChyZWYpCmRpZmYgLS1naXQgYS9jb250cmliL2VtYWNzL3ZjLWdpdC5lbCBiL2NvbnRyaWIvZW1hY3MvdmMtZ2l0LmVsCmluZGV4IDNlYjRiZDEuLmU0NTZhYjkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZW1hY3MvdmMtZ2l0LmVsCisrKyBiL2NvbnRyaWIvZW1hY3MvdmMtZ2l0LmVsCkBAIC0xMjAsNyArMTIwLDE2IEBACiAgICAgKHZjLWdpdC0tcnVuLWNvbW1hbmQgZmlsZSAiY29tbWl0IiAiLW0iIGNvbW1lbnQgIi0tb25seSIgIi0tIikpKQogCiAoZGVmdW4gdmMtZ2l0LWNoZWNrb3V0IChmaWxlICZvcHRpb25hbCBlZGl0YWJsZSByZXYgZGVzdGZpbGUpCi0gICh2Yy1naXQtLXJ1bi1jb21tYW5kIGZpbGUgImNoZWNrb3V0IiAob3IgcmV2ICJIRUFEIikpKQorICAoaWYgZGVzdGZpbGUKKyAgICAgIChsZXQgKChmdWxsbmFtZSAoc3Vic3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICh2Yy1naXQtLXJ1bi1jb21tYW5kLXN0cmluZyBmaWxlICJscy1maWxlcyIgIi16IiAiLS1mdWxsLW5hbWUiICItLSIpCisgICAgICAgICAgICAgICAgICAgICAgIDAgLTEpKQorICAgICAgICAgICAgKGNvZGluZy1zeXN0ZW0tZm9yLXJlYWQgJ25vLWNvbnZlcnNpb24pCisgICAgICAgICAgICAoY29kaW5nLXN5c3RlbS1mb3Itd3JpdGUgJ25vLWNvbnZlcnNpb24pKQorICAgICAgICAod2l0aC10ZW1wLWZpbGUgZGVzdGZpbGUKKyAgICAgICAgICAoZXEgMCAoY2FsbC1wcm9jZXNzICJnaXQiIG5pbCB0IG5pbCAiY2F0LWZpbGUiICJibG9iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAob3IgcmV2ICJIRUFEIikgIjoiIGZ1bGxuYW1lKSkpKSkKKyAgICAodmMtZ2l0LS1ydW4tY29tbWFuZCBmaWxlICJjaGVja291dCIgKG9yIHJldiAiSEVBRCIpKSkpCiAKIChkZWZ1biB2Yy1naXQtYW5ub3RhdGUtY29tbWFuZCAoZmlsZSBidWYgJm9wdGlvbmFsIHJldikKICAgOyBGSVhNRTogcmV2IGlzIGlnbm9yZWQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0dmlldy9naXR2aWV3IGIvY29udHJpYi9naXR2aWV3L2dpdHZpZXcKaW5kZXggM2I2YmRjZS4uNTIxYjJmYyAxMDA3NTUKLS0tIGEvY29udHJpYi9naXR2aWV3L2dpdHZpZXcKKysrIGIvY29udHJpYi9naXR2aWV3L2dpdHZpZXcKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCQlmcC5jbG9zZSgpCiAKIAlkZWYgZ2V0X2VuY29kaW5nKHNlbGYpOgotCQlmcCA9IG9zLnBvcGVuKCJnaXQgcmVwby1jb25maWcgLS1nZXQgaTE4bi5jb21taXRlbmNvZGluZyIpCisJCWZwID0gb3MucG9wZW4oImdpdCBjb25maWcgLS1nZXQgaTE4bi5jb21taXRlbmNvZGluZyIpCiAJCXNlbGYuZW5jb2Rpbmc9c3RyaW5nLnN0cmlwKGZwLnJlYWRsaW5lKCkpCiAJCWZwLmNsb3NlKCkKIAkJaWYgKHNlbGYuZW5jb2RpbmcgPT0gIiIpOgpkaWZmIC0tZ2l0IGEvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaCBiL2NvbnRyaWIvcmVtb3RlczJjb25maWcuc2gKaW5kZXggMjU5MDFlMi4uZGMwOWVhZSAxMDA2NDQKLS0tIGEvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaAorKysgYi9jb250cmliL3JlbW90ZXMyY29uZmlnLnNoCkBAIC0xMSw3ICsxMSw3IEBACiAJewogCQljZCAiJEdJVF9ESVIiL3JlbW90ZXMKIAkJbHMgfCB3aGlsZSByZWFkIGY7IGRvCi0JCQluYW1lPSQoZWNobyAtbiAiJGYiIHwgdHIgLWMgIkEtWmEtejAtOSIgIi4iKQorCQkJbmFtZT0kKHByaW50ZiAiJGYiIHwgdHIgLWMgIkEtWmEtejAtOSIgIi4iKQogCQkJc2VkIC1uIFwKIAkJCS1lICJzL15VUkw6IFwoLipcKSQvcmVtb3RlLiRuYW1lLnVybCBcMSAuL3AiIFwKIAkJCS1lICJzL15QdWxsOiBcKC4qXCkkL3JlbW90ZS4kbmFtZS5mZXRjaCBcMSBeJCAvcCIgXApAQCAtMjYsOCArMjYsOCBAQAogCQkJCW12ICIkR0lUX0RJUiIvcmVtb3RlcyAiJEdJVF9ESVIiL3JlbW90ZXMub2xkCiAJCQlmaSA7OwogCQkqKQotCQkJZWNobyAiZ2l0LXJlcG8tY29uZmlnICRrZXkgIiR2YWx1ZSIgJHJlZ2V4IgotCQkJZ2l0LXJlcG8tY29uZmlnICRrZXkgIiR2YWx1ZSIgJHJlZ2V4IHx8IGVycm9yPTEgOzsKKwkJCWVjaG8gImdpdC1jb25maWcgJGtleSAiJHZhbHVlIiAkcmVnZXgiCisJCQlnaXQtY29uZmlnICRrZXkgIiR2YWx1ZSIgJHJlZ2V4IHx8IGVycm9yPTEgOzsKIAkJZXNhYwogCWRvbmUKIGZpCmRpZmYgLS1naXQgYS9jb250cmliL3ZpbS9zeW50YXgvZ2l0Y29tbWl0LnZpbSBiL2NvbnRyaWIvdmltL3N5bnRheC9naXRjb21taXQudmltCmluZGV4IGQ5MTFlZmIuLjMzMjEyMWIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdmltL3N5bnRheC9naXRjb21taXQudmltCisrKyBiL2NvbnRyaWIvdmltL3N5bnRheC9naXRjb21taXQudmltCkBAIC0xLDcgKzEsNyBAQAogc3luIHJlZ2lvbiBnaXRMaW5lIHN0YXJ0PS9eIy8gZW5kPS8kLwotc3luIHJlZ2lvbiBnaXRDb21taXQgc3RhcnQ9L14jIEFkZGVkIGJ1dCBub3QgeWV0IGNvbW1pdHRlZDokLyBlbmQ9L14jJC8gY29udGFpbnM9Z2l0SGVhZCxnaXRDb21taXRGaWxlCitzeW4gcmVnaW9uIGdpdENvbW1pdCBzdGFydD0vXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6JC8gZW5kPS9eIyQvIGNvbnRhaW5zPWdpdEhlYWQsZ2l0Q29tbWl0RmlsZQogc3luIHJlZ2lvbiBnaXRIZWFkIGNvbnRhaW5lZCBzdGFydD0vXiMgICAoLiopLyBlbmQ9L14jJC8KLXN5biByZWdpb24gZ2l0Q2hhbmdlZCBzdGFydD0vXiMgQ2hhbmdlZCBidXQgbm90IGFkZGVkOi8gZW5kPS9eIyQvIGNvbnRhaW5zPWdpdEhlYWQsZ2l0Q2hhbmdlZEZpbGUKK3N5biByZWdpb24gZ2l0Q2hhbmdlZCBzdGFydD0vXiMgQ2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6LyBlbmQ9L14jJC8gY29udGFpbnM9Z2l0SGVhZCxnaXRDaGFuZ2VkRmlsZQogc3luIHJlZ2lvbiBnaXRVbnRyYWNrZWQgc3RhcnQ9L14jIFVudHJhY2tlZCBmaWxlczovIGVuZD0vXiMkLyBjb250YWlucz1naXRIZWFkLGdpdFVudHJhY2tlZEZpbGUKIAogc3luIG1hdGNoIGdpdENvbW1pdEZpbGUgY29udGFpbmVkIC9eI1x0LiovaHM9cysyCmRpZmYgLS1naXQgYS9kYWVtb24uYyBiL2RhZW1vbi5jCmluZGV4IGYwMzk1MzQuLjk1OTAzNzIgMTAwNjQ0Ci0tLSBhL2RhZW1vbi5jCisrKyBiL2RhZW1vbi5jCkBAIC0zNzIsOSArMzcyLDE2IEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50IHJlY2VpdmVfcGFjayh2b2lkKQoreworCWV4ZWNsX2dpdF9jbWQoInJlY2VpdmUtcGFjayIsICIuIiwgTlVMTCk7CisJcmV0dXJuIC0xOworfQorCiBzdGF0aWMgc3RydWN0IGRhZW1vbl9zZXJ2aWNlIGRhZW1vbl9zZXJ2aWNlW10gPSB7CiAJeyAidXBsb2FkLWFyY2hpdmUiLCAidXBsb2FkYXJjaCIsIHVwbG9hZF9hcmNoaXZlLCAwLCAxIH0sCiAJeyAidXBsb2FkLXBhY2siLCAidXBsb2FkcGFjayIsIHVwbG9hZF9wYWNrLCAxLCAxIH0sCisJeyAicmVjZWl2ZS1wYWNrIiwgInJlY2VpdmVwYWNrIiwgcmVjZWl2ZV9wYWNrLCAwLCAxIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2VydmljZShjb25zdCBjaGFyICpuYW1lLCBpbnQgZW5hKSB7CmRpZmYgLS1naXQgYS9kYXRlLmMgYi9kYXRlLmMKaW5kZXggN2FjYjhjYi4uNTQyYzAwNCAxMDA2NDQKLS0tIGEvZGF0ZS5jCisrKyBiL2RhdGUuYwpAQCAtNjIsMTIgKzYyLDExIEBACiAKIAlpZiAocmVsYXRpdmUpIHsKIAkJdW5zaWduZWQgbG9uZyBkaWZmOwotCQl0aW1lX3QgdCA9IGdtX3RpbWVfdCh0aW1lLCB0eik7CiAJCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotCQlpZiAobm93LnR2X3NlYyA8IHQpCisJCWlmIChub3cudHZfc2VjIDwgdGltZSkKIAkJCXJldHVybiAiaW4gdGhlIGZ1dHVyZSI7Ci0JCWRpZmYgPSBub3cudHZfc2VjIC0gdDsKKwkJZGlmZiA9IG5vdy50dl9zZWMgLSB0aW1lOwogCQlpZiAoZGlmZiA8IDkwKSB7CiAJCQlzbnByaW50Zih0aW1lYnVmLCBzaXplb2YodGltZWJ1ZiksICIlbHUgc2Vjb25kcyBhZ28iLCBkaWZmKTsKIAkJCXJldHVybiB0aW1lYnVmOwpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtcGlja2F4ZS5jIGIvZGlmZmNvcmUtcGlja2F4ZS5jCmluZGV4IGRlNDRhZGEuLjI4NjkxOWUgMTAwNjQ0Ci0tLSBhL2RpZmZjb3JlLXBpY2theGUuYworKysgYi9kaWZmY29yZS1waWNrYXhlLmMKQEAgLTE0LDYgKzE0LDggQEAKIAljb25zdCBjaGFyICpkYXRhOwogCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKG9uZSwgMCkpCiAJCXJldHVybiAwOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKIAogCXN6ID0gb25lLT5zaXplOwogCWRhdGEgPSBvbmUtPmRhdGE7CmRpZmYgLS1naXQgYS9mZXRjaC1wYWNrLmMgYi9mZXRjaC1wYWNrLmMKaW5kZXggMTUzMGE5NC4uYzc4NzEwNiAxMDA2NDQKLS0tIGEvZmV0Y2gtcGFjay5jCisrKyBiL2ZldGNoLXBhY2suYwpAQCAtNCwxNiArNCwyMCBAQAogI2luY2x1ZGUgImNvbW1pdC5oIgogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicGFjay5oIgogI2luY2x1ZGUgInNpZGViYW5kLmgiCiAKIHN0YXRpYyBpbnQga2VlcF9wYWNrOworc3RhdGljIGludCB0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSAtMTsKK3N0YXRpYyBpbnQgZmV0Y2hfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IHVucGFja19saW1pdCA9IDEwMDsKIHN0YXRpYyBpbnQgcXVpZXQ7CiBzdGF0aWMgaW50IHZlcmJvc2U7CiBzdGF0aWMgaW50IGZldGNoX2FsbDsKIHN0YXRpYyBpbnQgZGVwdGg7CiBzdGF0aWMgY29uc3QgY2hhciBmZXRjaF9wYWNrX3VzYWdlW10gPQotImdpdC1mZXRjaC1wYWNrIFstLWFsbF0gWy1xXSBbLXZdIFsta10gWy0tdGhpbl0gWy0tZXhlYz11cGxvYWQtcGFja10gWy0tZGVwdGg9PG4+XSBbaG9zdDpdZGlyZWN0b3J5IDxyZWZzPi4uLiI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZXhlYyA9ICJnaXQtdXBsb2FkLXBhY2siOworImdpdC1mZXRjaC1wYWNrIFstLWFsbF0gWy0tcXVpZXR8LXFdIFstLWtlZXB8LWtdIFstLXRoaW5dIFstLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+XSBbLS1kZXB0aD08bj5dIFstdl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWZzPi4uLl0iOworc3RhdGljIGNvbnN0IGNoYXIgKnVwbG9hZHBhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKIAogI2RlZmluZSBDT01QTEVURQkoMVUgPDwgMCkKICNkZWZpbmUgQ09NTU9OCQkoMVUgPDwgMSkKQEAgLTQ4NiwxMyArNDkwLDU4IEBACiAJcmV0dXJuIHNpZGVfcGlkOwogfQogCi1zdGF0aWMgaW50IGdldF9wYWNrKGludCB4ZFsyXSwgY29uc3QgY2hhciAqKmFyZ3YpCitzdGF0aWMgaW50IGdldF9wYWNrKGludCB4ZFsyXSkKIHsKIAlpbnQgc3RhdHVzOwogCXBpZF90IHBpZCwgc2lkZV9waWQ7CiAJaW50IGZkWzJdOworCWNvbnN0IGNoYXIgKmFyZ3ZbMjBdOworCWNoYXIga2VlcF9hcmdbMjU2XTsKKwljaGFyIGhkcl9hcmdbMjU2XTsKKwljb25zdCBjaGFyICoqYXY7CisJaW50IGRvX2tlZXAgPSBrZWVwX3BhY2s7CiAKIAlzaWRlX3BpZCA9IHNldHVwX3NpZGViYW5kKGZkLCB4ZCk7CisKKwlhdiA9IGFyZ3Y7CisJKmhkcl9hcmcgPSAwOworCWlmICh1bnBhY2tfbGltaXQpIHsKKwkJc3RydWN0IHBhY2tfaGVhZGVyIGhlYWRlcjsKKworCQlpZiAocmVhZF9wYWNrX2hlYWRlcihmZFswXSwgJmhlYWRlcikpCisJCQlkaWUoInByb3RvY29sIGVycm9yOiBiYWQgcGFjayBoZWFkZXIiKTsKKwkJc25wcmludGYoaGRyX2FyZywgc2l6ZW9mKGhkcl9hcmcpLCAiLS1wYWNrX2hlYWRlcj0ldSwldSIsCisJCQkgbnRvaGwoaGVhZGVyLmhkcl92ZXJzaW9uKSwgbnRvaGwoaGVhZGVyLmhkcl9lbnRyaWVzKSk7CisJCWlmIChudG9obChoZWFkZXIuaGRyX2VudHJpZXMpIDwgdW5wYWNrX2xpbWl0KQorCQkJZG9fa2VlcCA9IDA7CisJCWVsc2UKKwkJCWRvX2tlZXAgPSAxOworCX0KKworCWlmIChkb19rZWVwKSB7CisJCSphdisrID0gImluZGV4LXBhY2siOworCQkqYXYrKyA9ICItLXN0ZGluIjsKKwkJaWYgKCFxdWlldCkKKwkJCSphdisrID0gIi12IjsKKwkJaWYgKHVzZV90aGluX3BhY2spCisJCQkqYXYrKyA9ICItLWZpeC10aGluIjsKKwkJaWYgKGtlZXBfcGFjayA+IDEgfHwgdW5wYWNrX2xpbWl0KSB7CisJCQlpbnQgcyA9IHNwcmludGYoa2VlcF9hcmcsCisJCQkJCSItLWtlZXA9ZmV0Y2gtcGFjayAlZCBvbiAiLCBnZXRwaWQoKSk7CisJCQlpZiAoZ2V0aG9zdG5hbWUoa2VlcF9hcmcgKyBzLCBzaXplb2Yoa2VlcF9hcmcpIC0gcykpCisJCQkJc3RyY3B5KGtlZXBfYXJnICsgcywgImxvY2FsaG9zdCIpOworCQkJKmF2KysgPSBrZWVwX2FyZzsKKwkJfQorCX0KKwllbHNlIHsKKwkJKmF2KysgPSAidW5wYWNrLW9iamVjdHMiOworCQlpZiAocXVpZXQpCisJCQkqYXYrKyA9ICItcSI7CisJfQorCWlmICgqaGRyX2FyZykKKwkJKmF2KysgPSBoZHJfYXJnOworCSphdisrID0gTlVMTDsKKwogCXBpZCA9IGZvcmsoKTsKIAlpZiAocGlkIDwgMCkKIAkJZGllKCJmZXRjaC1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgJXMiLCBhcmd2WzBdKTsKQEAgLTUyMiwzOSArNTcxLDEwIEBACiAJZGllKCIlcyBkaWVkIG9mIHVubmF0dXJhbCBjYXVzZXMgJWQiLCBhcmd2WzBdLCBzdGF0dXMpOwogfQogCi1zdGF0aWMgaW50IGV4cGxvZGVfcnhfcGFjayhpbnQgeGRbMl0pCi17Ci0JY29uc3QgY2hhciAqYXJndlszXSA9IHsgInVucGFjay1vYmplY3RzIiwgcXVpZXQgPyAiLXEiIDogTlVMTCwgTlVMTCB9OwotCXJldHVybiBnZXRfcGFjayh4ZCwgYXJndik7Ci19Ci0KLXN0YXRpYyBpbnQga2VlcF9yeF9wYWNrKGludCB4ZFsyXSkKLXsKLQljb25zdCBjaGFyICphcmd2WzZdOwotCWNoYXIga2VlcF9hcmdbMjU2XTsKLQlpbnQgbiA9IDA7Ci0KLQlhcmd2W24rK10gPSAiaW5kZXgtcGFjayI7Ci0JYXJndltuKytdID0gIi0tc3RkaW4iOwotCWlmICghcXVpZXQpCi0JCWFyZ3ZbbisrXSA9ICItdiI7Ci0JaWYgKHVzZV90aGluX3BhY2spCi0JCWFyZ3ZbbisrXSA9ICItLWZpeC10aGluIjsKLQlpZiAoa2VlcF9wYWNrID4gMSkgewotCQlpbnQgcyA9IHNwcmludGYoa2VlcF9hcmcsICItLWtlZXA9ZmV0Y2gtcGFjayAlaSBvbiAiLCBnZXRwaWQoKSk7Ci0JCWlmIChnZXRob3N0bmFtZShrZWVwX2FyZyArIHMsIHNpemVvZihrZWVwX2FyZykgLSBzKSkKLQkJCXN0cmNweShrZWVwX2FyZyArIHMsICJsb2NhbGhvc3QiKTsKLQkJYXJndltuKytdID0ga2VlcF9hcmc7Ci0JfQotCWFyZ3Zbbl0gPSBOVUxMOwotCXJldHVybiBnZXRfcGFjayh4ZCwgYXJndik7Ci19Ci0KIHN0YXRpYyBpbnQgZmV0Y2hfcGFjayhpbnQgZmRbMl0sIGludCBucl9tYXRjaCwgY2hhciAqKm1hdGNoKQogewogCXN0cnVjdCByZWYgKnJlZjsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCWludCBzdGF0dXM7CiAKIAlnZXRfcmVtb3RlX2hlYWRzKGZkWzBdLCAmcmVmLCAwLCBOVUxMLCAwKTsKIAlpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkgJiYgIXNlcnZlcl9zdXBwb3J0cygic2hhbGxvdyIpKQpAQCAtNTg5LDggKzYwOSw3IEBACiAJCQkgKi8KIAkJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogbm8gY29tbW9uIGNvbW1pdHNcbiIpOwogCi0Jc3RhdHVzID0gKGtlZXBfcGFjaykgPyBrZWVwX3J4X3BhY2soZmQpIDogZXhwbG9kZV9yeF9wYWNrKGZkKTsKLQlpZiAoc3RhdHVzKQorCWlmIChnZXRfcGFjayhmZCkpCiAJCWRpZSgiZ2l0LWZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iKTsKIAogIGFsbF9kb25lOgpAQCAtNjI1LDYgKzY0NCwyMSBAQAogCXJldHVybiBkc3Q7CiB9CiAKK3N0YXRpYyBpbnQgZmV0Y2hfcGFja19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoc3RyY21wKHZhciwgImZldGNoLnVucGFja2xpbWl0IikgPT0gMCkgeworCQlmZXRjaF91bnBhY2tfbGltaXQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJ0cmFuc2Zlci51bnBhY2tsaW1pdCIpID09IDApIHsKKwkJdHJhbnNmZXJfdW5wYWNrX2xpbWl0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGxvY2s7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKQEAgLTYzNiw2ICs2NzAsMTIgQEAKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAogCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlnaXRfY29uZmlnKGZldGNoX3BhY2tfY29uZmlnKTsKKworCWlmICgwIDw9IHRyYW5zZmVyX3VucGFja19saW1pdCkKKwkJdW5wYWNrX2xpbWl0ID0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0OworCWVsc2UgaWYgKDAgPD0gZmV0Y2hfdW5wYWNrX2xpbWl0KQorCQl1bnBhY2tfbGltaXQgPSBmZXRjaF91bnBhY2tfbGltaXQ7CiAKIAlucl9oZWFkcyA9IDA7CiAJaGVhZHMgPSBOVUxMOwpAQCAtNjQzLDggKzY4MywxMiBAQAogCQljaGFyICphcmcgPSBhcmd2W2ldOwogCiAJCWlmICgqYXJnID09ICctJykgeworCQkJaWYgKCFzdHJuY21wKCItLXVwbG9hZC1wYWNrPSIsIGFyZywgMTQpKSB7CisJCQkJdXBsb2FkcGFjayA9IGFyZyArIDE0OworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJuY21wKCItLWV4ZWM9IiwgYXJnLCA3KSkgewotCQkJCWV4ZWMgPSBhcmcgKyA3OworCQkJCXVwbG9hZHBhY2sgPSBhcmcgKyA3OwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoIi0tcXVpZXQiLCBhcmcpIHx8ICFzdHJjbXAoIi1xIiwgYXJnKSkgewpAQCAtNjUzLDYgKzY5Nyw3IEBACiAJCQl9CiAJCQlpZiAoIXN0cmNtcCgiLS1rZWVwIiwgYXJnKSB8fCAhc3RyY21wKCItayIsIGFyZykpIHsKIAkJCQlrZWVwX3BhY2srKzsKKwkJCQl1bnBhY2tfbGltaXQgPSAwOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoIi0tdGhpbiIsIGFyZykpIHsKQEAgLTY4Miw3ICs3MjcsNyBAQAogCX0KIAlpZiAoIWRlc3QpCiAJCXVzYWdlKGZldGNoX3BhY2tfdXNhZ2UpOwotCXBpZCA9IGdpdF9jb25uZWN0KGZkLCBkZXN0LCBleGVjKTsKKwlwaWQgPSBnaXRfY29ubmVjdChmZCwgZGVzdCwgdXBsb2FkcGFjayk7CiAJaWYgKHBpZCA8IDApCiAJCXJldHVybiAxOwogCWlmIChoZWFkcyAmJiBucl9oZWFkcykKZGlmZiAtLWdpdCBhL2dpdC1jaGVja291dC5zaCBiL2dpdC1jaGVja291dC5zaAppbmRleCA2NmU0MGI5Li4wYmFlODZlIDEwMDc1NQotLS0gYS9naXQtY2hlY2tvdXQuc2gKKysrIGIvZ2l0LWNoZWNrb3V0LnNoCkBAIC0xNTUsMTAgKzE1NSwxMCBAQAogCWRldGFjaGVkPSIkbmV3IgogCWlmIHRlc3QgLW4gIiRvbGRicmFuY2giCiAJdGhlbgotCQlkZXRhY2hfd2Fybj0id2FybmluZzogeW91IGFyZSBub3Qgb24gQU5ZIGJyYW5jaCBhbnltb3JlLgotSWYgeW91IG1lYW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggZnJvbSB0aGUgY29tbWl0LCB5b3UgbmVlZCAtYiB0bwotYXNzb2NpYXRlIGEgbmV3IGJyYW5jaCB3aXRoIHRoZSB3YW50ZWQgY2hlY2tvdXQuICBFeGFtcGxlOgotICBnaXQgY2hlY2tvdXQgLWIgPG5ld19icmFuY2hfbmFtZT4gJGFyZyIKKwkJZGV0YWNoX3dhcm49Ik5vdGU6IHlvdSBhcmUgbm90IG9uIEFOWSBicmFuY2ggYW55bW9yZS4KK0lmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggZnJvbSB0aGlzIGNoZWNrb3V0LCB5b3UgbWF5IGRvIHNvCisobm93IG9yIGxhdGVyKSBieSB1c2luZyAtYiB3aXRoIHRoZSBjaGVja291dCBjb21tYW5kIGFnYWluLiBFeGFtcGxlOgorICBnaXQgY2hlY2tvdXQgLWIgPG5ld19icmFuY2hfbmFtZT4iCiAJZmkKIGVsaWYgdGVzdCAteiAiJG9sZGJyYW5jaCIgJiYgdGVzdCAtbiAiJGJyYW5jaCIKIHRoZW4KQEAgLTIwMCwxNiArMjAwLDEyIEBACiAJIyBNYXRjaCB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIGRvIGEgdGhyZWUtd2F5LgogICAgIAlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSB8IGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1zdGRpbiAmJgogCXdvcms9YGdpdCB3cml0ZS10cmVlYCAmJgotCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSAkbmV3ICYmCi0JZ2l0IHJlYWQtdHJlZSAtbSAtdSAtLWFnZ3Jlc3NpdmUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSAkb2xkICRuZXcgJHdvcmsgfHwKLQlleGl0CisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11ICRuZXcgfHwgZXhpdAogCi0JaWYgcmVzdWx0PWBnaXQgd3JpdGUtdHJlZSAyPi9kZXYvbnVsbGAKLQl0aGVuCi0JICAgIGVjaG8gPiYyICJUcml2aWFsbHkgYXV0b21lcmdlZC4iCi0JZWxzZQotCSAgICBnaXQgbWVyZ2UtaW5kZXggLW8gZ2l0LW1lcmdlLW9uZS1maWxlIC1hCi0JZmkKKwlldmFsIEdJVEhFQURfJG5ldz0ke25ld19uYW1lOi0ke2JyYW5jaDotJG5ld319ICYmCisJZXZhbCBHSVRIRUFEXyR3b3JrPWxvY2FsICYmCisJZXhwb3J0IEdJVEhFQURfJG5ldyBHSVRIRUFEXyR3b3JrICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAkb2xkIC0tICRuZXcgJHdvcmsKIAogCSMgRG8gbm90IHJlZ2lzdGVyIHRoZSBjbGVhbmx5IG1lcmdlZCBwYXRocyBpbiB0aGUgaW5kZXggeWV0LgogCSMgdGhpcyBpcyBub3QgYSByZWFsIG1lcmdlIGJlZm9yZSBjb21taXR0aW5nLCBidXQganVzdCBjYXJyeWluZwpkaWZmIC0tZ2l0IGEvZ2l0LWNsb25lLnNoIGIvZ2l0LWNsb25lLnNoCmluZGV4IDBmN2JiYmYuLjRkZGZhNzcgMTAwNzU1Ci0tLSBhL2dpdC1jbG9uZS5zaAorKysgYi9naXQtY2xvbmUuc2gKQEAgLTM2LDcgKzM2LDcgQEAKIAljbG9uZV90bXA9IiRHSVRfRElSL2Nsb25lLXRtcCIgJiYKIAlta2RpciAtcCAiJGNsb25lX3RtcCIgfHwgZXhpdCAxCiAJaWYgWyAtbiAiJEdJVF9DVVJMX0ZUUF9OT19FUFNWIiAtbyBcCi0JCSJgZ2l0LXJlcG8tY29uZmlnIC0tYm9vbCBodHRwLm5vRVBTVmAiID0gdHJ1ZSBdOyB0aGVuCisJCSJgZ2l0LWNvbmZpZyAtLWJvb2wgaHR0cC5ub0VQU1ZgIiA9IHRydWUgXTsgdGhlbgogCQljdXJsX2V4dHJhX2FyZ3M9IiR7Y3VybF9leHRyYV9hcmdzfSAtLWRpc2FibGUtZXBzdiIKIAlmaQogCWh0dHBfZmV0Y2ggIiQxL2luZm8vcmVmcyIgIiRjbG9uZV90bXAvcmVmcyIgfHwKQEAgLTY2LDQ4ICs2Niw2IEBACiAJcm0gLWYgIiRHSVRfRElSL1JFTU9URV9IRUFEIgogfQogCi0jIFJlYWQgZ2l0LWZldGNoLXBhY2sgLWsgb3V0cHV0IGFuZCBzdG9yZSB0aGUgcmVtb3RlIGJyYW5jaGVzLgotY29weV9yZWZzPScKLXVzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Ci11c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGlybmFtZSk7Ci1teSAkZ2l0X2RpciA9ICRBUkdWWzBdOwotbXkgJHVzZV9zZXBhcmF0ZV9yZW1vdGUgPSAkQVJHVlsxXTsKLW15ICRvcmlnaW4gPSAkQVJHVlsyXTsKLQotbXkgJGJyYW5jaF90b3AgPSAoJHVzZV9zZXBhcmF0ZV9yZW1vdGUgPyAicmVtb3Rlcy8kb3JpZ2luIiA6ICJoZWFkcyIpOwotbXkgJHRhZ190b3AgPSAidGFncyI7Ci0KLXN1YiBzdG9yZSB7Ci0JbXkgKCRzaGExLCAkbmFtZSwgJHRvcCkgPSBAXzsKLQkkbmFtZSA9ICIkZ2l0X2Rpci9yZWZzLyR0b3AvJG5hbWUiOwotCW1rcGF0aChkaXJuYW1lKCRuYW1lKSk7Ci0Jb3BlbiBPLCAiPiIsICIkbmFtZSI7Ci0JcHJpbnQgTyAiJHNoYTFcbiI7Ci0JY2xvc2UgTzsKLX0KLQotb3BlbiBGSCwgIjwiLCAiJGdpdF9kaXIvQ0xPTkVfSEVBRCI7Ci13aGlsZSAoPEZIPikgewotCW15ICgkc2hhMSwgJG5hbWUpID0gL14oWzAtOWEtZl17NDB9KVxzKC4qKSQvOwotCW5leHQgaWYgKCRuYW1lID1+IC9cXlwxNzMvKTsKLQlpZiAoJG5hbWUgZXEgIkhFQUQiKSB7Ci0JCW9wZW4gTywgIj4iLCAiJGdpdF9kaXIvUkVNT1RFX0hFQUQiOwotCQlwcmludCBPICIkc2hhMVxuIjsKLQkJY2xvc2UgTzsKLQkJbmV4dDsKLQl9Ci0JaWYgKCRuYW1lID1+IHMvXnJlZnNcL2hlYWRzXC8vLykgewotCQlzdG9yZSgkc2hhMSwgJG5hbWUsICRicmFuY2hfdG9wKTsKLQkJbmV4dDsKLQl9Ci0JaWYgKCRuYW1lID1+IHMvXnJlZnNcL3RhZ3NcLy8vKSB7Ci0JCXN0b3JlKCRzaGExLCAkbmFtZSwgJHRhZ190b3ApOwotCQluZXh0OwotCX0KLX0KLWNsb3NlIEZIOwotJwotCiBxdWlldD0KIGxvY2FsPW5vCiB1c2VfbG9jYWw9bm8KQEAgLTE2Myw3ICsxMjEsOSBAQAogCTEsLXV8MSwtLXVwbG9hZC1wYWNrKSB1c2FnZSA7OwogCSosLXV8KiwtLXVwbG9hZC1wYWNrKQogCQlzaGlmdAotCQl1cGxvYWRfcGFjaz0iLS1leGVjPSQxIiA7OworCQl1cGxvYWRfcGFjaz0iLS11cGxvYWQtcGFjaz0kMSIgOzsKKwkqLC0tdXBsb2FkLXBhY2s9KikKKwkJdXBsb2FkX3BhY2s9LS11cGxvYWQtcGFjaz0kKGV4cHIgInokMSIgOiAnei1bXj1dKj1cKC4qXCknKSA7OwogCTEsLS1kZXB0aCkgdXNhZ2U7OwogCSosLS1kZXB0aCkKIAkJc2hpZnQKQEAgLTMzMCw4ICsyOTAsMjkgQEAKIGlmIHRlc3QgLWYgIiRHSVRfRElSL0NMT05FX0hFQUQiCiB0aGVuCiAJIyBSZWFkIGdpdC1mZXRjaC1wYWNrIC1rIG91dHB1dCBhbmQgc3RvcmUgdGhlIHJlbW90ZSBicmFuY2hlcy4KLQlAQFBFUkxAQCAtZSAiJGNvcHlfcmVmcyIgIiRHSVRfRElSIiAiJHVzZV9zZXBhcmF0ZV9yZW1vdGUiICIkb3JpZ2luIiB8fAotCWV4aXQKKwlpZiBbIC1uICIkdXNlX3NlcGFyYXRlX3JlbW90ZSIgXQorCXRoZW4KKwkJYnJhbmNoX3RvcD0icmVtb3Rlcy8kb3JpZ2luIgorCWVsc2UKKwkJYnJhbmNoX3RvcD0iaGVhZHMiCisJZmkKKwl0YWdfdG9wPSJ0YWdzIgorCXdoaWxlIHJlYWQgc2hhMSBuYW1lCisJZG8KKwkJY2FzZSAiJG5hbWUiIGluCisJCSonXnt9JykKKwkJCWNvbnRpbnVlIDs7CisJCUhFQUQpCisJCQlkZXN0bmFtZT0iUkVNT1RFX0hFQUQiIDs7CisJCXJlZnMvaGVhZHMvKikKKwkJCWRlc3RuYW1lPSJyZWZzLyRicmFuY2hfdG9wLyR7bmFtZSNyZWZzL2hlYWRzL30iIDs7CisJCXJlZnMvdGFncy8qKQorCQkJZGVzdG5hbWU9InJlZnMvJHRhZ190b3AvJHtuYW1lI3JlZnMvdGFncy99IiA7OworCQkqKQorCQkJY29udGludWUgOzsKKwkJZXNhYworCQlnaXQtdXBkYXRlLXJlZiAtbSAiY2xvbmU6IGZyb20gJHJlcG8iICIkZGVzdG5hbWUiICIkc2hhMSIgIiIKKwlkb25lIDwgIiRHSVRfRElSL0NMT05FX0hFQUQiCiBmaQogCiBjZCAiJEQiIHx8IGV4aXQKQEAgLTM4NCwxNyArMzY1LDE3IEBACiAJCWdpdC11cGRhdGUtcmVmIEhFQUQgIiRoZWFkX3NoYTEiICYmCiAKIAkJIyBVcHN0cmVhbSBVUkwKLQkJZ2l0LXJlcG8tY29uZmlnIHJlbW90ZS4iJG9yaWdpbiIudXJsICIkcmVwbyIgJiYKKwkJZ2l0LWNvbmZpZyByZW1vdGUuIiRvcmlnaW4iLnVybCAiJHJlcG8iICYmCiAKIAkJIyBTZXQgdXAgdGhlIG1hcHBpbmdzIHRvIHRyYWNrIHRoZSByZW1vdGUgYnJhbmNoZXMuCi0JCWdpdC1yZXBvLWNvbmZpZyByZW1vdGUuIiRvcmlnaW4iLmZldGNoIFwKKwkJZ2l0LWNvbmZpZyByZW1vdGUuIiRvcmlnaW4iLmZldGNoIFwKIAkJCSIrcmVmcy9oZWFkcy8qOiRyZW1vdGVfdG9wLyoiICdeJCcgJiYKIAkJcm0gLWYgInJlZnMvcmVtb3Rlcy8kb3JpZ2luL0hFQUQiCiAJCWdpdC1zeW1ib2xpYy1yZWYgInJlZnMvcmVtb3Rlcy8kb3JpZ2luL0hFQUQiIFwKIAkJCSJyZWZzL3JlbW90ZXMvJG9yaWdpbi8kaGVhZF9wb2ludHNfYXQiICYmCiAKLQkJZ2l0LXJlcG8tY29uZmlnIGJyYW5jaC4iJGhlYWRfcG9pbnRzX2F0Ii5yZW1vdGUgIiRvcmlnaW4iICYmCi0JCWdpdC1yZXBvLWNvbmZpZyBicmFuY2guIiRoZWFkX3BvaW50c19hdCIubWVyZ2UgInJlZnMvaGVhZHMvJGhlYWRfcG9pbnRzX2F0IgorCQlnaXQtY29uZmlnIGJyYW5jaC4iJGhlYWRfcG9pbnRzX2F0Ii5yZW1vdGUgIiRvcmlnaW4iICYmCisJCWdpdC1jb25maWcgYnJhbmNoLiIkaGVhZF9wb2ludHNfYXQiLm1lcmdlICJyZWZzL2hlYWRzLyRoZWFkX3BvaW50c19hdCIKIAllc2FjCiAKIAljYXNlICIkbm9fY2hlY2tvdXQiIGluCmRpZmYgLS1naXQgYS9naXQtY29tbWl0LnNoIGIvZ2l0LWNvbW1pdC5zaAppbmRleCBlMjM5MThjLi5kYzBmYzNiIDEwMDc1NQotLS0gYS9naXQtY29tbWl0LnNoCisrKyBiL2dpdC1jb21taXQuc2gKQEAgLTMsNyArMyw3IEBACiAjIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcwogIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KIAotVVNBR0U9J1stYV0gWy1zXSBbLXZdIFstLW5vLXZlcmlmeV0gWy1tIDxtZXNzYWdlPiB8IC1GIDxsb2dmaWxlPiB8ICgtQ3wtYykgPGNvbW1pdD5dIFstdV0gWy0tYW1lbmRdIFstZV0gWy0tYXV0aG9yIDxhdXRob3I+XSBbWy1pIHwgLW9dIDxwYXRoPi4uLl0nCitVU0FHRT0nWy1hXSBbLXNdIFstdl0gWy0tbm8tdmVyaWZ5XSBbLW0gPG1lc3NhZ2U+IHwgLUYgPGxvZ2ZpbGU+IHwgKC1DfC1jKSA8Y29tbWl0PiB8IC0tYW1lbmRdIFstdV0gWy1lXSBbLS1hdXRob3IgPGF1dGhvcj5dIFtbLWkgfCAtb10gPHBhdGg+Li4uXScKIFNVQkRJUkVDVE9SWV9PSz1ZZXMKIC4gZ2l0LXNoLXNldHVwCiByZXF1aXJlX3dvcmtfdHJlZQpAQCAtMjg0LDkgKzI4NCw5IEBACiAKIGNhc2UgIiRsb2dfZ2l2ZW4iIGluCiB0dCopCi0JZGllICJPbmx5IG9uZSBvZiAtYy8tQy8tRiBjYW4gYmUgdXNlZC4iIDs7CisJZGllICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWFtZW5kIGNhbiBiZSB1c2VkLiIgOzsKICp0bSp8Km10KikKLQlkaWUgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iIDs7CisJZGllICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYvLS1hbWVuZC4iIDs7CiBlc2FjCiAKIGNhc2UgIiQjLCRhbHNvLCRvbmx5LCRhbWVuZCIgaW4KQEAgLTQyOSw3ICs0MjksNyBAQAogCWZpCiBlbGlmIHRlc3QgIiR1c2VfY29tbWl0IiAhPSAiIgogdGhlbgotCWVuY29kaW5nPSQoZ2l0IHJlcG8tY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgfHwgZWNobyBVVEYtOCkKKwllbmNvZGluZz0kKGdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyB8fCBlY2hvIFVURi04KQogCWdpdCBzaG93IC1zIC0tcHJldHR5PXJhdyAtLWVuY29kaW5nPSIkZW5jb2RpbmciICIkdXNlX2NvbW1pdCIgfAogCXNlZCAtZSAnMSwvXiQvZCcgLWUgJ3MvXiAgICAvLycKIGVsaWYgdGVzdCAtZiAiJEdJVF9ESVIvTUVSR0VfTVNHIgpAQCAtNDQyLDggKzQ0MiwxMSBAQAogCiBjYXNlICIkc2lnbm9mZiIgaW4KIHQpCisJbmVlZF9ibGFua19iZWZvcmVfc2lnbm9mZj0KKwl0YWlsIC1uIDEgIiRHSVRfRElSIi9DT01NSVRfRURJVE1TRyB8CisJZ3JlcCAnU2lnbmVkLW9mZi1ieTonID4vZGV2L251bGwgfHwgbmVlZF9ibGFua19iZWZvcmVfc2lnbm9mZj15ZXMKIAl7Ci0JCWVjaG8KKwkJdGVzdCAteiAiJG5lZWRfYmxhbmtfYmVmb3JlX3NpZ25vZmYiIHx8IGVjaG8KIAkJZ2l0LXZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwgc2VkIC1lICcKIAkJCXMvPi4qLz4vCiAJCQlzL14vU2lnbmVkLW9mZi1ieTogLwpAQCAtNDYyLDE1ICs0NjUsNyBAQAogZmkgPj4iJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHCiAKICMgQXV0aG9yCi1pZiB0ZXN0ICcnICE9ICIkZm9yY2VfYXV0aG9yIgotdGhlbgotCUdJVF9BVVRIT1JfTkFNRT1gZXhwciAieiRmb3JjZV9hdXRob3IiIDogJ3pcKC4qW14gXVwpICo8LionYCAmJgotCUdJVF9BVVRIT1JfRU1BSUw9YGV4cHIgInokZm9yY2VfYXV0aG9yIiA6ICcuKlwoPC4qXCknYCAmJgotCXRlc3QgJycgIT0gIiRHSVRfQVVUSE9SX05BTUUiICYmCi0JdGVzdCAnJyAhPSAiJEdJVF9BVVRIT1JfRU1BSUwiIHx8Ci0JZGllICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgotCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTAotZWxpZiB0ZXN0ICcnICE9ICIkdXNlX2NvbW1pdCIKK2lmIHRlc3QgJycgIT0gIiR1c2VfY29tbWl0IgogdGhlbgogCXBpY2tfYXV0aG9yX3NjcmlwdD0nCiAJL15hdXRob3IgL3sKQEAgLTQ5Myw3ICs0ODgsNyBAQAogCQlxCiAJfQogCScKLQllbmNvZGluZz0kKGdpdCByZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIHx8IGVjaG8gVVRGLTgpCisJZW5jb2Rpbmc9JChnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgfHwgZWNobyBVVEYtOCkKIAlzZXRfYXV0aG9yX2Vudj1gZ2l0IHNob3cgLXMgLS1wcmV0dHk9cmF3IC0tZW5jb2Rpbmc9IiRlbmNvZGluZyIgIiR1c2VfY29tbWl0IiB8CiAJTEFORz1DIExDX0FMTD1DIHNlZCAtbmUgIiRwaWNrX2F1dGhvcl9zY3JpcHQiYAogCWV2YWwgIiRzZXRfYXV0aG9yX2VudiIKQEAgLTUwMSw2ICs0OTYsMTUgQEAKIAlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTAogCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUKIGZpCitpZiB0ZXN0ICcnICE9ICIkZm9yY2VfYXV0aG9yIgordGhlbgorCUdJVF9BVVRIT1JfTkFNRT1gZXhwciAieiRmb3JjZV9hdXRob3IiIDogJ3pcKC4qW14gXVwpICo8LionYCAmJgorCUdJVF9BVVRIT1JfRU1BSUw9YGV4cHIgInokZm9yY2VfYXV0aG9yIiA6ICcuKlwoPC4qXCknYCAmJgorCXRlc3QgJycgIT0gIiRHSVRfQVVUSE9SX05BTUUiICYmCisJdGVzdCAnJyAhPSAiJEdJVF9BVVRIT1JfRU1BSUwiIHx8CisJZGllICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTAorZmkKIAogUEFSRU5UUz0iLXAgSEVBRCIKIGlmIHRlc3QgLXogIiRpbml0aWFsX2NvbW1pdCIKZGlmZiAtLWdpdCBhL2dpdC1jb21wYXQtdXRpbC5oIGIvZ2l0LWNvbXBhdC11dGlsLmgKaW5kZXggODc4MWU4ZS4uYzFiY2IwMCAxMDA2NDQKLS0tIGEvZ2l0LWNvbXBhdC11dGlsLmgKKysrIGIvZ2l0LWNvbXBhdC11dGlsLmgKQEAgLTE1LDggKzE1LDkgQEAKICNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZ2xpYmMyIGFuZCBBSVggNS4zTCBuZWVkIDUwMCwgT3BlbkJTRCBuZWVkcyA2MDAgZm9yIFNfSVNMTksoKSAqLwogI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEgLyogQUlYIDUuM0wgbmVlZHMgdGhpcyAqLwogI2VuZGlmCi0jZGVmaW5lIF9HTlVfU09VUkNFCi0jZGVmaW5lIF9CU0RfU09VUkNFCisjZGVmaW5lIF9BTExfU09VUkNFIDEKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2RlZmluZSBfQlNEX1NPVVJDRSAxCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNDUsNyArNDYsMTAgQEAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNpbmNsdWRlIDxuZXRkYi5oPgogI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjdW5kZWYgX0FMTF9TT1VSQ0UgLyogQUlYIDUuM0wgZGVmaW5lcyBhIHN0cnVjdCBsaXN0IHdpdGggX0FMTF9TT1VSQ0UuICovCiAjaW5jbHVkZSA8Z3JwLmg+CisjZGVmaW5lIF9BTExfU09VUkNFIDEKIAogI2lmbmRlZiBOT19JQ09OVgogI2luY2x1ZGUgPGljb252Lmg+CmRpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LnBlcmwgYi9naXQtY3ZzaW1wb3J0LnBlcmwKaW5kZXggMzVlZjBjMC4uNmM5ZmJmZSAxMDA3NTUKLS0tIGEvZ2l0LWN2c2ltcG9ydC5wZXJsCisrKyBiL2dpdC1jdnNpbXBvcnQucGVybApAQCAtODUsNyArODUsNyBAQAogCWNsb3NlICgkZik7CiB9CiAKLWdldG9wdHMoImhpdm1rdW86ZDpwOkM6ejpzOk06UDpBOlM6TDoiKSBvciB1c2FnZSgpOworZ2V0b3B0cygiaGFpdm1rdW86ZDpwOkM6ejpzOk06UDpBOlM6TDoiKSBvciB1c2FnZSgpOwogdXNhZ2UgaWYgJG9wdF9oOwogCiBAQVJHViA8PSAxIG9yIHVzYWdlKCk7CmRpZmYgLS1naXQgYS9naXQtY3Zzc2VydmVyLnBlcmwgYi9naXQtY3Zzc2VydmVyLnBlcmwKaW5kZXggYTMzYTg3Ni4uOTM3MTc4OCAxMDA3NTUKLS0tIGEvZ2l0LWN2c3NlcnZlci5wZXJsCisrKyBiL2dpdC1jdnNzZXJ2ZXIucGVybApAQCAtMTcyLDExICsxNzIsMTEgQEAKICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBteSBAZ2l0dmFycyA9IGBnaXQtcmVwby1jb25maWcgLWxgOworICAgIG15IEBnaXR2YXJzID0gYGdpdC1jb25maWcgLWxgOwogICAgIGlmICgkPykgewotICAgICAgIHByaW50ICJFIHByb2JsZW1zIGV4ZWN1dGluZyBnaXQtcmVwby1jb25maWcgb24gdGhlIHNlcnZlciAtLSB0aGlzIGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5IG9yIHRoZSBQQVRIIGlzIG5vdCBzZXQgY29ycmVjdGx5LlxuIjsKKyAgICAgICBwcmludCAiRSBwcm9ibGVtcyBleGVjdXRpbmcgZ2l0LWNvbmZpZyBvbiB0aGUgc2VydmVyIC0tIHRoaXMgaXMgbm90IGEgZ2l0IHJlcG9zaXRvcnkgb3IgdGhlIFBBVEggaXMgbm90IHNldCBjb3JyZWN0bHkuXG4iOwogICAgICAgICBwcmludCAiRSBcbiI7Ci0gICAgICAgIHByaW50ICJlcnJvciAxIC0gcHJvYmxlbSBleGVjdXRpbmcgZ2l0LXJlcG8tY29uZmlnXG4iOworICAgICAgICBwcmludCAiZXJyb3IgMSAtIHByb2JsZW0gZXhlY3V0aW5nIGdpdC1jb25maWdcbiI7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGZvcmVhY2ggbXkgJGxpbmUgKCBAZ2l0dmFycyApCkBAIC04NzYsOSArODc2LDkgQEAKICAgICAgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKIAkJbmV4dDsKIAkgICAgfQotCSAgICBlbHNpZiAoICFkZWZpbmVkKCR3cmV2KSB8fCAkd3JldiA9PSAwICkKKwkgICAgZWxzaWYgKCAoIWRlZmluZWQoJHdyZXYpIHx8ICR3cmV2ID09IDApICYmICghZGVmaW5lZCgkbWV0YS0+e3JldmlzaW9ufSkgfHwgJG1ldGEtPntyZXZpc2lvbn0gPT0gMCkgKQogCSAgICB7Ci0JICAgICAgICAkbG9nLT5pbmZvKCJUZWxsIHRoZSBjbGllbnQgdGhlIGZpbGUgd2lsbCBiZSBhZGRlZCIpOworCSAgICAgICAgJGxvZy0+aW5mbygiVGVsbCB0aGUgY2xpZW50IHRoZSBmaWxlIGlzIHNjaGVkdWxlZCBmb3IgYWRkaXRpb24iKTsKIAkJcHJpbnQgIk1UIHRleHQgQSBcbiI7CiAgICAgICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKICAgICAgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKQEAgLTg4Niw3ICs4ODYsNyBAQAogCiAJICAgIH0KIAkgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgJGxvZy0+aW5mbygiVXBkYXRpbmcgJyRmaWxlbmFtZScgJHdyZXYiKTsKKyAgICAgICAgICAgICAgICAkbG9nLT5pbmZvKCJVcGRhdGluZyAnJGZpbGVuYW1lJyB0byAiLiRtZXRhLT57cmV2aXNpb259KTsKICAgICAgICAgICAgICAgICBwcmludCAiTVQgK3VwZGF0ZWRcbiI7CiAgICAgICAgICAgICAgICAgcHJpbnQgIk1UIHRleHQgVSBcbiI7CiAgICAgICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKZGlmZiAtLWdpdCBhL2dpdC1mZXRjaC5zaCBiL2dpdC1mZXRjaC5zaAppbmRleCA4N2I5NDBiLi4zNTdjYWMyIDEwMDc1NQotLS0gYS9naXQtZmV0Y2guc2gKKysrIGIvZ2l0LWZldGNoLnNoCkBAIC0yMiw3ICsyMiw2IEBACiB2ZXJib3NlPQogdXBkYXRlX2hlYWRfb2s9CiBleGVjPQotdXBsb2FkX3BhY2s9CiBrZWVwPQogc2hhbGxvd19kZXB0aD0KIHdoaWxlIGNhc2UgIiQjIiBpbiAwKSBicmVhayA7OyBlc2FjCkBAIC0zNCw4ICszMywxMiBAQAogCS0tdXBsfC0tdXBsb3wtLXVwbG9hfC0tdXBsb2FkfC0tdXBsb2FkLXwtLXVwbG9hZC1wfFwKIAktLXVwbG9hZC1wYXwtLXVwbG9hZC1wYWN8LS11cGxvYWQtcGFjaykKIAkJc2hpZnQKLQkJZXhlYz0iLS1leGVjPSQxIiAKLQkJdXBsb2FkX3BhY2s9Ii11ICQxIgorCQlleGVjPSItLXVwbG9hZC1wYWNrPSQxIgorCQk7OworCS0tdXBsPSp8LS11cGxvPSp8LS11cGxvYT0qfC0tdXBsb2FkPSp8XAorCS0tdXBsb2FkLT0qfC0tdXBsb2FkLXA9KnwtLXVwbG9hZC1wYT0qfC0tdXBsb2FkLXBhYz0qfC0tdXBsb2FkLXBhY2s9KikKKwkJZXhlYz0tLXVwbG9hZC1wYWNrPSQoZXhwciAieiQxIiA6ICd6LVtePV0qPVwoLipcKScpCisJCXNoaWZ0CiAJCTs7CiAJLWZ8LS1mfC0tZm98LS1mb3J8LS1mb3JjfC0tZm9yY2UpCiAJCWZvcmNlPXQKQEAgLTgyLDYgKzg1LDEyIEBACiAJc2V0IHggJG9yaWdpbiA7IHNoaWZ0IDs7CiBlc2FjCiAKK2lmIHRlc3QgLXogIiRleGVjIgordGhlbgorCSMgTm8gY29tbWFuZCBsaW5lIG92ZXJyaWRlIGFuZCB3ZSBoYXZlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSByZW1vdGUuCisJZXhlYz0iLS11cGxvYWQtcGFjaz0kKGdldF91cGxvYWRwYWNrICQxKSIKK2ZpCisKIHJlbW90ZV9uaWNrPSIkMSIKIHJlbW90ZT0kKGdldF9yZW1vdGVfdXJsICIkQCIpCiByZWZzPQpAQCAtOTQsNyArMTAzLDcgQEAKIGZpCiAKICMgR2xvYmFsIHRoYXQgaXMgcmV1c2VkIGxhdGVyCi1sc19yZW1vdGVfcmVzdWx0PSQoZ2l0IGxzLXJlbW90ZSAkdXBsb2FkX3BhY2sgIiRyZW1vdGUiKSB8fAorbHNfcmVtb3RlX3Jlc3VsdD0kKGdpdCBscy1yZW1vdGUgJGV4ZWMgIiRyZW1vdGUiKSB8fAogCWRpZSAiQ2Fubm90IGdldCB0aGUgcmVwb3NpdG9yeSBzdGF0ZSBmcm9tICRyZW1vdGUiCiAKIGFwcGVuZF9mZXRjaF9oZWFkICgpIHsKQEAgLTMxMiw3ICszMjEsNyBAQAogCSAgICAgIGN1cmxfZXh0cmFfYXJncz0iLWsiCiAJICBmaQogCSAgaWYgWyAtbiAiJEdJVF9DVVJMX0ZUUF9OT19FUFNWIiAtbyBcCi0JCSJgZ2l0LXJlcG8tY29uZmlnIC0tYm9vbCBodHRwLm5vRVBTVmAiID0gdHJ1ZSBdOyB0aGVuCisJCSJgZ2l0LWNvbmZpZyAtLWJvb2wgaHR0cC5ub0VQU1ZgIiA9IHRydWUgXTsgdGhlbgogCSAgICAgIG5vZXBzdl9vcHQ9Ii0tZGlzYWJsZS1lcHN2IgogCSAgZmkKIApkaWZmIC0tZ2l0IGEvZ2l0LWdjLnNoIGIvZ2l0LWdjLnNoCmluZGV4IDZkZTU1ZjcuLjNlOGM4N2MgMTAwNzU1Ci0tLSBhL2dpdC1nYy5zaAorKysgYi9naXQtZ2Muc2gKQEAgLTQsMTIgKzQsMjYgQEAKICMKICMgQ2xlYW51cCB1bnJlYWNoYWJsZSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIHJlcG9zaXRvcnkuCiAKLVVTQUdFPScnCitVU0FHRT0nZ2l0LWdjIFstLXBydW5lXScKIFNVQkRJUkVDVE9SWV9PSz1ZZXMKIC4gZ2l0LXNoLXNldHVwCiAKK25vX3BydW5lPToKK3doaWxlIGNhc2UgJCMgaW4gMCkgYnJlYWsgOzsgZXNhYworZG8KKwljYXNlICIkMSIgaW4KKwktLXBydW5lKQorCQlub19wcnVuZT0KKwkJOzsKKwktLSkKKwkJdXNhZ2UKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKwogZ2l0LXBhY2stcmVmcyAtLXBydW5lICYmCiBnaXQtcmVmbG9nIGV4cGlyZSAtLWFsbCAmJgogZ2l0LXJlcGFjayAtYSAtZCAtbCAmJgotZ2l0LXBydW5lICYmCiskbm9fcHJ1bmUgZ2l0LXBydW5lICYmCiBnaXQtcmVyZXJlIGdjIHx8IGV4aXQKZGlmZiAtLWdpdCBhL2dpdC1pbnN0YXdlYi5zaCBiL2dpdC1pbnN0YXdlYi5zaAppbmRleCA4MGFkYzgzLi5jYmM3NDE4IDEwMDc1NQotLS0gYS9naXQtaW5zdGF3ZWIuc2gKKysrIGIvZ2l0LWluc3Rhd2ViLnNoCkBAIC0xNSwxMSArMTUsMTEgQEAKIAlmcWdpdGRpcj0iJFBXRC8kR0lUX0RJUiIgOzsKIGVzYWMKIAotbG9jYWw9ImBnaXQgcmVwby1jb25maWcgLS1ib29sIC0tZ2V0IGluc3Rhd2ViLmxvY2FsYCIKLWh0dHBkPSJgZ2l0IHJlcG8tY29uZmlnIC0tZ2V0IGluc3Rhd2ViLmh0dHBkYCIKLWJyb3dzZXI9ImBnaXQgcmVwby1jb25maWcgLS1nZXQgaW5zdGF3ZWIuYnJvd3NlcmAiCi1wb3J0PWBnaXQgcmVwby1jb25maWcgLS1nZXQgaW5zdGF3ZWIucG9ydGAKLW1vZHVsZV9wYXRoPSJgZ2l0IHJlcG8tY29uZmlnIC0tZ2V0IGluc3Rhd2ViLm1vZHVsZXBhdGhgIgorbG9jYWw9ImBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBpbnN0YXdlYi5sb2NhbGAiCitodHRwZD0iYGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIuaHR0cGRgIgorYnJvd3Nlcj0iYGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIuYnJvd3NlcmAiCitwb3J0PWBnaXQgY29uZmlnIC0tZ2V0IGluc3Rhd2ViLnBvcnRgCittb2R1bGVfcGF0aD0iYGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIubW9kdWxlcGF0aGAiCiAKIGNvbmY9JEdJVF9ESVIvZ2l0d2ViL2h0dHBkLmNvbmYKIApkaWZmIC0tZ2l0IGEvZ2l0LWxvc3QtZm91bmQuc2ggYi9naXQtbG9zdC1mb3VuZC5zaAppbmRleCBiOTI4ZjJjLi45MzYwODA0IDEwMDc1NQotLS0gYS9naXQtbG9zdC1mb3VuZC5zaAorKysgYi9naXQtbG9zdC1mb3VuZC5zaApAQCAtMTIsNyArMTIsNyBAQAogbGFmPSIkR0lUX0RJUi9sb3N0LWZvdW5kIgogcm0gLWZyICIkbGFmIiAmJiBta2RpciAtcCAiJGxhZi9jb21taXQiICIkbGFmL290aGVyIiB8fCBleGl0CiAKLWdpdCBmc2NrLW9iamVjdHMgLS1mdWxsIHwKK2dpdCBmc2NrIC0tZnVsbCB8CiB3aGlsZSByZWFkIGRhbmdsaW5nIHR5cGUgc2hhMQogZG8KIAljYXNlICIkZGFuZ2xpbmciIGluCmRpZmYgLS1naXQgYS9naXQtbHMtcmVtb3RlLnNoIGIvZ2l0LWxzLXJlbW90ZS5zaAppbmRleCAwM2I2MjRlLi44ZWE1YzVlIDEwMDc1NQotLS0gYS9naXQtbHMtcmVtb3RlLnNoCisrKyBiL2dpdC1scy1yZW1vdGUuc2gKQEAgLTIzLDcgKzIzLDExIEBACiAgIC11fC0tdXwtLXVwfC0tdXBsfC0tdXBsb2F8LS11cGxvYWR8LS11cGxvYWQtfC0tdXBsb2FkLXB8LS11cGxvYWQtcGF8XAogICAtLXVwbG9hZC1wYWN8LS11cGxvYWQtcGFjaykKIAlzaGlmdAotCWV4ZWM9Ii0tZXhlYz0kMSIKKwlleGVjPSItLXVwbG9hZC1wYWNrPSQxIgorCXNoaWZ0OzsKKyAgLXU9KnwtLXU9KnwtLXVwPSp8LS11cGw9KnwtLXVwbG89KnwtLXVwbG9hPSp8LS11cGxvYWQ9KnxcCisgIC0tdXBsb2FkLT0qfC0tdXBsb2FkLXA9KnwtLXVwbG9hZC1wYT0qfC0tdXBsb2FkLXBhYz0qfC0tdXBsb2FkLXBhY2s9KikKKwlleGVjPS0tdXBsb2FkLXBhY2s9JChleHByICJ6JDEiIDogJ3otW149XSo9XCguKlwpJykKIAlzaGlmdDs7CiAgIC0tKQogICBzaGlmdDsgYnJlYWsgOzsKQEAgLTU0LDcgKzU4LDcgQEAKICAgICAgICAgICAgIGN1cmxfZXh0cmFfYXJncz0iLWsiCiAgICAgICAgIGZpCiAJaWYgWyAtbiAiJEdJVF9DVVJMX0ZUUF9OT19FUFNWIiAtbyBcCi0JCSJgZ2l0LXJlcG8tY29uZmlnIC0tYm9vbCBodHRwLm5vRVBTVmAiID0gdHJ1ZSBdOyB0aGVuCisJCSJgZ2l0LWNvbmZpZyAtLWJvb2wgaHR0cC5ub0VQU1ZgIiA9IHRydWUgXTsgdGhlbgogCQljdXJsX2V4dHJhX2FyZ3M9IiR7Y3VybF9leHRyYV9hcmdzfSAtLWRpc2FibGUtZXBzdiIKIAlmaQogCWN1cmwgLW5zZiAkY3VybF9leHRyYV9hcmdzIC0taGVhZGVyICJQcmFnbWE6IG5vLWNhY2hlIiAiJHBlZWtfcmVwby9pbmZvL3JlZnMiIHx8CmRpZmYgLS1naXQgYS9naXQtbWVyZ2Uuc2ggYi9naXQtbWVyZ2Uuc2gKaW5kZXggN2I1OTAyNi4uMDRhNWViMCAxMDA3NTUKLS0tIGEvZ2l0LW1lcmdlLnNoCisrKyBiL2dpdC1tZXJnZS5zaApAQCAtNyw3ICs3LDYgQEAKIAogU1VCRElSRUNUT1JZX09LPVllcwogLiBnaXQtc2gtc2V0dXAKLXNldF9yZWZsb2dfYWN0aW9uICJtZXJnZSAkKiIKIHJlcXVpcmVfd29ya190cmVlCiBjZF90b190b3BsZXZlbAogCkBAIC0yMTcsNiArMjE2LDcgQEAKIAogIyBBbGwgdGhlIHJlc3QgYXJlIHJlbW90ZSBoZWFkcwogdGVzdCAiJCMiID0gMCAmJiB1c2FnZSA7IyB3ZSBuZWVkIGF0IGxlYXN0IG9uZSByZW1vdGUgaGVhZC4KK3NldF9yZWZsb2dfYWN0aW9uICJtZXJnZSAkKiIKIAogcmVtb3RlaGVhZHM9CiBmb3IgcmVtb3RlCkBAIC0yMzMsNyArMjMzLDcgQEAKICcnKQogCWNhc2UgIiQjIiBpbgogCTEpCi0JCXZhcj0iYGdpdC1yZXBvLWNvbmZpZyAtLWdldCBwdWxsLnR3b2hlYWRgIgorCQl2YXI9ImBnaXQtY29uZmlnIC0tZ2V0IHB1bGwudHdvaGVhZGAiCiAJCWlmIHRlc3QgLW4gIiR2YXIiCiAJCXRoZW4KIAkJCXVzZV9zdHJhdGVnaWVzPSIkdmFyIgpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCQl1c2Vfc3RyYXRlZ2llcz0iJGRlZmF1bHRfdHdvaGVhZF9zdHJhdGVnaWVzIgogCQlmaSA7OwogCSopCi0JCXZhcj0iYGdpdC1yZXBvLWNvbmZpZyAtLWdldCBwdWxsLm9jdG9wdXNgIgorCQl2YXI9ImBnaXQtY29uZmlnIC0tZ2V0IHB1bGwub2N0b3B1c2AiCiAJCWlmIHRlc3QgLW4gIiR2YXIiCiAJCXRoZW4KIAkJCXVzZV9zdHJhdGVnaWVzPSIkdmFyIgpkaWZmIC0tZ2l0IGEvZ2l0LXA0aW1wb3J0LnB5IGIvZ2l0LXA0aW1wb3J0LnB5CmluZGV4IDVjNTZjYWMuLjYwYTc1OGIgMTAwNjQ0Ci0tLSBhL2dpdC1wNGltcG9ydC5weQorKysgYi9naXQtcDRpbXBvcnQucHkKQEAgLTE5MywxMyArMTkzLDEzIEBACiAKICAgICBkZWYgZ2V0X2NvbmZpZyhzZWxmLCB2YXJpYWJsZSk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdpdCgicmVwby1jb25maWcgLS1nZXQgJXMiICUgdmFyaWFibGUpWzBdLnJzdHJpcCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5naXQoImNvbmZpZyAtLWdldCAlcyIgJSB2YXJpYWJsZSlbMF0ucnN0cmlwKCkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBzZXRfY29uZmlnKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZSk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZ2l0KCJyZXBvLWNvbmZpZyAlcyAlcyIlKHZhcmlhYmxlLCB2YWx1ZSkgKQorICAgICAgICAgICAgc2VsZi5naXQoImNvbmZpZyAlcyAlcyIlKHZhcmlhYmxlLCB2YWx1ZSkgKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBkaWUoIkNvdWxkIG5vdCBzZXQgJXMgdG8gIiAlIHZhcmlhYmxlLCB2YWx1ZSkKIApkaWZmIC0tZ2l0IGEvZ2l0LXBhcnNlLXJlbW90ZS5zaCBiL2dpdC1wYXJzZS1yZW1vdGUuc2gKaW5kZXggZDJlNGMyYi4uM2U3ODNiNyAxMDA3NTUKLS0tIGEvZ2l0LXBhcnNlLXJlbW90ZS5zaAorKysgYi9naXQtcGFyc2UtcmVtb3RlLnNoCkBAIC0xMCw3ICsxMCw3IEBACiAJCWVjaG8gJycKIAkJOzsKIAkqKQotCQlpZiB0ZXN0ICIkKGdpdC1yZXBvLWNvbmZpZyAtLWdldCAicmVtb3RlLiQxLnVybCIpIgorCQlpZiB0ZXN0ICIkKGdpdC1jb25maWcgLS1nZXQgInJlbW90ZS4kMS51cmwiKSIKIAkJdGhlbgogCQkJZWNobyBjb25maWcKIAkJZWxpZiB0ZXN0IC1mICIkR0lUX0RJUi9yZW1vdGVzLyQxIgpAQCAtMzIsNyArMzIsNyBAQAogCQllY2hvICIkMSIKIAkJOzsKIAljb25maWcpCi0JCWdpdC1yZXBvLWNvbmZpZyAtLWdldCAicmVtb3RlLiQxLnVybCIKKwkJZ2l0LWNvbmZpZyAtLWdldCAicmVtb3RlLiQxLnVybCIKIAkJOzsKIAlyZW1vdGVzKQogCQlzZWQgLW5lICcvXlVSTDogKi97CkBAIC00OSw4ICs0OSw4IEBACiB9CiAKIGdldF9kZWZhdWx0X3JlbW90ZSAoKSB7Ci0JY3Vycl9icmFuY2g9JChnaXQtc3ltYm9saWMtcmVmIEhFQUQgfCBzZWQgLWUgJ3N8XnJlZnMvaGVhZHMvfHwnKQotCW9yaWdpbj0kKGdpdC1yZXBvLWNvbmZpZyAtLWdldCAiYnJhbmNoLiRjdXJyX2JyYW5jaC5yZW1vdGUiKQorCWN1cnJfYnJhbmNoPSQoZ2l0LXN5bWJvbGljLXJlZiAtcSBIRUFEIHwgc2VkIC1lICdzfF5yZWZzL2hlYWRzL3x8JykKKwlvcmlnaW49JChnaXQtY29uZmlnIC0tZ2V0ICJicmFuY2guJGN1cnJfYnJhbmNoLnJlbW90ZSIpCiAJZWNobyAke29yaWdpbjotb3JpZ2lufQogfQogCkBAIC02MCw3ICs2MCw3IEBACiAJJycgfCBicmFuY2hlcykKIAkJOzsgIyBubyBkZWZhdWx0IHB1c2ggbWFwcGluZywganVzdCBzZW5kIG1hdGNoaW5nIHJlZnMuCiAJY29uZmlnKQotCQlnaXQtcmVwby1jb25maWcgLS1nZXQtYWxsICJyZW1vdGUuJDEucHVzaCIgOzsKKwkJZ2l0LWNvbmZpZyAtLWdldC1hbGwgInJlbW90ZS4kMS5wdXNoIiA7OwogCXJlbW90ZXMpCiAJCXNlZCAtbmUgJy9eUHVzaDogKi97CiAJCQlzLy8vcApAQCAtODEsNyArODEsMTQgQEAKICMgaXMgdG8gaGVscCBwcmV2ZW50IHJhbmRvbWx5ICJnbG9iYmVkIiByZWYgZnJvbSBiZWluZyBjaG9zZW4gYXMKICMgYSBtZXJnZSBjYW5kaWRhdGUKIGV4cGFuZF9yZWZzX3dpbGRjYXJkICgpIHsKKwlyZW1vdGU9IiQxIgorCXNoaWZ0CiAJZmlyc3Rfb25lPXllcworCWlmIHRlc3QgIiQjIiA9IDAKKwl0aGVuCisJCWVjaG8gZW1wdHkKKwkJZWNobyA+JjIgIk5vdGhpbmcgc3BlY2lmaWVkIGZvciBmZXRjaGluZyB3aXRoIHJlbW90ZS4kcmVtb3RlLmZldGNoIgorCWZpCiAJZm9yIHJlZgogCWRvCiAJCWxyZWY9JHtyZWYjJysnfQpAQCAtMTMyLDE0ICsxMzksMTQgQEAKIAlpZiB0ZXN0ICIkMSIgPSAiLWQiCiAJdGhlbgogCQlzaGlmdCA7IHJlbW90ZT0iJDEiIDsgc2hpZnQKLQkJc2V0ICQoZXhwYW5kX3JlZnNfd2lsZGNhcmQgIiRAIikKKwkJc2V0ICQoZXhwYW5kX3JlZnNfd2lsZGNhcmQgIiRyZW1vdGUiICIkQCIpCiAJCWlzX2V4cGxpY2l0PSIkMSIKIAkJc2hpZnQKIAkJaWYgdGVzdCAiJHJlbW90ZSIgPSAiJChnZXRfZGVmYXVsdF9yZW1vdGUpIgogCQl0aGVuCi0JCQljdXJyX2JyYW5jaD0kKGdpdC1zeW1ib2xpYy1yZWYgSEVBRCB8IFwKKwkJCWN1cnJfYnJhbmNoPSQoZ2l0LXN5bWJvbGljLXJlZiAtcSBIRUFEIHwgXAogCQkJICAgIHNlZCAtZSAnc3xecmVmcy9oZWFkcy98fCcpCi0JCQltZXJnZV9icmFuY2hlcz0kKGdpdC1yZXBvLWNvbmZpZyBcCisJCQltZXJnZV9icmFuY2hlcz0kKGdpdC1jb25maWcgXAogCQkJICAgIC0tZ2V0LWFsbCAiYnJhbmNoLiR7Y3Vycl9icmFuY2h9Lm1lcmdlIikKIAkJZmkKIAkJaWYgdGVzdCAteiAiJG1lcmdlX2JyYW5jaGVzIiAmJiB0ZXN0ICRpc19leHBsaWNpdCAhPSBleHBsaWNpdApAQCAtMTc2LDcgKzE4Myw3IEBACiAJCQlkb25lCiAJCWZpCiAJCWNhc2UgIiRyZW1vdGUiIGluCi0JCScnKSByZW1vdGU9SEVBRCA7OworCQknJyB8IEhFQUQgKSByZW1vdGU9SEVBRCA7OwogCQlyZWZzL2hlYWRzLyogfCByZWZzL3RhZ3MvKiB8IHJlZnMvcmVtb3Rlcy8qKSA7OwogCQloZWFkcy8qIHwgdGFncy8qIHwgcmVtb3Rlcy8qICkgcmVtb3RlPSJyZWZzLyRyZW1vdGUiIDs7CiAJCSopIHJlbW90ZT0icmVmcy9oZWFkcy8kcmVtb3RlIiA7OwpAQCAtMjA1LDcgKzIxMiw3IEBACiAJCWVjaG8gIkhFQUQ6IiA7OwogCWNvbmZpZykKIAkJY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAtZCAiJDEiIFwKLQkJCSQoZ2l0LXJlcG8tY29uZmlnIC0tZ2V0LWFsbCAicmVtb3RlLiQxLmZldGNoIikgOzsKKwkJCSQoZ2l0LWNvbmZpZyAtLWdldC1hbGwgInJlbW90ZS4kMS5mZXRjaCIpIDs7CiAJYnJhbmNoZXMpCiAJCXJlbW90ZV9icmFuY2g9JChzZWQgLW5lICcvIy9zLy4qIy8vcCcgIiRHSVRfRElSL2JyYW5jaGVzLyQxIikKIAkJY2FzZSAiJHJlbW90ZV9icmFuY2giIGluICcnKSByZW1vdGVfYnJhbmNoPW1hc3RlciA7OyBlc2FjCkBAIC0yNzksMyArMjg2LDE2IEBACiAJCWVzYWMKIAlkb25lCiB9CisKK2dldF91cGxvYWRwYWNrICgpIHsKKwlkYXRhX3NvdXJjZT0kKGdldF9kYXRhX3NvdXJjZSAiJDEiKQorCWNhc2UgIiRkYXRhX3NvdXJjZSIgaW4KKwljb25maWcpCisJCXVwbHA9JChnaXQtY29uZmlnIC0tZ2V0ICJyZW1vdGUuJDEudXBsb2FkcGFjayIpCisJCWVjaG8gJHt1cGxwOi1naXQtdXBsb2FkLXBhY2t9CisJCTs7CisJKikKKwkJZWNobyAiZ2l0LXVwbG9hZC1wYWNrIgorCQk7OworCWVzYWMKK30KZGlmZiAtLWdpdCBhL2dpdC1wdWxsLnNoIGIvZ2l0LXB1bGwuc2gKaW5kZXggOTU5MjYxNy4uYTM2NjVkNyAxMDA3NTUKLS0tIGEvZ2l0LXB1bGwuc2gKKysrIGIvZ2l0LXB1bGwuc2gKQEAgLTgzLDggKzgzLDE3IEBACiAKIGNhc2UgIiRtZXJnZV9oZWFkIiBpbgogJycpCi0JY3Vycl9icmFuY2g9JChnaXQtc3ltYm9saWMtcmVmIEhFQUQgfCBcCi0JCXNlZCAtZSAnc3xecmVmcy9oZWFkcy98fCcpCisJY3Vycl9icmFuY2g9JChnaXQtc3ltYm9saWMtcmVmIC1xIEhFQUQpCisJY2FzZSAkPyBpbgorCSAgMCkgOzsKKwkgIDEpIGVjaG8gPiYyICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2g7IHlvdSBtdXN0IGV4cGxpY2l0bHkiCisJICAgICBlY2hvID4mMiAic3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdpc2ggdG8gbWVyZ2U6IgorCSAgICAgZWNobyA+JjIgIiAgZ2l0IHB1bGwgPHJlbW90ZT4gPGJyYW5jaD4iCisJICAgICBleGl0IDE7OworCSAgKikgZXhpdCAkPzs7CisJZXNhYworCWN1cnJfYnJhbmNoPSR7Y3Vycl9icmFuY2gjcmVmcy9oZWFkcy99CisKIAllY2hvID4mMiAiV2FybmluZzogTm8gbWVyZ2UgY2FuZGlkYXRlIGZvdW5kIGJlY2F1c2UgdmFsdWUgb2YgY29uZmlnIG9wdGlvbgogICAgICAgICAgXCJicmFuY2guJHtjdXJyX2JyYW5jaH0ubWVyZ2VcIiBkb2VzIG5vdCBtYXRjaCBhbnkgcmVtb3RlIGJyYW5jaCBmZXRjaGVkLiIKIAllY2hvID4mMiAiTm8gY2hhbmdlcy4iCmRpZmYgLS1naXQgYS9naXQtcXVpbHRpbXBvcnQuc2ggYi9naXQtcXVpbHRpbXBvcnQuc2gKaW5kZXggMTAxMzVkYS4uMmFlMWYyMCAxMDA3NTUKLS0tIGEvZ2l0LXF1aWx0aW1wb3J0LnNoCisrKyBiL2dpdC1xdWlsdGltcG9ydC5zaApAQCAtODksNyArODksNyBAQAogCQkJZWNobyAiTm8gYXV0aG9yIGZvdW5kIGluICRwYXRjaF9uYW1lIiA+JjI7CiAJCQllY2hvICItLS0iCiAJCQljYXQgJHRtcF9tc2cKLQkJCWVjaG8gLW4gIkF1dGhvcjogIjsKKwkJCXByaW50ZiAiQXV0aG9yOiAiOwogCQkJcmVhZCBwYXRjaF9hdXRob3IKIAogCQkJZWNobyAiJHBhdGNoX2F1dGhvciIKZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2Uuc2ggYi9naXQtcmViYXNlLnNoCmluZGV4IGM4YmQwZjkuLjlkMmY3MWQgMTAwNzU1Ci0tLSBhL2dpdC1yZWJhc2Uuc2gKKysrIGIvZ2l0LXJlYmFzZS5zaApAQCAtMjQ5LDcgKzI0OSw4IEBACiBnaXQtdXBkYXRlLWluZGV4IC0tcmVmcmVzaCB8fCBleGl0CiBkaWZmPSQoZ2l0LWRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyAtciBIRUFEKQogY2FzZSAiJGRpZmYiIGluCi0/KikJZWNobyAiJGRpZmYiCis/KikJZWNobyAiY2Fubm90IHJlYmFzZTogeW91ciBpbmRleCBpcyBub3QgdXAtdG8tZGF0ZSIKKwllY2hvICIkZGlmZiIKIAlleGl0IDEKIAk7OwogZXNhYwpAQCAtMjc1LDggKzI3NiwxMiBAQAogCWdpdC1jaGVja291dCAiJDIiIHx8IHVzYWdlCiAJOzsKICopCi0JYnJhbmNoX25hbWU9YGdpdCBzeW1ib2xpYy1yZWYgSEVBRGAgfHwgZGllICJObyBjdXJyZW50IGJyYW5jaCIKLQlicmFuY2hfbmFtZT1gZXhwciAieiRicmFuY2hfbmFtZSIgOiAnenJlZnMvaGVhZHMvXCguKlwpJ2AKKwlpZiBicmFuY2hfbmFtZT1gZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEYAorCXRoZW4KKwkJYnJhbmNoX25hbWU9YGV4cHIgInokYnJhbmNoX25hbWUiIDogJ3pyZWZzL2hlYWRzL1woLipcKSdgCisJZWxzZQorCQlicmFuY2hfbmFtZT1IRUFEIDsjIGRldGFjaGVkCisJZmkKIAk7OwogZXNhYwogYnJhbmNoPSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJHticmFuY2hfbmFtZX1eMCIpIHx8IGV4aXQKZGlmZiAtLWdpdCBhL2dpdC1yZW1vdGUucGVybCBiL2dpdC1yZW1vdGUucGVybAppbmRleCBmYzA1NWI2Li5jODEzZmUxIDEwMDc1NQotLS0gYS9naXQtcmVtb3RlLnBlcmwKKysrIGIvZ2l0LXJlbW90ZS5wZXJsCkBAIC02NCw3ICs2NCw3IEBACiAJbXkgKCRnaXQpID0gQF87CiAJbXkgJXNlZW4gPSAoKTsKIAlteSBAcmVtb3RlcyA9IGV2YWwgewotCQkkZ2l0LT5jb21tYW5kKHF3KHJlcG8tY29uZmlnIC0tZ2V0LXJlZ2V4cCksICdecmVtb3RlXC4nKTsKKwkJJGdpdC0+Y29tbWFuZChxdyhjb25maWcgLS1nZXQtcmVnZXhwKSwgJ15yZW1vdGVcLicpOwogCX07CiAJZm9yIChAcmVtb3RlcykgewogCQlpZiAoL15yZW1vdGVcLihbXi5dKilcLihcUyopXHMrKC4qKSQvKSB7CkBAIC0xMDMsNyArMTAzLDcgQEAKIAlteSAoJGdpdCkgPSBAXzsKIAlteSAlc2VlbiA9ICgpOwogCW15IEBicmFuY2hlcyA9IGV2YWwgewotCQkkZ2l0LT5jb21tYW5kKHF3KHJlcG8tY29uZmlnIC0tZ2V0LXJlZ2V4cCksICdeYnJhbmNoXC4nKTsKKwkJJGdpdC0+Y29tbWFuZChxdyhjb25maWcgLS1nZXQtcmVnZXhwKSwgJ15icmFuY2hcLicpOwogCX07CiAJZm9yIChAYnJhbmNoZXMpIHsKIAkJaWYgKC9eYnJhbmNoXC4oW14uXSopXC4oXFMqKVxzKyguKikkLykgewpAQCAtMjM4LDggKzIzOCw4IEBACiAJCXByaW50IFNUREVSUiAicmVtb3RlICRuYW1lIGFscmVhZHkgZXhpc3RzLlxuIjsKIAkJZXhpdCgxKTsKIAl9Ci0JJGdpdC0+Y29tbWFuZCgncmVwby1jb25maWcnLCAicmVtb3RlLiRuYW1lLnVybCIsICR1cmwpOwotCSRnaXQtPmNvbW1hbmQoJ3JlcG8tY29uZmlnJywgInJlbW90ZS4kbmFtZS5mZXRjaCIsCisJJGdpdC0+Y29tbWFuZCgnY29uZmlnJywgInJlbW90ZS4kbmFtZS51cmwiLCAkdXJsKTsKKwkkZ2l0LT5jb21tYW5kKCdjb25maWcnLCAicmVtb3RlLiRuYW1lLmZldGNoIiwKIAkJICAgICAgIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzLyRuYW1lLyoiKTsKIH0KIApkaWZmIC0tZ2l0IGEvZ2l0LXJlcGFjay5zaCBiL2dpdC1yZXBhY2suc2gKaW5kZXggZGE4ZTY3Zi4uZGRmYThiNCAxMDA3NTUKLS0tIGEvZ2l0LXJlcGFjay5zaAorKysgYi9naXQtcmVwYWNrLnNoCkBAIC0yOCw3ICsyOCw3IEBACiAjIExhdGVyIHdlIHdpbGwgZGVmYXVsdCByZXBhY2suVXNlRGVsdGFCYXNlT2Zmc2V0IHRvIHRydWUKIGRlZmF1bHRfZGJvPWZhbHNlCiAKLWNhc2UgImBnaXQgcmVwby1jb25maWcgLS1ib29sIHJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQgfHwKK2Nhc2UgImBnaXQgY29uZmlnIC0tYm9vbCByZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IHx8CiAgICAgICAgZWNobyAkZGVmYXVsdF9kYm9gIiBpbgogdHJ1ZSkKIAlleHRyYT0iJGV4dHJhIC0tZGVsdGEtYmFzZS1vZmZzZXQiIDs7CmRpZmYgLS1naXQgYS9naXQtcmVzZXQuc2ggYi9naXQtcmVzZXQuc2gKaW5kZXggOTFjN2U2ZS4uZmVlNmQ5OCAxMDA3NTUKLS0tIGEvZ2l0LXJlc2V0LnNoCisrKyBiL2dpdC1yZXNldC5zaApAQCAtNDMsNyArNDMsNyBAQAogIyBhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZSBub3IgSEVBRC4KIGlmIHRlc3QgJCMgIT0gMAogdGhlbgotCXRlc3QgIiRyZXNldF90eXBlIiA9PSAiLS1taXhlZCIgfHwKKwl0ZXN0ICIkcmVzZXRfdHlwZSIgPSAiLS1taXhlZCIgfHwKIAkJZGllICJDYW5ub3QgZG8gcGFydGlhbCAkcmVzZXRfdHlwZSByZXNldC4iCiAKIAlnaXQtZGlmZi1pbmRleCAtLWNhY2hlZCAkcmV2IC0tICIkQCIgfApAQCAtODcsNyArODcsNyBAQAogY2FzZSAiJHJlc2V0X3R5cGUiIGluCiAtLWhhcmQgKQogCXRlc3QgJHVwZGF0ZV9yZWZfc3RhdHVzID0gMCAmJiB7Ci0JCWVjaG8gLW4gIkhFQUQgaXMgbm93IGF0ICIKKwkJcHJpbnRmICJIRUFEIGlzIG5vdyBhdCAiCiAJCUdJVF9QQUdFUj0gZ2l0IGxvZyAtLW1heC1jb3VudD0xIC0tcHJldHR5PW9uZWxpbmUgXAogCQkJLS1hYmJyZXYtY29tbWl0IEhFQUQKIAl9CmRpZmYgLS1naXQgYS9naXQtcmV2ZXJ0LnNoIGIvZ2l0LXJldmVydC5zaAppbmRleCA3MWNiY2JjLi44NjZkNjIyIDEwMDc1NQotLS0gYS9naXQtcmV2ZXJ0LnNoCisrKyBiL2dpdC1yZXZlcnQuc2gKQEAgLTgxLDcgKzgxLDcgQEAKIGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRjb21taXReMiIgPi9kZXYvbnVsbCAyPiYxICYmCiAJZGllICJDYW5ub3QgcnVuICRtZSBhIG11bHRpLXBhcmVudCBjb21taXQuIgogCi1lbmNvZGluZz0kKGdpdCByZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIHx8IGVjaG8gVVRGLTgpCitlbmNvZGluZz0kKGdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyB8fCBlY2hvIFVURi04KQogCiAjICJjb21taXQiIGlzIGFuIGV4aXN0aW5nIGNvbW1pdC4gIFdlIHdvdWxkIHdhbnQgdG8gYXBwbHkKICMgdGhlIGRpZmZlcmVuY2UgaXQgaW50cm9kdWNlcyBzaW5jZSBpdHMgZmlyc3QgcGFyZW50ICJwcmV2IgpAQCAtMTQ2LDM3ICsxNDYsMzggQEAKIAogZXNhYyA+Lm1zZwogCitldmFsIEdJVEhFQURfJGhlYWQ9SEVBRAorZXZhbCBHSVRIRUFEXyRuZXh0PSdgZ2l0IHNob3cgLXMgXAorCS0tcHJldHR5PW9uZWxpbmUgLS1lbmNvZGluZz0iJGVuY29kaW5nIiAiJGNvbW1pdCIgfAorCXNlZCAtZSAicy9eW14gXSogLy8iYCcKK2V4cG9ydCBHSVRIRUFEXyRoZWFkIEdJVEhFQURfJG5leHQKKwogIyBUaGlzIHRocmVlIHdheSBtZXJnZSBpcyBhbiBpbnRlcmVzdGluZyBvbmUuICBXZSBhcmUgYXQKICMgJGhlYWQsIGFuZCB3b3VsZCB3YW50IHRvIGFwcGx5IHRoZSBjaGFuZ2UgYmV0d2VlbiAkY29tbWl0CiAjIGFuZCAkcHJldiBvbiB0b3Agb2YgdXMgKHdoZW4gcmV2ZXJ0aW5nKSwgb3IgdGhlIGNoYW5nZSBiZXR3ZWVuCiAjICRwcmV2IGFuZCAkY29tbWl0IG9uIHRvcCBvZiB1cyAod2hlbiBjaGVycnktcGlja2luZyBvciByZXBsYXlpbmcpLgogCi1lY2hvID4mMiAiRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byAkbWUuIgotZ2l0LXJlYWQtdHJlZSAtbSAtdSAtLWFnZ3Jlc3NpdmUgJGJhc2UgJGhlYWQgJG5leHQgJiYKK2dpdC1tZXJnZS1yZWN1cnNpdmUgJGJhc2UgLS0gJGhlYWQgJG5leHQgJiYKIHJlc3VsdD0kKGdpdC13cml0ZS10cmVlIDI+L2Rldi9udWxsKSB8fCB7Ci0gICAgZWNobyA+JjIgIlNpbXBsZSAkbWUgZmFpbHM7IHRyeWluZyBBdXRvbWF0aWMgJG1lLiIKLSAgICBnaXQtbWVyZ2UtaW5kZXggLW8gZ2l0LW1lcmdlLW9uZS1maWxlIC1hIHx8IHsKLQkgICAgbXYgLWYgLm1zZyAiJEdJVF9ESVIvTUVSR0VfTVNHIgotCSAgICB7Ci0JCWVjaG8gJworCW12IC1mIC5tc2cgIiRHSVRfRElSL01FUkdFX01TRyIKKwl7CisJICAgIGVjaG8gJwogQ29uZmxpY3RzOgogJwogCQlnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCB8CiAJCXNlZCAtZSAncy9eW14JXSoJLwkvJyB8CiAJCXVuaXEKLQkgICAgfSA+PiIkR0lUX0RJUi9NRVJHRV9NU0ciCi0JICAgIGVjaG8gPiYyICJBdXRvbWF0aWMgJG1lIGZhaWxlZC4gIEFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCIKLQkgICAgZWNobyA+JjIgIm1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocyB3aXRoICdnaXQtYWRkIDxwYXRocz4nIgotCSAgICBlY2hvID4mMiAiYW5kIGNvbW1pdCB0aGUgcmVzdWx0LiIKLQkgICAgY2FzZSAiJG1lIiBpbgotCSAgICBjaGVycnktcGljaykKKwl9ID4+IiRHSVRfRElSL01FUkdFX01TRyIKKwllY2hvID4mMiAiQXV0b21hdGljICRtZSBmYWlsZWQuICBBZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywiCisJZWNobyA+JjIgIm1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocyB3aXRoICdnaXQtYWRkIDxwYXRocz4nIgorCWVjaG8gPiYyICJhbmQgY29tbWl0IHRoZSByZXN1bHQuIgorCWNhc2UgIiRtZSIgaW4KKwljaGVycnktcGljaykKIAkJZWNobyA+JjIgIllvdSBtYXkgY2hvb3NlIHRvIHVzZSB0aGUgZm9sbG93aW5nIHdoZW4gbWFraW5nIgogCQllY2hvID4mMiAidGhlIGNvbW1pdDoiCiAJCWVjaG8gPiYyICIkc2V0X2F1dGhvcl9lbnYiCi0JICAgIGVzYWMKLQkgICAgZXhpdCAxCi0gICAgfQotICAgIHJlc3VsdD0kKGdpdC13cml0ZS10cmVlKSB8fCBleGl0CisJZXNhYworCWV4aXQgMQogfQogZWNobyA+JjIgIkZpbmlzaGVkIG9uZSAkbWUuIgogCmRpZmYgLS1naXQgYS9naXQtc2VuZC1lbWFpbC5wZXJsIGIvZ2l0LXNlbmQtZW1haWwucGVybAppbmRleCA4ZGMyZWUwLi42YTI4NWJmIDEwMDc1NQotLS0gYS9naXQtc2VuZC1lbWFpbC5wZXJsCisrKyBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKQEAgLTQwOCw3ICs0MDgsNyBAQAogCQlzL18vIC9nOwogCQlzLz0oWzAtOUEtRl17Mn0pL2NocihoZXgoJDEpKS9lZzsKIAl9Ci0JcmV0dXJuICIkXyAtIHVucXVvdGVkIjsKKwlyZXR1cm4gIiRfIjsKIH0KIAogc3ViIHNlbmRfbWVzc2FnZQpkaWZmIC0tZ2l0IGEvZ2l0LXNoLXNldHVwLnNoIGIvZ2l0LXNoLXNldHVwLnNoCmluZGV4IDZiMWMxNDIuLmI0YWE0YjIgMTAwNzU1Ci0tLSBhL2dpdC1zaC1zZXR1cC5zaAorKysgYi9naXQtc2gtc2V0dXAuc2gKQEAgLTI5LDcgKzI5LDcgQEAKIH0KIAogaXNfYmFyZV9yZXBvc2l0b3J5ICgpIHsKLQlnaXQtcmVwby1jb25maWcgLS1ib29sIC0tZ2V0IGNvcmUuYmFyZSB8fAorCWdpdC1jb25maWcgLS1ib29sIC0tZ2V0IGNvcmUuYmFyZSB8fAogCWNhc2UgIiRHSVRfRElSIiBpbgogCS5naXQgfCAqLy5naXQpIGVjaG8gZmFsc2UgOzsKIAkqKSBlY2hvIHRydWUgOzsKZGlmZiAtLWdpdCBhL2dpdC1zdm4ucGVybCBiL2dpdC1zdm4ucGVybAppbmRleCA5OTg2YTBjLi42ODE1NmZjIDEwMDc1NQotLS0gYS9naXQtc3ZuLnBlcmwKKysrIGIvZ2l0LXN2bi5wZXJsCkBAIC01OTMsNyArNTkzLDcgQEAKIAkJCQkgICAgICAiJHRydW5rX3VybCAoJF90cnVuaylcbiI7CiAJCQl9CiAJCQlpbml0KCR0cnVua191cmwpOwotCQkJY29tbWFuZF9ub2lzeSgncmVwby1jb25maWcnLCAnc3ZuLnRydW5rJywgJHRydW5rX3VybCk7CisJCQljb21tYW5kX25vaXN5KCdjb25maWcnLCAnc3ZuLnRydW5rJywgJHRydW5rX3VybCk7CiAJCX0KIAl9CiAJJF9wcmVmaXggPSAnJyB1bmxlc3MgZGVmaW5lZCAkX3ByZWZpeDsKQEAgLTc3MiwyMiArNzcyLDIyIEBACiAJcmV0dXJuIDEgaWYgJF9jb2xvcjsKIAlteSAoJGRjLCAkZGN2YXIpOwogCSRkY3ZhciA9ICdjb2xvci5kaWZmJzsKLQkkZGMgPSBgZ2l0LXJlcG8tY29uZmlnIC0tZ2V0ICRkY3ZhcmA7CisJJGRjID0gYGdpdC1jb25maWcgLS1nZXQgJGRjdmFyYDsKIAlpZiAoJGRjIGVxICcnKSB7CiAJCSMgbm90aGluZyBhdCBhbGw7IGZhbGxiYWNrIHRvICJkaWZmLmNvbG9yIgogCQkkZGN2YXIgPSAnZGlmZi5jb2xvcic7Ci0JCSRkYyA9IGBnaXQtcmVwby1jb25maWcgLS1nZXQgJGRjdmFyYDsKKwkJJGRjID0gYGdpdC1jb25maWcgLS1nZXQgJGRjdmFyYDsKIAl9CiAJY2hvbXAoJGRjKTsKIAlpZiAoJGRjIGVxICdhdXRvJykgewogCQlteSAkcGM7Ci0JCSRwYyA9IGBnaXQtcmVwby1jb25maWcgLS1nZXQgY29sb3IucGFnZXJgOworCQkkcGMgPSBgZ2l0LWNvbmZpZyAtLWdldCBjb2xvci5wYWdlcmA7CiAJCWlmICgkcGMgZXEgJycpIHsKIAkJCSMgZG9lcyBub3QgaGF2ZSBpdCAtLSBmYWxsYmFjayB0byBwYWdlci5jb2xvcgotCQkJJHBjID0gYGdpdC1yZXBvLWNvbmZpZyAtLWJvb2wgLS1nZXQgcGFnZXIuY29sb3JgOworCQkJJHBjID0gYGdpdC1jb25maWcgLS1ib29sIC0tZ2V0IHBhZ2VyLmNvbG9yYDsKIAkJfQogCQllbHNlIHsKLQkJCSRwYyA9IGBnaXQtcmVwby1jb25maWcgLS1ib29sIC0tZ2V0IGNvbG9yLnBhZ2VyYDsKKwkJCSRwYyA9IGBnaXQtY29uZmlnIC0tYm9vbCAtLWdldCBjb2xvci5wYWdlcmA7CiAJCQlpZiAoJD8pIHsKIAkJCQkkcGMgPSAnZmFsc2UnOwogCQkJfQpAQCAtODAwLDcgKzgwMCw3IEBACiAJfQogCXJldHVybiAwIGlmICRkYyBlcSAnbmV2ZXInOwogCXJldHVybiAxIGlmICRkYyBlcSAnYWx3YXlzJzsKLQljaG9tcCgkZGMgPSBgZ2l0LXJlcG8tY29uZmlnIC0tYm9vbCAtLWdldCAkZGN2YXJgKTsKKwljaG9tcCgkZGMgPSBgZ2l0LWNvbmZpZyAtLWJvb2wgLS1nZXQgJGRjdmFyYCk7CiAJcmV0dXJuICgkZGMgZXEgJ3RydWUnKTsKIH0KIApAQCAtOTE5LDcgKzkxOSw3IEBACiAJd2FpdHBpZCAkcGlkLCAwOwogCWNyb2FrICQ/IGlmICQ/OwogCW15ICgkbikgPSAoJHN3aXRjaCA9fiAvXi0tKFx3KykvKTsKLQljb21tYW5kX25vaXN5KCdyZXBvLWNvbmZpZycsICJzdm4uJG4iLCAkZnVsbF91cmwpOworCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICJzdm4uJG4iLCAkZnVsbF91cmwpOwogfQogCiBzdWIgY29tbW9uX3ByZWZpeCB7CkBAIC0xNTk0LDcgKzE1OTQsNyBAQAogCSV0cmVlX21hcCA9ICgpOwogfQogCi0jIGNvbnZlcnQgR2V0T3B0OjpMb25nIHNwZWNzIGZvciB1c2UgYnkgZ2l0LXJlcG8tY29uZmlnCisjIGNvbnZlcnQgR2V0T3B0OjpMb25nIHNwZWNzIGZvciB1c2UgYnkgZ2l0LWNvbmZpZwogc3ViIHJlYWRfcmVwb19jb25maWcgewogCXJldHVybiB1bmxlc3MgLWQgJEdJVF9ESVI7CiAJbXkgJG9wdHMgPSBzaGlmdDsKQEAgLTE2MDIsNyArMTYwMiw3IEBACiAJCW15ICR2ID0gJG9wdHMtPnskb307CiAJCW15ICgka2V5KSA9ICgkbyA9fiAvXihbYS16XC1dKykvKTsKIAkJJGtleSA9fiBzLy0vL2c7Ci0JCW15ICRhcmcgPSAnZ2l0LXJlcG8tY29uZmlnJzsKKwkJbXkgJGFyZyA9ICdnaXQtY29uZmlnJzsKIAkJJGFyZyAuPSAnIC0taW50JyBpZiAoJG8gPX4gL1s6PV1pJC8pOwogCQkkYXJnIC49ICcgLS1ib29sJyBpZiAoJG8gIX4gL1s6PV1bc2ZpXSQvKTsKIAkJaWYgKHJlZiAkdiBlcSAnQVJSQVknKSB7CkBAIC0xOTE4LDcgKzE5MTgsOCBAQAogCSRkZWZhdWx0X3VzZXJuYW1lID0gJF91c2VybmFtZSBpZiBkZWZpbmVkICRfdXNlcm5hbWU7CiAJaWYgKGRlZmluZWQgJGRlZmF1bHRfdXNlcm5hbWUgJiYgbGVuZ3RoICRkZWZhdWx0X3VzZXJuYW1lKSB7CiAJCWlmIChkZWZpbmVkICRyZWFsbSAmJiBsZW5ndGggJHJlYWxtKSB7Ci0JCQlwcmludCAiQXV0aGVudGljYXRpb24gcmVhbG06ICRyZWFsbVxuIjsKKwkJCXByaW50IFNUREVSUiAiQXV0aGVudGljYXRpb24gcmVhbG06ICRyZWFsbVxuIjsKKwkJCVNUREVSUi0+Zmx1c2g7CiAJCX0KIAkJJGNyZWQtPnVzZXJuYW1lKCRkZWZhdWx0X3VzZXJuYW1lKTsKIAl9IGVsc2UgewpAQCAtMTkzMywzNiArMTkzNCwzOCBAQAogc3ViIF9zc2xfc2VydmVyX3RydXN0X3Byb21wdCB7CiAJbXkgKCRjcmVkLCAkcmVhbG0sICRmYWlsdXJlcywgJGNlcnRfaW5mbywgJG1heV9zYXZlLCAkcG9vbCkgPSBAXzsKIAkkbWF5X3NhdmUgPSB1bmRlZiBpZiAkX25vX2F1dGhfY2FjaGU7Ci0JcHJpbnQgIkVycm9yIHZhbGlkYXRpbmcgc2VydmVyIGNlcnRpZmljYXRlIGZvciAnJHJlYWxtJzpcbiI7CisJcHJpbnQgU1RERVJSICJFcnJvciB2YWxpZGF0aW5nIHNlcnZlciBjZXJ0aWZpY2F0ZSBmb3IgJyRyZWFsbSc6XG4iOwogCWlmICgkZmFpbHVyZXMgJiAkU1ZOOjpBdXRoOjpTU0w6OlVOS05PV05DQSkgewotCQlwcmludCAiIC0gVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBpc3N1ZWQgYnkgYSB0cnVzdGVkICIsCisJCXByaW50IFNUREVSUiAiIC0gVGhlIGNlcnRpZmljYXRlIGlzIG5vdCBpc3N1ZWQgYnkgYSB0cnVzdGVkICIsCiAJCSAgICAgICJhdXRob3JpdHkuIFVzZSB0aGVcbiIsCiAJICAgICAgICAgICAgICAiICAgZmluZ2VycHJpbnQgdG8gdmFsaWRhdGUgdGhlIGNlcnRpZmljYXRlIG1hbnVhbGx5IVxuIjsKIAl9CiAJaWYgKCRmYWlsdXJlcyAmICRTVk46OkF1dGg6OlNTTDo6Q05NSVNNQVRDSCkgewotCQlwcmludCAiIC0gVGhlIGNlcnRpZmljYXRlIGhvc3RuYW1lIGRvZXMgbm90IG1hdGNoLlxuIjsKKwkJcHJpbnQgU1RERVJSICIgLSBUaGUgY2VydGlmaWNhdGUgaG9zdG5hbWUgZG9lcyBub3QgbWF0Y2guXG4iOwogCX0KIAlpZiAoJGZhaWx1cmVzICYgJFNWTjo6QXV0aDo6U1NMOjpOT1RZRVRWQUxJRCkgewotCQlwcmludCAiIC0gVGhlIGNlcnRpZmljYXRlIGlzIG5vdCB5ZXQgdmFsaWQuXG4iOworCQlwcmludCBTVERFUlIgIiAtIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgeWV0IHZhbGlkLlxuIjsKIAl9CiAJaWYgKCRmYWlsdXJlcyAmICRTVk46OkF1dGg6OlNTTDo6RVhQSVJFRCkgewotCQlwcmludCAiIC0gVGhlIGNlcnRpZmljYXRlIGhhcyBleHBpcmVkLlxuIjsKKwkJcHJpbnQgU1RERVJSICIgLSBUaGUgY2VydGlmaWNhdGUgaGFzIGV4cGlyZWQuXG4iOwogCX0KIAlpZiAoJGZhaWx1cmVzICYgJFNWTjo6QXV0aDo6U1NMOjpPVEhFUikgewotCQlwcmludCAiIC0gVGhlIGNlcnRpZmljYXRlIGhhcyBhbiB1bmtub3duIGVycm9yLlxuIjsKKwkJcHJpbnQgU1RERVJSICIgLSBUaGUgY2VydGlmaWNhdGUgaGFzIGFuIHVua25vd24gZXJyb3IuXG4iOwogCX0KLQlwcmludGYoICJDZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbjpcbiIuCisJcHJpbnRmIFNUREVSUgorCSAgICAgICAgIkNlcnRpZmljYXRlIGluZm9ybWF0aW9uOlxuIi4KIAkgICAgICAgICIgLSBIb3N0bmFtZTogJXNcbiIuCiAJICAgICAgICAiIC0gVmFsaWQ6IGZyb20gJXMgdW50aWwgJXNcbiIuCiAJICAgICAgICAiIC0gSXNzdWVyOiAlc1xuIi4KIAkgICAgICAgICIgLSBGaW5nZXJwcmludDogJXNcbiIsCiAJICAgICAgICBtYXAgJGNlcnRfaW5mby0+JF8sIHF3KGhvc3RuYW1lIHZhbGlkX2Zyb20gdmFsaWRfdW50aWwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVyX2RuYW1lIGZpbmdlcnByaW50KSApOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXJfZG5hbWUgZmluZ2VycHJpbnQpOwogCW15ICRjaG9pY2U7CiBwcm9tcHQ6Ci0JcHJpbnQgJG1heV9zYXZlID8KKwlwcmludCBTVERFUlIgJG1heV9zYXZlID8KIAkgICAgICAiKFIpZWplY3QsIGFjY2VwdCAodCllbXBvcmFyaWx5IG9yIGFjY2VwdCAocCllcm1hbmVudGx5PyAiIDoKIAkgICAgICAiKFIpZWplY3Qgb3IgYWNjZXB0ICh0KWVtcG9yYXJpbHk/ICI7CisJU1RERVJSLT5mbHVzaDsKIAkkY2hvaWNlID0gbGMoc3Vic3RyKDxTVERJTj4gfHwgJ1InLCAwLCAxKSk7CiAJaWYgKCRjaG9pY2UgPX4gL150JC9pKSB7CiAJCSRjcmVkLT5tYXlfc2F2ZSh1bmRlZik7CkBAIC0xOTgwLDcgKzE5ODMsOCBAQAogc3ViIF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0IHsKIAlteSAoJGNyZWQsICRyZWFsbSwgJG1heV9zYXZlLCAkcG9vbCkgPSBAXzsKIAkkbWF5X3NhdmUgPSB1bmRlZiBpZiAkX25vX2F1dGhfY2FjaGU7Ci0JcHJpbnQgIkNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlbmFtZTogIjsKKwlwcmludCBTVERFUlIgIkNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlbmFtZTogIjsKKwlTVERFUlItPmZsdXNoOwogCWNob21wKG15ICRmaWxlbmFtZSA9IDxTVERJTj4pOwogCSRjcmVkLT5jZXJ0X2ZpbGUoJGZpbGVuYW1lKTsKIAkkY3JlZC0+bWF5X3NhdmUoJG1heV9zYXZlKTsKQEAgLTE5OTksMTMgKzIwMDMsMTQgQEAKIAlteSAoJGNyZWQsICRyZWFsbSwgJG1heV9zYXZlLCAkcG9vbCkgPSBAXzsKIAkkbWF5X3NhdmUgPSB1bmRlZiBpZiAkX25vX2F1dGhfY2FjaGU7CiAJaWYgKGRlZmluZWQgJHJlYWxtICYmIGxlbmd0aCAkcmVhbG0pIHsKLQkJcHJpbnQgIkF1dGhlbnRpY2F0aW9uIHJlYWxtOiAkcmVhbG1cbiI7CisJCXByaW50IFNUREVSUiAiQXV0aGVudGljYXRpb24gcmVhbG06ICRyZWFsbVxuIjsKIAl9CiAJbXkgJHVzZXJuYW1lOwogCWlmIChkZWZpbmVkICRfdXNlcm5hbWUpIHsKIAkJJHVzZXJuYW1lID0gJF91c2VybmFtZTsKIAl9IGVsc2UgewotCQlwcmludCAiVXNlcm5hbWU6ICI7CisJCXByaW50IFNUREVSUiAiVXNlcm5hbWU6ICI7CisJCVNUREVSUi0+Zmx1c2g7CiAJCWNob21wKCR1c2VybmFtZSA9IDxTVERJTj4pOwogCX0KIAkkY3JlZC0+dXNlcm5hbWUoJHVzZXJuYW1lKTsKQEAgLTIwMTUsNyArMjAyMCw4IEBACiAKIHN1YiBfcmVhZF9wYXNzd29yZCB7CiAJbXkgKCRwcm9tcHQsICRyZWFsbSkgPSBAXzsKLQlwcmludCAkcHJvbXB0OworCXByaW50IFNUREVSUiAkcHJvbXB0OworCVNUREVSUi0+Zmx1c2g7CiAJcmVxdWlyZSBUZXJtOjpSZWFkS2V5OwogCVRlcm06OlJlYWRLZXk6OlJlYWRNb2RlKCdub2VjaG8nKTsKIAlteSAkcGFzc3dvcmQgPSAnJzsKQEAgLTIwMjQsNyArMjAzMCw4IEBACiAJCSRwYXNzd29yZCAuPSAka2V5OwogCX0KIAlUZXJtOjpSZWFkS2V5OjpSZWFkTW9kZSgncmVzdG9yZScpOwotCXByaW50ICJcbiI7CisJcHJpbnQgU1RERVJSICJcbiI7CisJU1RERVJSLT5mbHVzaDsKIAkkcGFzc3dvcmQ7CiB9CiAKQEAgLTI4NDksNyArMjg1Niw3IEBACiAJZm9yZWFjaCBteSAkZCAoc29ydCB7ICRiID1+IHRyIy8jLyMgPD0+ICRhID1+IHRyIy8jLyMgfSBrZXlzICUkcm0pIHsKIAkJJHNlbGYtPmNsb3NlX2RpcmVjdG9yeSgkYmF0LT57JGR9LCAkcCk7CiAJCW15ICgkZG4pID0gKCRkID1+IG0jXiguKj8pLz8oPzpbXi9dKykkIyk7Ci0JCXByaW50ICJcdEQrXHQvJGQvXG4iIHVubGVzcyAkcTsKKwkJcHJpbnQgIlx0RCtcdCRkL1xuIiB1bmxlc3MgJHE7CiAJCSRzZWxmLT5TVVBFUjo6ZGVsZXRlX2VudHJ5KCRkLCAkciwgJGJhdC0+eyRkbn0sICRwKTsKIAkJZGVsZXRlICRiYXQtPnskZH07CiAJfQpkaWZmIC0tZ2l0IGEvZ2l0LXRhZy5zaCBiL2dpdC10YWcuc2gKaW5kZXggZWNiOTEwMC4uNGEwYTdiNiAxMDA3NTUKLS0tIGEvZ2l0LXRhZy5zaAorKysgYi9naXQtdGFnLnNoCkBAIC02MywxMiArNjMsMjEgQEAKIAk7OwogICAgIC1kKQogICAgIAlzaGlmdAotCXRhZ19uYW1lPSIkMSIKLQl0YWc9JChnaXQtc2hvdy1yZWYgLS12ZXJpZnkgLS1oYXNoIC0tICJyZWZzL3RhZ3MvJHRhZ19uYW1lIikgfHwKLQkJZGllICJTZXJpb3VzbHksIHdoYXQgdGFnIGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCi0JZ2l0LXVwZGF0ZS1yZWYgLW0gJ3RhZzogZGVsZXRlJyAtZCAicmVmcy90YWdzLyR0YWdfbmFtZSIgIiR0YWciICYmCi0JCWVjaG8gIkRlbGV0ZWQgdGFnICR0YWdfbmFtZS4iCi0JZXhpdCAkPworCWhhZF9lcnJvcj0wCisJZm9yIHRhZworCWRvCisJCWN1cj0kKGdpdC1zaG93LXJlZiAtLXZlcmlmeSAtLWhhc2ggLS0gInJlZnMvdGFncy8kdGFnIikgfHwgeworCQkJZWNobyA+JjIgIlNlcmlvdXNseSwgd2hhdCB0YWcgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKKwkJCWhhZF9lcnJvcj0xCisJCQljb250aW51ZQorCQl9CisJCWdpdC11cGRhdGUtcmVmIC1tICd0YWc6IGRlbGV0ZScgLWQgInJlZnMvdGFncy8kdGFnIiAiJGN1ciIgfHwgeworCQkJaGFkX2Vycm9yPTEKKwkJCWNvbnRpbnVlCisJCX0KKwkJZWNobyAiRGVsZXRlZCB0YWcgJHRhZy4iCisJZG9uZQorCWV4aXQgJGhhZF9lcnJvcgogCTs7CiAgICAgLXYpCiAJc2hpZnQKQEAgLTEwMyw3ICsxMTIsMTAgQEAKIG9iamVjdD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IEhFQUQgIiRAIikgfHwgZXhpdCAxCiB0eXBlPSQoZ2l0LWNhdC1maWxlIC10ICRvYmplY3QpIHx8IGV4aXQgMQogdGFnZ2VyPSQoZ2l0LXZhciBHSVRfQ09NTUlUVEVSX0lERU5UKSB8fCBleGl0IDEKLTogJHt1c2VybmFtZTo9JChleHByICJ6JHRhZ2dlciIgOiAnelwoLio+XCknKX0KKwordGVzdCAtbiAiJHVzZXJuYW1lIiB8fAorCXVzZXJuYW1lPSQoZ2l0LXJlcG8tY29uZmlnIHVzZXIuc2lnbmluZ2tleSkgfHwKKwl1c2VybmFtZT0kKGV4cHIgInokdGFnZ2VyIiA6ICd6XCguKj5cKScpCiAKIHRyYXAgJ3JtIC1mICIkR0lUX0RJUiIvVEFHX1RNUCogIiRHSVRfRElSIi9UQUdfRklOQUxNU0cgIiRHSVRfRElSIi9UQUdfRURJVE1TRycgMAogCmRpZmYgLS1naXQgYS9naXQuYyBiL2dpdC5jCmluZGV4IDcyYTE0ODYuLmZiMDNhNTQgMTAwNjQ0Ci0tLSBhL2dpdC5jCisrKyBiL2dpdC5jCkBAIC0yMTQsMTYgKzIxNCwxNyBAQAogCQlpbnQgb3B0aW9uOwogCX0gY29tbWFuZHNbXSA9IHsKIAkJeyAiYWRkIiwgY21kX2FkZCwgUlVOX1NFVFVQIHwgTk9UX0JBUkUgfSwKLQkJeyAiYW5ub3RhdGUiLCBjbWRfYW5ub3RhdGUsIH0sCisJCXsgImFubm90YXRlIiwgY21kX2Fubm90YXRlLCBVU0VfUEFHRVIgfSwKIAkJeyAiYXBwbHkiLCBjbWRfYXBwbHkgfSwKIAkJeyAiYXJjaGl2ZSIsIGNtZF9hcmNoaXZlIH0sCi0JCXsgImJsYW1lIiwgY21kX2JsYW1lLCBSVU5fU0VUVVAgfCBVU0VfUEFHRVIgfSwKKwkJeyAiYmxhbWUiLCBjbWRfYmxhbWUsIFJVTl9TRVRVUCB9LAogCQl7ICJicmFuY2giLCBjbWRfYnJhbmNoLCBSVU5fU0VUVVAgfSwKIAkJeyAiY2F0LWZpbGUiLCBjbWRfY2F0X2ZpbGUsIFJVTl9TRVRVUCB9LAogCQl7ICJjaGVja291dC1pbmRleCIsIGNtZF9jaGVja291dF9pbmRleCwgUlVOX1NFVFVQIH0sCiAJCXsgImNoZWNrLXJlZi1mb3JtYXQiLCBjbWRfY2hlY2tfcmVmX2Zvcm1hdCB9LAogCQl7ICJjaGVycnkiLCBjbWRfY2hlcnJ5LCBSVU5fU0VUVVAgfSwKIAkJeyAiY29tbWl0LXRyZWUiLCBjbWRfY29tbWl0X3RyZWUsIFJVTl9TRVRVUCB9LAorCQl7ICJjb25maWciLCBjbWRfY29uZmlnIH0sCiAJCXsgImNvdW50LW9iamVjdHMiLCBjbWRfY291bnRfb2JqZWN0cywgUlVOX1NFVFVQIH0sCiAJCXsgImRlc2NyaWJlIiwgY21kX2Rlc2NyaWJlLCBSVU5fU0VUVVAgfSwKIAkJeyAiZGlmZiIsIGNtZF9kaWZmLCBSVU5fU0VUVVAgfCBVU0VfUEFHRVIgfSwKQEAgLTIzNCw2ICsyMzUsOCBAQAogCQl7ICJmbXQtbWVyZ2UtbXNnIiwgY21kX2ZtdF9tZXJnZV9tc2csIFJVTl9TRVRVUCB9LAogCQl7ICJmb3ItZWFjaC1yZWYiLCBjbWRfZm9yX2VhY2hfcmVmLCBSVU5fU0VUVVAgfSwKIAkJeyAiZm9ybWF0LXBhdGNoIiwgY21kX2Zvcm1hdF9wYXRjaCwgUlVOX1NFVFVQIH0sCisJCXsgImZzY2siLCBjbWRfZnNjaywgUlVOX1NFVFVQIH0sCisJCXsgImZzY2stb2JqZWN0cyIsIGNtZF9mc2NrLCBSVU5fU0VUVVAgfSwKIAkJeyAiZ2V0LXRhci1jb21taXQtaWQiLCBjbWRfZ2V0X3Rhcl9jb21taXRfaWQgfSwKIAkJeyAiZ3JlcCIsIGNtZF9ncmVwLCBSVU5fU0VUVVAgfSwKIAkJeyAiaGVscCIsIGNtZF9oZWxwIH0sCkBAIC0yNTQsNyArMjU3LDcgQEAKIAkJeyAicHVzaCIsIGNtZF9wdXNoLCBSVU5fU0VUVVAgfSwKIAkJeyAicmVhZC10cmVlIiwgY21kX3JlYWRfdHJlZSwgUlVOX1NFVFVQIH0sCiAJCXsgInJlZmxvZyIsIGNtZF9yZWZsb2csIFJVTl9TRVRVUCB9LAotCQl7ICJyZXBvLWNvbmZpZyIsIGNtZF9yZXBvX2NvbmZpZyB9LAorCQl7ICJyZXBvLWNvbmZpZyIsIGNtZF9jb25maWcgfSwKIAkJeyAicmVyZXJlIiwgY21kX3JlcmVyZSwgUlVOX1NFVFVQIH0sCiAJCXsgInJldi1saXN0IiwgY21kX3Jldl9saXN0LCBSVU5fU0VUVVAgfSwKIAkJeyAicmV2LXBhcnNlIiwgY21kX3Jldl9wYXJzZSwgUlVOX1NFVFVQIH0sCmRpZmYgLS1naXQgYS9naXRrIGIvZ2l0awppbmRleCAzZGFiYzY5Li4zMWQwYWFkIDEwMDc1NQotLS0gYS9naXRrCisrKyBiL2dpdGsKQEAgLTEyLDcgKzEyLDcgQEAKICAgICBpZiB7W2luZm8gZXhpc3RzIGVudihHSVRfRElSKV19IHsKIAlyZXR1cm4gJGVudihHSVRfRElSKQogICAgIH0gZWxzZSB7Ci0JcmV0dXJuICIuZ2l0IgorCXJldHVybiBbZXhlYyBnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcl0KICAgICB9CiB9CiAKQEAgLTYxOTMsNyArNjE5Myw3IEBACiAKIHNldCBnaXRlbmNvZGluZyB7fQogY2F0Y2ggewotICAgIHNldCBnaXRlbmNvZGluZyBbZXhlYyBnaXQgcmVwby1jb25maWcgLS1nZXQgaTE4bi5jb21taXRlbmNvZGluZ10KKyAgICBzZXQgZ2l0ZW5jb2RpbmcgW2V4ZWMgZ2l0IGNvbmZpZyAtLWdldCBpMThuLmNvbW1pdGVuY29kaW5nXQogfQogaWYgeyRnaXRlbmNvZGluZyA9PSAiIn0gewogICAgIHNldCBnaXRlbmNvZGluZyAidXRmLTgiCkBAIC02MjkzLDYgKzYyOTMsNyBAQAogc2V0IHBhdGNobnVtIDAKIHNldGNvb3JkcwogbWFrZXdpbmRvdword20gdGl0bGUgLiAiW2ZpbGUgdGFpbCAkYXJndjBdOiBbZmlsZSB0YWlsIFtwd2RdXSIKIHJlYWRyZWZzCiAKIGlmIHskY21kbGluZV9maWxlcyBuZSB7fSB8fCAkcmV2dHJlZWFyZ3MgbmUge319IHsKZGlmZiAtLWdpdCBhL2dpdHdlYi9naXR3ZWIucGVybCBiL2dpdHdlYi9naXR3ZWIucGVybAppbmRleCA4OGFmMmU2Li5iNjA2YzFkIDEwMDc1NQotLS0gYS9naXR3ZWIvZ2l0d2ViLnBlcmwKKysrIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCkBAIC05ODYsNyArOTg2LDcgQEAKIAkka2V5ID1+IHMvXmdpdHdlYlwuLy87CiAJcmV0dXJuIGlmICgka2V5ID1+IG0vXFcvKTsKIAotCW15IEB4ID0gKGdpdF9jbWQoKSwgJ3JlcG8tY29uZmlnJyk7CisJbXkgQHggPSAoZ2l0X2NtZCgpLCAnY29uZmlnJyk7CiAJaWYgKGRlZmluZWQgJHR5cGUpIHsgcHVzaCBAeCwgJHR5cGU7IH0KIAlwdXNoIEB4LCAiLS1nZXQiOwogCXB1c2ggQHgsICJnaXR3ZWIuJGtleSI7CmRpZmYgLS1naXQgYS9odHRwLWZldGNoLmMgYi9odHRwLWZldGNoLmMKaW5kZXggNjdkZmIwYS4uOWY3OTBhMCAxMDA2NDQKLS0tIGEvaHR0cC1mZXRjaC5jCisrKyBiL2h0dHAtZmV0Y2guYwpAQCAtMTAwMyw3ICsxMDAzLDYgQEAKIAlpbnQgYXJnID0gMTsKIAlpbnQgcmMgPSAwOwogCi0Jc2V0dXBfaWRlbnQoKTsKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwogCkBAIC0xMDcwLDcgKzEwNjksNyBAQAogCQlmcHJpbnRmKHN0ZGVyciwKICJTb21lIGxvb3NlIG9iamVjdCB3ZXJlIGZvdW5kIHRvIGJlIGNvcnJ1cHQsIGJ1dCB0aGV5IG1pZ2h0IGJlIGp1c3RcbiIKICJhIGZhbHNlICc0MDQgTm90IEZvdW5kJyBlcnJvciBtZXNzYWdlIHNlbnQgd2l0aCBpbmNvcnJlY3QgSFRUUFxuIgotInN0YXR1cyBjb2RlLiAgU3VnZ2VzdCBydW5uaW5nIGdpdCBmc2NrLW9iamVjdHMuXG4iKTsKKyJzdGF0dXMgY29kZS4gIFN1Z2dlc3QgcnVubmluZyBnaXQtZnNjay5cbiIpOwogCX0KIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9odHRwLXB1c2guYyBiL2h0dHAtcHVzaC5jCmluZGV4IDBhMTVmNTMuLmIxMjhjMDEgMTAwNjQ0Ci0tLSBhL2h0dHAtcHVzaC5jCisrKyBiL2h0dHAtcHVzaC5jCkBAIC0yMjk5LDcgKzIyOTksNiBAQAogCXN0cnVjdCByZWYgKnJlZjsKIAogCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKLQlzZXR1cF9pZGVudCgpOwogCiAJcmVtb3RlID0geGNhbGxvYyhzaXplb2YoKnJlbW90ZSksIDEpOwogCmRpZmYgLS1naXQgYS9pZGVudC5jIGIvaWRlbnQuYwppbmRleCA2YWQ4ZmVkLi5hNmZjN2I1IDEwMDY0NAotLS0gYS9pZGVudC5jCisrKyBiL2lkZW50LmMKQEAgLTQzLDE5ICs0MywxMyBAQAogCiB9CiAKLWludCBzZXR1cF9pZGVudCh2b2lkKQorc3RhdGljIHZvaWQgY29weV9lbWFpbChzdHJ1Y3QgcGFzc3dkICpwdykKIHsKLQlpbnQgbGVuOwotCXN0cnVjdCBwYXNzd2QgKnB3ID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOwotCi0JaWYgKCFwdykKLQkJZGllKCJZb3UgZG9uJ3QgZXhpc3QuIEdvIGF3YXkhIik7Ci0KLQkvKiBHZXQgdGhlIG5hbWUgKCJnZWNvcyIpICovCi0JY29weV9nZWNvcyhwdywgZ2l0X2RlZmF1bHRfbmFtZSwgc2l6ZW9mKGdpdF9kZWZhdWx0X25hbWUpKTsKLQotCS8qIE1ha2UgdXAgYSBmYWtlIGVtYWlsIGFkZHJlc3MgKG5hbWUgKyAnQCcgKyBob3N0bmFtZSBbKyAnLicgKyBkb21haW5uYW1lXSkgKi8KLQlsZW4gPSBzdHJsZW4ocHctPnB3X25hbWUpOworCS8qCisJICogTWFrZSB1cCBhIGZha2UgZW1haWwgYWRkcmVzcworCSAqIChuYW1lICsgJ0AnICsgaG9zdG5hbWUgWysgJy4nICsgZG9tYWlubmFtZV0pCisJICovCisJaW50IGxlbiA9IHN0cmxlbihwdy0+cHdfbmFtZSk7CiAJaWYgKGxlbiA+IHNpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkvMikKIAkJZGllKCJZb3VyIHN5c2FkbWluIG11c3QgaGF0ZSB5b3UhIik7CiAJbWVtY3B5KGdpdF9kZWZhdWx0X2VtYWlsLCBwdy0+cHdfbmFtZSwgbGVuKTsKQEAgLTY4LDEzICs2MiwzNyBAQAogCQlsZW4gPSBzdHJsZW4oZ2l0X2RlZmF1bHRfZW1haWwpOwogCQlnaXRfZGVmYXVsdF9lbWFpbFtsZW4rK10gPSAnLic7CiAJCWlmIChoZSAmJiAoZG9tYWlubmFtZSA9IHN0cmNocihoZS0+aF9uYW1lLCAnLicpKSkKLQkJCXN0cmxjcHkoZ2l0X2RlZmF1bHRfZW1haWwgKyBsZW4sIGRvbWFpbm5hbWUgKyAxLCBzaXplb2YoZ2l0X2RlZmF1bHRfZW1haWwpIC0gbGVuKTsKKwkJCXN0cmxjcHkoZ2l0X2RlZmF1bHRfZW1haWwgKyBsZW4sIGRvbWFpbm5hbWUgKyAxLAorCQkJCXNpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkgLSBsZW4pOwogCQllbHNlCi0JCQlzdHJsY3B5KGdpdF9kZWZhdWx0X2VtYWlsICsgbGVuLCAiKG5vbmUpIiwgc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKSAtIGxlbik7CisJCQlzdHJsY3B5KGdpdF9kZWZhdWx0X2VtYWlsICsgbGVuLCAiKG5vbmUpIiwKKwkJCQlzaXplb2YoZ2l0X2RlZmF1bHRfZW1haWwpIC0gbGVuKTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2lkZW50KHZvaWQpCit7CisJc3RydWN0IHBhc3N3ZCAqcHcgPSBOVUxMOworCisJLyogR2V0IHRoZSBuYW1lICgiZ2Vjb3MiKSAqLworCWlmICghZ2l0X2RlZmF1bHRfbmFtZVswXSkgeworCQlwdyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKwkJaWYgKCFwdykKKwkJCWRpZSgiWW91IGRvbid0IGV4aXN0LiBHbyBhd2F5ISIpOworCQljb3B5X2dlY29zKHB3LCBnaXRfZGVmYXVsdF9uYW1lLCBzaXplb2YoZ2l0X2RlZmF1bHRfbmFtZSkpOworCX0KKworCWlmICghZ2l0X2RlZmF1bHRfZW1haWxbMF0pIHsKKwkJaWYgKCFwdykKKwkJCXB3ID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworCQlpZiAoIXB3KQorCQkJZGllKCJZb3UgZG9uJ3QgZXhpc3QuIEdvIGF3YXkhIik7CisJCWNvcHlfZW1haWwocHcpOworCX0KKwogCS8qIEFuZCBzZXQgdGhlIGRlZmF1bHQgZGF0ZSAqLwotCWRhdGVzdGFtcChnaXRfZGVmYXVsdF9kYXRlLCBzaXplb2YoZ2l0X2RlZmF1bHRfZGF0ZSkpOwotCXJldHVybiAwOworCWlmICghZ2l0X2RlZmF1bHRfZGF0ZVswXSkKKwkJZGF0ZXN0YW1wKGdpdF9kZWZhdWx0X2RhdGUsIHNpemVvZihnaXRfZGVmYXVsdF9kYXRlKSk7CiB9CiAKIHN0YXRpYyBpbnQgYWRkX3JhdyhjaGFyICpidWYsIGludCBzaXplLCBpbnQgb2Zmc2V0LCBjb25zdCBjaGFyICpzdHIpCkBAIC0xNjAsOCArMTc4LDggQEAKICJcbiIKICJSdW5cbiIKICJcbiIKLSIgIGdpdCByZXBvLWNvbmZpZyB1c2VyLmVtYWlsIFwieW91QGVtYWlsLmNvbVwiXG4iCi0iICBnaXQgcmVwby1jb25maWcgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgIGdpdCBjb25maWcgdXNlci5lbWFpbCBcInlvdUBlbWFpbC5jb21cIlxuIgorIiAgZ2l0IGNvbmZpZyB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgogIlxuIgogIlRvIHNldCB0aGUgaWRlbnRpdHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgogIkFkZCAtLWdsb2JhbCB0byBzZXQgeW91ciBhY2NvdW50XCdzIGRlZmF1bHRcbiIKQEAgLTE3NCwxOCArMTkyLDI4IEBACiAJY2hhciBkYXRlWzUwXTsKIAlpbnQgaTsKIAorCXNldHVwX2lkZW50KCk7CiAJaWYgKCFuYW1lKQogCQluYW1lID0gZ2l0X2RlZmF1bHRfbmFtZTsKIAlpZiAoIWVtYWlsKQogCQllbWFpbCA9IGdpdF9kZWZhdWx0X2VtYWlsOwogCiAJaWYgKCEqbmFtZSkgewotCQlpZiAobmFtZSA9PSBnaXRfZGVmYXVsdF9uYW1lICYmIGVudl9oaW50KSB7CisJCXN0cnVjdCBwYXNzd2QgKnB3OworCisJCWlmICgwIDw9IGVycm9yX29uX25vX25hbWUgJiYKKwkJICAgIG5hbWUgPT0gZ2l0X2RlZmF1bHRfbmFtZSAmJiBlbnZfaGludCkgewogCQkJZnByaW50ZihzdGRlcnIsIGVudl9oaW50LCBhdV9lbnYsIGNvX2Vudik7CiAJCQllbnZfaGludCA9IE5VTEw7IC8qIHdhcm4gb25seSBvbmNlLCBmb3IgImdpdC12YXIgLWwiICovCiAJCX0KLQkJaWYgKGVycm9yX29uX25vX25hbWUpCisJCWlmICgwIDwgZXJyb3Jfb25fbm9fbmFtZSkKIAkJCWRpZSgiZW1wdHkgaWRlbnQgJXMgPCVzPiBub3QgYWxsb3dlZCIsIG5hbWUsIGVtYWlsKTsKKwkJcHcgPSBnZXRwd3VpZChnZXR1aWQoKSk7CisJCWlmICghcHcpCisJCQlkaWUoIllvdSBkb24ndCBleGlzdC4gR28gYXdheSEiKTsKKwkJc3RybGNweShnaXRfZGVmYXVsdF9uYW1lLCBwdy0+cHdfbmFtZSwKKwkJCXNpemVvZihnaXRfZGVmYXVsdF9uYW1lKSk7CisJCW5hbWUgPSBnaXRfZGVmYXVsdF9uYW1lOwogCX0KIAogCXN0cmNweShkYXRlLCBnaXRfZGVmYXVsdF9kYXRlKTsKQEAgLTIxOCwxOCArMjQ2LDMgQEAKIAkJCSBnZXRlbnYoIkdJVF9DT01NSVRURVJfREFURSIpLAogCQkJIGVycm9yX29uX25vX25hbWUpOwogfQotCi12b2lkIGlnbm9yZV9taXNzaW5nX2NvbW1pdHRlcl9uYW1lKCkKLXsKLQkvKiBJZiB3ZSBkaWQgbm90IGdldCBhIG5hbWUgZnJvbSB0aGUgdXNlcidzIGdlY29zIGVudHJ5IHRoZW4KLQkgKiBnaXRfZGVmYXVsdF9uYW1lIGlzIGVtcHR5OyBzbyBpbnN0ZWFkIGxvYWQgdGhlIHVzZXJuYW1lCi0JICogaW50byBpdCBhcyBhICdnb29kIGVub3VnaCBmb3Igbm93JyBhcHByb3hpbWF0aW9uIG9mIHdobwotCSAqIHRoaXMgdXNlciBpcy4KLQkgKi8KLQlpZiAoISpnaXRfZGVmYXVsdF9uYW1lKSB7Ci0JCXN0cnVjdCBwYXNzd2QgKnB3ID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOwotCQlpZiAoIXB3KQotCQkJZGllKCJZb3UgZG9uJ3QgZXhpc3QuIEdvIGF3YXkhIik7Ci0JCXN0cmxjcHkoZ2l0X2RlZmF1bHRfbmFtZSwgcHctPnB3X25hbWUsIHNpemVvZihnaXRfZGVmYXVsdF9uYW1lKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbG9jYWwtZmV0Y2guYyBiL2xvY2FsLWZldGNoLmMKaW5kZXggY2Y5OWNiNy4uN2NmZThiMyAxMDA2NDQKLS0tIGEvbG9jYWwtZmV0Y2guYworKysgYi9sb2NhbC1mZXRjaC5jCkBAIC0yMTAsNyArMjEwLDYgQEAKIAljaGFyICoqY29tbWl0X2lkOwogCWludCBhcmcgPSAxOwogCi0Jc2V0dXBfaWRlbnQoKTsKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwogCmRpZmYgLS1naXQgYS9sb2ctdHJlZS5jIGIvbG9nLXRyZWUuYwppbmRleCAzNWJlMzNhLi5kOGNhMzZiIDEwMDY0NAotLS0gYS9sb2ctdHJlZS5jCisrKyBiL2xvZy10cmVlLmMKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgogI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKIAogc3RhdGljIHZvaWQgc2hvd19wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGFiYnJldikKIHsKQEAgLTIyMyw2ICsyMjQsMTQgQEAKIAkJcHJpbnRmKCIlcyIsCiAJCSAgICAgICBkaWZmX2dldF9jb2xvcihvcHQtPmRpZmZvcHQuY29sb3JfZGlmZiwgRElGRl9SRVNFVCkpOwogCQlwdXRjaGFyKG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FID8gJyAnIDogJ1xuJyk7CisJCWlmIChvcHQtPnJlZmxvZ19pbmZvKSB7CisJCQlzaG93X3JlZmxvZ19tZXNzYWdlKG9wdC0+cmVmbG9nX2luZm8sCisJCQkJICAgIG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKTs7CisJCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpIHsKKwkJCQlwcmludGYoIiVzIiwgc2VwKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmMgYi9tZXJnZS1yZWN1cnNpdmUuYwppbmRleCBiNGFjYmI3Li5mYTMyMGViIDEwMDY0NAotLS0gYS9tZXJnZS1yZWN1cnNpdmUuYworKysgYi9tZXJnZS1yZWN1cnNpdmUuYwpAQCAtNjcsMjcgKzY3LDc1IEBACiAJdW5zaWduZWQgcHJvY2Vzc2VkOjE7CiB9OwogCitzdHJ1Y3Qgb3V0cHV0X2J1ZmZlcgoreworCXN0cnVjdCBvdXRwdXRfYnVmZmVyICpuZXh0OworCWNoYXIgKnN0cjsKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGF0aF9saXN0IGN1cnJlbnRfZmlsZV9zZXQgPSB7TlVMTCwgMCwgMCwgMX07CiBzdGF0aWMgc3RydWN0IHBhdGhfbGlzdCBjdXJyZW50X2RpcmVjdG9yeV9zZXQgPSB7TlVMTCwgMCwgMCwgMX07CiAKLXN0YXRpYyBpbnQgb3V0cHV0X2luZGVudCA9IDA7CitzdGF0aWMgaW50IGNhbGxfZGVwdGggPSAwOworc3RhdGljIGludCB2ZXJib3NpdHkgPSAyOworc3RhdGljIGludCBidWZmZXJfb3V0cHV0ID0gMTsKK3N0YXRpYyBpbnQgZG9fcHJvZ3Jlc3MgPSAxOworc3RhdGljIHVuc2lnbmVkIGxhc3RfcGVyY2VudDsKK3N0YXRpYyB1bnNpZ25lZCBtZXJnZWRfY250Oworc3RhdGljIHVuc2lnbmVkIHRvdGFsX2NudDsKK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgcHJvZ3Jlc3NfdXBkYXRlOworc3RhdGljIHN0cnVjdCBvdXRwdXRfYnVmZmVyICpvdXRwdXRfbGlzdCwgKm91dHB1dF9lbmQ7CiAKLXN0YXRpYyB2b2lkIG91dHB1dChjb25zdCBjaGFyICpmbXQsIC4uLikKK3N0YXRpYyBpbnQgc2hvdyAoaW50IHYpCit7CisJcmV0dXJuICghY2FsbF9kZXB0aCAmJiB2ZXJib3NpdHkgPj0gdikgfHwgdmVyYm9zaXR5ID49IDU7Cit9CisKK3N0YXRpYyB2b2lkIG91dHB1dChpbnQgdiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwotCWludCBpOwotCWZvciAoaSA9IG91dHB1dF9pbmRlbnQ7IGktLTspCi0JCWZwdXRzKCIgICIsIHN0ZG91dCk7CiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQl2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXJncyk7CisJaWYgKGJ1ZmZlcl9vdXRwdXQgJiYgc2hvdyh2KSkgeworCQlzdHJ1Y3Qgb3V0cHV0X2J1ZmZlciAqYiA9IHhtYWxsb2Moc2l6ZW9mKCpiKSk7CisJCW5mdmFzcHJpbnRmKCZiLT5zdHIsIGZtdCwgYXJncyk7CisJCWItPm5leHQgPSBOVUxMOworCQlpZiAob3V0cHV0X2VuZCkKKwkJCW91dHB1dF9lbmQtPm5leHQgPSBiOworCQllbHNlCisJCQlvdXRwdXRfbGlzdCA9IGI7CisJCW91dHB1dF9lbmQgPSBiOworCX0gZWxzZSBpZiAoc2hvdyh2KSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gY2FsbF9kZXB0aDsgaS0tOykKKwkJCWZwdXRzKCIgICIsIHN0ZG91dCk7CisJCXZmcHJpbnRmKHN0ZG91dCwgZm10LCBhcmdzKTsKKwkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwl9CiAJdmFfZW5kKGFyZ3MpOwotCWZwdXRjKCdcbicsIHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX291dHB1dCgpCit7CisJc3RydWN0IG91dHB1dF9idWZmZXIgKmIsICpuOworCWZvciAoYiA9IG91dHB1dF9saXN0OyBiOyBiID0gbikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gY2FsbF9kZXB0aDsgaS0tOykKKwkJCWZwdXRzKCIgICIsIHN0ZG91dCk7CisJCWZwdXRzKGItPnN0ciwgc3Rkb3V0KTsKKwkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJbiA9IGItPm5leHQ7CisJCWZyZWUoYi0+c3RyKTsKKwkJZnJlZShiKTsKKwl9CisJb3V0cHV0X2xpc3QgPSBOVUxMOworCW91dHB1dF9lbmQgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBvdXRwdXRfY29tbWl0X3RpdGxlKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKIAlpbnQgaTsKLQlmb3IgKGkgPSBvdXRwdXRfaW5kZW50OyBpLS07KQorCWZsdXNoX291dHB1dCgpOworCWZvciAoaSA9IGNhbGxfZGVwdGg7IGktLTspCiAJCWZwdXRzKCIgICIsIHN0ZG91dCk7CiAJaWYgKGNvbW1pdC0+dXRpbCkKIAkJcHJpbnRmKCJ2aXJ0dWFsICVzXG4iLCAoY2hhciAqKWNvbW1pdC0+dXRpbCk7CkBAIC0xMTAsNiArMTU4LDM5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBwcm9ncmVzc19pbnRlcnZhbChpbnQgc2lnbnVtKQoreworCXByb2dyZXNzX3VwZGF0ZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3Byb2dyZXNzX3NpZ25hbCh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24gc2E7CisJc3RydWN0IGl0aW1lcnZhbCB2OworCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisJc2Euc2FfaGFuZGxlciA9IHByb2dyZXNzX2ludGVydmFsOworCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKwlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisJc2lnYWN0aW9uKFNJR0FMUk0sICZzYSwgTlVMTCk7CisKKwl2Lml0X2ludGVydmFsLnR2X3NlYyA9IDE7CisJdi5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKKwl2Lml0X3ZhbHVlID0gdi5pdF9pbnRlcnZhbDsKKwlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ2LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGxheV9wcm9ncmVzcygpCit7CisJdW5zaWduZWQgcGVyY2VudCA9IHRvdGFsX2NudCA/IG1lcmdlZF9jbnQgKiAxMDAgLyB0b3RhbF9jbnQgOiAwOworCWlmIChwcm9ncmVzc191cGRhdGUgfHwgcGVyY2VudCAhPSBsYXN0X3BlcmNlbnQpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlNHUlJSAoJXUvJXUpIGRvbmVcciIsCisJCQlwZXJjZW50LCBtZXJnZWRfY250LCB0b3RhbF9jbnQpOworCQlwcm9ncmVzc191cGRhdGUgPSAwOworCQlsYXN0X3BlcmNlbnQgPSBwZXJjZW50OworCX0KK30KKwogc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9jYWNoZV9lbnRyeSh1bnNpZ25lZCBpbnQgbW9kZSwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlLCBpbnQgcmVmcmVzaCkKIHsKQEAgLTI3MiwxMSArMzUzLDE0IEBACiAJaW50IGk7CiAKIAl1bm1lcmdlZC0+c3RyZHVwX3BhdGhzID0gMTsKKwl0b3RhbF9jbnQgKz0gYWN0aXZlX25yOwogCi0JZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrLCBtZXJnZWRfY250KyspIHsKIAkJc3RydWN0IHBhdGhfbGlzdF9pdGVtICppdGVtOwogCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZTsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJaWYgKGRvX3Byb2dyZXNzKQorCQkJZGlzcGxheV9wcm9ncmVzcygpOwogCQlpZiAoIWNlX3N0YWdlKGNlKSkKIAkJCWNvbnRpbnVlOwogCkBAIC02NDAsMTMgKzcyNCwxMyBAQAogCWNvbnN0IGNoYXIgKmRzdF9uYW1lMiA9IHJlbjJfZHN0OwogCWlmIChwYXRoX2xpc3RfaGFzX3BhdGgoJmN1cnJlbnRfZGlyZWN0b3J5X3NldCwgcmVuMV9kc3QpKSB7CiAJCWRzdF9uYW1lMSA9IGRlbFtkZWxwKytdID0gdW5pcXVlX3BhdGgocmVuMV9kc3QsIGJyYW5jaDEpOwotCQlvdXRwdXQoIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIiwKKwkJb3V0cHV0KDEsICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRlZCBhcyAlcyBpbnN0ZWFkIiwKIAkJICAgICAgIHJlbjFfZHN0LCBicmFuY2gyLCBkc3RfbmFtZTEpOwogCQlyZW1vdmVfZmlsZSgwLCByZW4xX2RzdCwgMCk7CiAJfQogCWlmIChwYXRoX2xpc3RfaGFzX3BhdGgoJmN1cnJlbnRfZGlyZWN0b3J5X3NldCwgcmVuMl9kc3QpKSB7CiAJCWRzdF9uYW1lMiA9IGRlbFtkZWxwKytdID0gdW5pcXVlX3BhdGgocmVuMl9kc3QsIGJyYW5jaDIpOwotCQlvdXRwdXQoIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIiwKKwkJb3V0cHV0KDEsICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRlZCBhcyAlcyBpbnN0ZWFkIiwKIAkJICAgICAgIHJlbjJfZHN0LCBicmFuY2gxLCBkc3RfbmFtZTIpOwogCQlyZW1vdmVfZmlsZSgwLCByZW4yX2RzdCwgMCk7CiAJfQpAQCAtNjYwLDcgKzc0NCw3IEBACiAJCQkJY29uc3QgY2hhciAqYnJhbmNoMSkKIHsKIAljaGFyICpuZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKHJlbjEtPnBhaXItPnR3by0+cGF0aCwgYnJhbmNoMSk7Ci0Jb3V0cHV0KCJSZW5hbWluZyAlcyB0byAlcyBpbnN0ZWFkIiwgcmVuMS0+cGFpci0+b25lLT5wYXRoLCBuZXdfcGF0aCk7CisJb3V0cHV0KDEsICJSZW5hbWVkICVzIHRvICVzIGluc3RlYWQiLCByZW4xLT5wYWlyLT5vbmUtPnBhdGgsIG5ld19wYXRoKTsKIAlyZW1vdmVfZmlsZSgwLCByZW4xLT5wYWlyLT50d28tPnBhdGgsIDApOwogCXVwZGF0ZV9maWxlKDAsIHJlbjEtPnBhaXItPnR3by0+c2hhMSwgcmVuMS0+cGFpci0+dHdvLT5tb2RlLCBuZXdfcGF0aCk7CiAJZnJlZShuZXdfcGF0aCk7CkBAIC02NzMsNyArNzU3LDcgQEAKIHsKIAljaGFyICpuZXdfcGF0aDEgPSB1bmlxdWVfcGF0aChyZW4xLT5wYWlyLT50d28tPnBhdGgsIGJyYW5jaDEpOwogCWNoYXIgKm5ld19wYXRoMiA9IHVuaXF1ZV9wYXRoKHJlbjItPnBhaXItPnR3by0+cGF0aCwgYnJhbmNoMik7Ci0Jb3V0cHV0KCJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIsCisJb3V0cHV0KDEsICJSZW5hbWVkICVzIHRvICVzIGFuZCAlcyB0byAlcyBpbnN0ZWFkIiwKIAkgICAgICAgcmVuMS0+cGFpci0+b25lLT5wYXRoLCBuZXdfcGF0aDEsCiAJICAgICAgIHJlbjItPnBhaXItPm9uZS0+cGF0aCwgbmV3X3BhdGgyKTsKIAlyZW1vdmVfZmlsZSgwLCByZW4xLT5wYWlyLT50d28tPnBhdGgsIDApOwpAQCAtNzY2LDcgKzg1MCw3IEBACiAJCQlyZW4yLT5wcm9jZXNzZWQgPSAxOwogCQkJaWYgKHN0cmNtcChyZW4xX2RzdCwgcmVuMl9kc3QpICE9IDApIHsKIAkJCQljbGVhbl9tZXJnZSA9IDA7Ci0JCQkJb3V0cHV0KCJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6ICIKKwkJCQlvdXRwdXQoMSwgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogIgogCQkJCSAgICAgICAiUmVuYW1lICVzLT4lcyBpbiBicmFuY2ggJXMgIgogCQkJCSAgICAgICAicmVuYW1lICVzLT4lcyBpbiAlcyIsCiAJCQkJICAgICAgIHNyYywgcmVuMV9kc3QsIGJyYW5jaDEsCkBAIC03ODEsMTMgKzg2NSwxMyBAQAogCQkJCQkJIGJyYW5jaDEsCiAJCQkJCQkgYnJhbmNoMik7CiAJCQkJaWYgKG1maS5tZXJnZSB8fCAhbWZpLmNsZWFuKQotCQkJCQlvdXRwdXQoIlJlbmFtaW5nICVzLT4lcyIsIHNyYywgcmVuMV9kc3QpOworCQkJCQlvdXRwdXQoMSwgIlJlbmFtZWQgJXMtPiVzIiwgc3JjLCByZW4xX2RzdCk7CiAKIAkJCQlpZiAobWZpLm1lcmdlKQotCQkJCQlvdXRwdXQoIkF1dG8tbWVyZ2luZyAlcyIsIHJlbjFfZHN0KTsKKwkJCQkJb3V0cHV0KDIsICJBdXRvLW1lcmdlZCAlcyIsIHJlbjFfZHN0KTsKIAogCQkJCWlmICghbWZpLmNsZWFuKSB7Ci0JCQkJCW91dHB1dCgiQ09ORkxJQ1QgKGNvbnRlbnQpOiBtZXJnZSBjb25mbGljdCBpbiAlcyIsCisJCQkJCW91dHB1dCgxLCAiQ09ORkxJQ1QgKGNvbnRlbnQpOiBtZXJnZSBjb25mbGljdCBpbiAlcyIsCiAJCQkJCSAgICAgICByZW4xX2RzdCk7CiAJCQkJCWNsZWFuX21lcmdlID0gMDsKIApAQCAtODE4LDE0ICs5MDIsMTQgQEAKIAogCQkJaWYgKHBhdGhfbGlzdF9oYXNfcGF0aCgmY3VycmVudF9kaXJlY3Rvcnlfc2V0LCByZW4xX2RzdCkpIHsKIAkJCQljbGVhbl9tZXJnZSA9IDA7Ci0JCQkJb3V0cHV0KCJDT05GTElDVCAocmVuYW1lL2RpcmVjdG9yeSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMgIgorCQkJCW91dHB1dCgxLCAiQ09ORkxJQ1QgKHJlbmFtZS9kaXJlY3RvcnkpOiBSZW5hbWVkICVzLT4lcyBpbiAlcyAiCiAJCQkJICAgICAgICIgZGlyZWN0b3J5ICVzIGFkZGVkIGluICVzIiwKIAkJCQkgICAgICAgcmVuMV9zcmMsIHJlbjFfZHN0LCBicmFuY2gxLAogCQkJCSAgICAgICByZW4xX2RzdCwgYnJhbmNoMik7CiAJCQkJY29uZmxpY3RfcmVuYW1lX2RpcihyZW4xLCBicmFuY2gxKTsKIAkJCX0gZWxzZSBpZiAoc2hhX2VxKHNyY19vdGhlci5zaGExLCBudWxsX3NoYTEpKSB7CiAJCQkJY2xlYW5fbWVyZ2UgPSAwOwotCQkJCW91dHB1dCgiQ09ORkxJQ1QgKHJlbmFtZS9kZWxldGUpOiBSZW5hbWUgJXMtPiVzIGluICVzICIKKwkJCQlvdXRwdXQoMSwgIkNPTkZMSUNUIChyZW5hbWUvZGVsZXRlKTogUmVuYW1lZCAlcy0+JXMgaW4gJXMgIgogCQkJCSAgICAgICAiYW5kIGRlbGV0ZWQgaW4gJXMiLAogCQkJCSAgICAgICByZW4xX3NyYywgcmVuMV9kc3QsIGJyYW5jaDEsCiAJCQkJICAgICAgIGJyYW5jaDIpOwpAQCAtODM0LDE5ICs5MTgsMTkgQEAKIAkJCQljb25zdCBjaGFyICpuZXdfcGF0aDsKIAkJCQljbGVhbl9tZXJnZSA9IDA7CiAJCQkJdHJ5X21lcmdlID0gMTsKLQkJCQlvdXRwdXQoIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gIgorCQkJCW91dHB1dCgxLCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWVkICVzLT4lcyBpbiAlcy4gIgogCQkJCSAgICAgICAiJXMgYWRkZWQgaW4gJXMiLAogCQkJCSAgICAgICByZW4xX3NyYywgcmVuMV9kc3QsIGJyYW5jaDEsCiAJCQkJICAgICAgIHJlbjFfZHN0LCBicmFuY2gyKTsKIAkJCQluZXdfcGF0aCA9IHVuaXF1ZV9wYXRoKHJlbjFfZHN0LCBicmFuY2gyKTsKLQkJCQlvdXRwdXQoIkFkZGluZyBhcyAlcyBpbnN0ZWFkIiwgbmV3X3BhdGgpOworCQkJCW91dHB1dCgxLCAiQWRkZWQgYXMgJXMgaW5zdGVhZCIsIG5ld19wYXRoKTsKIAkJCQl1cGRhdGVfZmlsZSgwLCBkc3Rfb3RoZXIuc2hhMSwgZHN0X290aGVyLm1vZGUsIG5ld19wYXRoKTsKIAkJCX0gZWxzZSBpZiAoKGl0ZW0gPSBwYXRoX2xpc3RfbG9va3VwKHJlbjFfZHN0LCByZW5hbWVzMkRzdCkpKSB7CiAJCQkJcmVuMiA9IGl0ZW0tPnV0aWw7CiAJCQkJY2xlYW5fbWVyZ2UgPSAwOwogCQkJCXJlbjItPnByb2Nlc3NlZCA9IDE7Ci0JCQkJb3V0cHV0KCJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICIKLQkJCQkgICAgICAgIlJlbmFtZSAlcy0+JXMgaW4gJXMiLAorCQkJCW91dHB1dCgxLCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWVkICVzLT4lcyBpbiAlcy4gIgorCQkJCSAgICAgICAiUmVuYW1lZCAlcy0+JXMgaW4gJXMiLAogCQkJCSAgICAgICByZW4xX3NyYywgcmVuMV9kc3QsIGJyYW5jaDEsCiAJCQkJICAgICAgIHJlbjItPnBhaXItPm9uZS0+cGF0aCwgcmVuMi0+cGFpci0+dHdvLT5wYXRoLCBicmFuY2gyKTsKIAkJCQljb25mbGljdF9yZW5hbWVfcmVuYW1lXzIocmVuMSwgYnJhbmNoMSwgcmVuMiwgYnJhbmNoMik7CkBAIC04NzAsMTEgKzk1NCwxMSBAQAogCQkJCQkJYV9icmFuY2gsIGJfYnJhbmNoKTsKIAogCQkJCWlmIChtZmkubWVyZ2UgfHwgIW1maS5jbGVhbikKLQkJCQkJb3V0cHV0KCJSZW5hbWluZyAlcyA9PiAlcyIsIHJlbjFfc3JjLCByZW4xX2RzdCk7CisJCQkJCW91dHB1dCgxLCAiUmVuYW1lZCAlcyA9PiAlcyIsIHJlbjFfc3JjLCByZW4xX2RzdCk7CiAJCQkJaWYgKG1maS5tZXJnZSkKLQkJCQkJb3V0cHV0KCJBdXRvLW1lcmdpbmcgJXMiLCByZW4xX2RzdCk7CisJCQkJCW91dHB1dCgyLCAiQXV0by1tZXJnZWQgJXMiLCByZW4xX2RzdCk7CiAJCQkJaWYgKCFtZmkuY2xlYW4pIHsKLQkJCQkJb3V0cHV0KCJDT05GTElDVCAocmVuYW1lL21vZGlmeSk6IE1lcmdlIGNvbmZsaWN0IGluICVzIiwKKwkJCQkJb3V0cHV0KDEsICJDT05GTElDVCAocmVuYW1lL21vZGlmeSk6IE1lcmdlIGNvbmZsaWN0IGluICVzIiwKIAkJCQkJICAgICAgIHJlbjFfZHN0KTsKIAkJCQkJY2xlYW5fbWVyZ2UgPSAwOwogCkBAIC05MjIsMjAgKzEwMDYsMjAgQEAKIAkJCS8qIERlbGV0ZWQgaW4gYm90aCBvciBkZWxldGVkIGluIG9uZSBhbmQKIAkJCSAqIHVuY2hhbmdlZCBpbiB0aGUgb3RoZXIgKi8KIAkJCWlmIChhX3NoYSkKLQkJCQlvdXRwdXQoIlJlbW92aW5nICVzIiwgcGF0aCk7CisJCQkJb3V0cHV0KDIsICJSZW1vdmVkICVzIiwgcGF0aCk7CiAJCQkvKiBkbyBub3QgdG91Y2ggd29ya2luZyBmaWxlIGlmIGl0IGRpZCBub3QgZXhpc3QgKi8KIAkJCXJlbW92ZV9maWxlKDEsIHBhdGgsICFhX3NoYSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBEZWxldGVkIGluIG9uZSBhbmQgY2hhbmdlZCBpbiB0aGUgb3RoZXIgKi8KIAkJCWNsZWFuX21lcmdlID0gMDsKIAkJCWlmICghYV9zaGEpIHsKLQkJCQlvdXRwdXQoIkNPTkZMSUNUIChkZWxldGUvbW9kaWZ5KTogJXMgZGVsZXRlZCBpbiAlcyAiCisJCQkJb3V0cHV0KDEsICJDT05GTElDVCAoZGVsZXRlL21vZGlmeSk6ICVzIGRlbGV0ZWQgaW4gJXMgIgogCQkJCSAgICAgICAiYW5kIG1vZGlmaWVkIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgaW4gdHJlZS4iLAogCQkJCSAgICAgICBwYXRoLCBicmFuY2gxLAogCQkJCSAgICAgICBicmFuY2gyLCBicmFuY2gyLCBwYXRoKTsKIAkJCQl1cGRhdGVfZmlsZSgwLCBiX3NoYSwgYl9tb2RlLCBwYXRoKTsKIAkJCX0gZWxzZSB7Ci0JCQkJb3V0cHV0KCJDT05GTElDVCAoZGVsZXRlL21vZGlmeSk6ICVzIGRlbGV0ZWQgaW4gJXMgIgorCQkJCW91dHB1dCgxLCAiQ09ORkxJQ1QgKGRlbGV0ZS9tb2RpZnkpOiAlcyBkZWxldGVkIGluICVzICIKIAkJCQkgICAgICAgImFuZCBtb2RpZmllZCBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0IGluIHRyZWUuIiwKIAkJCQkgICAgICAgcGF0aCwgYnJhbmNoMiwKIAkJCQkgICAgICAgYnJhbmNoMSwgYnJhbmNoMSwgcGF0aCk7CkBAIC05NjgsMTMgKzEwNTIsMTMgQEAKIAkJaWYgKHBhdGhfbGlzdF9oYXNfcGF0aCgmY3VycmVudF9kaXJlY3Rvcnlfc2V0LCBwYXRoKSkgewogCQkJY29uc3QgY2hhciAqbmV3X3BhdGggPSB1bmlxdWVfcGF0aChwYXRoLCBhZGRfYnJhbmNoKTsKIAkJCWNsZWFuX21lcmdlID0gMDsKLQkJCW91dHB1dCgiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiAiCi0JCQkgICAgICAgIkFkZGluZyAlcyBhcyAlcyIsCisJCQlvdXRwdXQoMSwgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gIgorCQkJICAgICAgICJBZGRlZCAlcyBhcyAlcyIsCiAJCQkgICAgICAgY29uZiwgcGF0aCwgb3RoZXJfYnJhbmNoLCBwYXRoLCBuZXdfcGF0aCk7CiAJCQlyZW1vdmVfZmlsZSgwLCBwYXRoLCAwKTsKIAkJCXVwZGF0ZV9maWxlKDAsIHNoYSwgbW9kZSwgbmV3X3BhdGgpOwogCQl9IGVsc2UgewotCQkJb3V0cHV0KCJBZGRpbmcgJXMiLCBwYXRoKTsKKwkJCW91dHB1dCgyLCAiQWRkZWQgJXMiLCBwYXRoKTsKIAkJCXVwZGF0ZV9maWxlKDEsIHNoYSwgbW9kZSwgcGF0aCk7CiAJCX0KIAl9IGVsc2UgaWYgKGFfc2hhICYmIGJfc2hhKSB7CkBAIC05ODgsNyArMTA3Miw3IEBACiAJCQlyZWFzb24gPSAiYWRkL2FkZCI7CiAJCQlvX3NoYSA9ICh1bnNpZ25lZCBjaGFyICopbnVsbF9zaGExOwogCQl9Ci0JCW91dHB1dCgiQXV0by1tZXJnaW5nICVzIiwgcGF0aCk7CisJCW91dHB1dCgyLCAiQXV0by1tZXJnZWQgJXMiLCBwYXRoKTsKIAkJby5wYXRoID0gYS5wYXRoID0gYi5wYXRoID0gKGNoYXIgKilwYXRoOwogCQloYXNoY3B5KG8uc2hhMSwgb19zaGEpOwogCQlvLm1vZGUgPSBvX21vZGU7CkBAIC0xMDA0LDcgKzEwODgsNyBAQAogCQkJdXBkYXRlX2ZpbGUoMSwgbWZpLnNoYSwgbWZpLm1vZGUsIHBhdGgpOwogCQllbHNlIHsKIAkJCWNsZWFuX21lcmdlID0gMDsKLQkJCW91dHB1dCgiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiLAorCQkJb3V0cHV0KDEsICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIsCiAJCQkJCXJlYXNvbiwgcGF0aCk7CiAKIAkJCWlmIChpbmRleF9vbmx5KQpAQCAtMTAyOCw3ICsxMTEyLDcgQEAKIHsKIAlpbnQgY29kZSwgY2xlYW47CiAJaWYgKHNoYV9lcShjb21tb24tPm9iamVjdC5zaGExLCBtZXJnZS0+b2JqZWN0LnNoYTEpKSB7Ci0JCW91dHB1dCgiQWxyZWFkeSB1cHRvZGF0ZSEiKTsKKwkJb3V0cHV0KDAsICJBbHJlYWR5IHVwdG9kYXRlISIpOwogCQkqcmVzdWx0ID0gaGVhZDsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTA1MywxMyArMTEzNywxNSBAQAogCQlyZV9tZXJnZSA9IGdldF9yZW5hbWVzKG1lcmdlLCBjb21tb24sIGhlYWQsIG1lcmdlLCBlbnRyaWVzKTsKIAkJY2xlYW4gPSBwcm9jZXNzX3JlbmFtZXMocmVfaGVhZCwgcmVfbWVyZ2UsCiAJCQkJYnJhbmNoMSwgYnJhbmNoMik7Ci0JCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLT5ucjsgaSsrKSB7CisJCXRvdGFsX2NudCArPSBlbnRyaWVzLT5ucjsKKwkJZm9yIChpID0gMDsgaSA8IGVudHJpZXMtPm5yOyBpKyssIG1lcmdlZF9jbnQrKykgewogCQkJY29uc3QgY2hhciAqcGF0aCA9IGVudHJpZXMtPml0ZW1zW2ldLnBhdGg7CiAJCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IGVudHJpZXMtPml0ZW1zW2ldLnV0aWw7Ci0JCQlpZiAoZS0+cHJvY2Vzc2VkKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFwcm9jZXNzX2VudHJ5KHBhdGgsIGUsIGJyYW5jaDEsIGJyYW5jaDIpKQorCQkJaWYgKCFlLT5wcm9jZXNzZWQKKwkJCQkmJiAhcHJvY2Vzc19lbnRyeShwYXRoLCBlLCBicmFuY2gxLCBicmFuY2gyKSkKIAkJCQljbGVhbiA9IDA7CisJCQlpZiAoZG9fcHJvZ3Jlc3MpCisJCQkJZGlzcGxheV9wcm9ncmVzcygpOwogCQl9CiAKIAkJcGF0aF9saXN0X2NsZWFyKHJlX21lcmdlLCAwKTsKQEAgLTEwOTUsNyArMTE4MSw2IEBACiAJCSBzdHJ1Y3QgY29tbWl0ICpoMiwKIAkJIGNvbnN0IGNoYXIgKmJyYW5jaDEsCiAJCSBjb25zdCBjaGFyICpicmFuY2gyLAotCQkgaW50IGNhbGxfZGVwdGggLyogPTAgKi8sCiAJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNhLAogCQkgc3RydWN0IGNvbW1pdCAqKnJlc3VsdCkKIHsKQEAgLTExMDQsMTggKzExODksMjIgQEAKIAlzdHJ1Y3QgdHJlZSAqbXJ0cmVlOwogCWludCBjbGVhbjsKIAotCW91dHB1dCgiTWVyZ2luZzoiKTsKLQlvdXRwdXRfY29tbWl0X3RpdGxlKGgxKTsKLQlvdXRwdXRfY29tbWl0X3RpdGxlKGgyKTsKKwlpZiAoc2hvdyg0KSkgeworCQlvdXRwdXQoNCwgIk1lcmdpbmc6Iik7CisJCW91dHB1dF9jb21taXRfdGl0bGUoaDEpOworCQlvdXRwdXRfY29tbWl0X3RpdGxlKGgyKTsKKwl9CiAKIAlpZiAoIWNhKSB7CiAJCWNhID0gZ2V0X21lcmdlX2Jhc2VzKGgxLCBoMiwgMSk7CiAJCWNhID0gcmV2ZXJzZV9jb21taXRfbGlzdChjYSk7CiAJfQogCi0Jb3V0cHV0KCJmb3VuZCAldSBjb21tb24gYW5jZXN0b3Iocyk6IiwgY29tbWl0X2xpc3RfY291bnQoY2EpKTsKLQlmb3IgKGl0ZXIgPSBjYTsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpCi0JCW91dHB1dF9jb21taXRfdGl0bGUoaXRlci0+aXRlbSk7CisJaWYgKHNob3coNSkpIHsKKwkJb3V0cHV0KDUsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3Iocyk6IiwgY29tbWl0X2xpc3RfY291bnQoY2EpKTsKKwkJZm9yIChpdGVyID0gY2E7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KQorCQkJb3V0cHV0X2NvbW1pdF90aXRsZShpdGVyLT5pdGVtKTsKKwl9CiAKIAltZXJnZWRfY29tbW9uX2FuY2VzdG9ycyA9IHBvcF9jb21taXQoJmNhKTsKIAlpZiAobWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMgPT0gTlVMTCkgewpAQCAtMTEyOSw3ICsxMjE4LDcgQEAKIAl9CiAKIAlmb3IgKGl0ZXIgPSBjYTsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpIHsKLQkJb3V0cHV0X2luZGVudCA9IGNhbGxfZGVwdGggKyAxOworCQljYWxsX2RlcHRoKys7CiAJCS8qCiAJCSAqIFdoZW4gdGhlIG1lcmdlIGZhaWxzLCB0aGUgcmVzdWx0IGNvbnRhaW5zIGZpbGVzCiAJCSAqIHdpdGggY29uZmxpY3QgbWFya2Vycy4gVGhlIGNsZWFubmVzcyBmbGFnIGlzCkBAIC0xMTQxLDE3ICsxMjMwLDE2IEBACiAJCW1lcmdlKG1lcmdlZF9jb21tb25fYW5jZXN0b3JzLCBpdGVyLT5pdGVtLAogCQkgICAgICAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIiwKIAkJICAgICAgIlRlbXBvcmFyeSBtZXJnZSBicmFuY2ggMiIsCi0JCSAgICAgIGNhbGxfZGVwdGggKyAxLAogCQkgICAgICBOVUxMLAogCQkgICAgICAmbWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMpOwotCQlvdXRwdXRfaW5kZW50ID0gY2FsbF9kZXB0aDsKKwkJY2FsbF9kZXB0aC0tOwogCiAJCWlmICghbWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMpCiAJCQlkaWUoIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIpOwogCX0KIAogCWRpc2NhcmRfY2FjaGUoKTsKLQlpZiAoY2FsbF9kZXB0aCA9PSAwKSB7CisJaWYgKCFjYWxsX2RlcHRoKSB7CiAJCXJlYWRfY2FjaGUoKTsKIAkJaW5kZXhfb25seSA9IDA7CiAJfSBlbHNlCkBAIC0xMTY1LDYgKzEyNTMsMTYgQEAKIAkJY29tbWl0X2xpc3RfaW5zZXJ0KGgxLCAmKCpyZXN1bHQpLT5wYXJlbnRzKTsKIAkJY29tbWl0X2xpc3RfaW5zZXJ0KGgyLCAmKCpyZXN1bHQpLT5wYXJlbnRzLT5uZXh0KTsKIAl9CisJaWYgKCFjYWxsX2RlcHRoICYmIGRvX3Byb2dyZXNzKSB7CisJCS8qIE1ha2Ugc3VyZSB3ZSBlbmQgYXQgMTAwJSAqLworCQlpZiAoIXRvdGFsX2NudCkKKwkJCXRvdGFsX2NudCA9IDE7CisJCW1lcmdlZF9jbnQgPSB0b3RhbF9jbnQ7CisJCXByb2dyZXNzX3VwZGF0ZSA9IDE7CisJCWRpc3BsYXlfcHJvZ3Jlc3MoKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9CisJZmx1c2hfb3V0cHV0KCk7CiAJcmV0dXJuIGNsZWFuOwogfQogCkBAIC0xMTk4LDYgKzEyOTYsMTUgQEAKIAlyZXR1cm4gKHN0cnVjdCBjb21taXQgKilvYmplY3Q7CiB9CiAKK3N0YXRpYyBpbnQgbWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjYXNlY21wKHZhciwgIm1lcmdlLnZlcmJvc2l0eSIpKSB7CisJCXZlcmJvc2l0eSA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqYmFzZXNbMjBdOwpAQCAtMTIwOSw3ICsxMzE2LDkgQEAKIAlzdHJ1Y3QgbG9ja19maWxlICpsb2NrID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOwogCWludCBpbmRleF9mZDsKIAotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsgLyogY29yZS5maWxlbW9kZSAqLworCWdpdF9jb25maWcobWVyZ2VfY29uZmlnKTsKKwlpZiAoZ2V0ZW52KCJHSVRfTUVSR0VfVkVSQk9TSVRZIikpCisJCXZlcmJvc2l0eSA9IHN0cnRvbChnZXRlbnYoIkdJVF9NRVJHRV9WRVJCT1NJVFkiKSwgTlVMTCwgMTApOwogCiAJaWYgKGFyZ2MgPCA0KQogCQlkaWUoIlVzYWdlOiAlcyA8YmFzZT4uLi4gLS0gPGhlYWQ+IDxyZW1vdGU+IC4uLlxuIiwgYXJndlswXSk7CkBAIC0xMjIyLDYgKzEzMzEsMTIgQEAKIAl9CiAJaWYgKGFyZ2MgLSBpICE9IDMpIC8qICItLSIgIjxoZWFkPiIgIjxyZW1vdGU+IiAqLwogCQlkaWUoIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iKTsKKwlpZiAodmVyYm9zaXR5ID49IDUpIHsKKwkJYnVmZmVyX291dHB1dCA9IDA7CisJCWRvX3Byb2dyZXNzID0gMDsKKwl9CisJZWxzZQorCQlkb19wcm9ncmVzcyA9IGlzYXR0eSgxKTsKIAogCWJyYW5jaDEgPSBhcmd2WysraV07CiAJYnJhbmNoMiA9IGFyZ3ZbKytpXTsKQEAgLTEyMzEsNyArMTM0NiwxMSBAQAogCiAJYnJhbmNoMSA9IGJldHRlcl9icmFuY2hfbmFtZShicmFuY2gxKTsKIAlicmFuY2gyID0gYmV0dGVyX2JyYW5jaF9uYW1lKGJyYW5jaDIpOwotCXByaW50ZigiTWVyZ2luZyAlcyB3aXRoICVzXG4iLCBicmFuY2gxLCBicmFuY2gyKTsKKworCWlmIChkb19wcm9ncmVzcykKKwkJc2V0dXBfcHJvZ3Jlc3Nfc2lnbmFsKCk7CisJaWYgKHNob3coMykpCisJCXByaW50ZigiTWVyZ2luZyAlcyB3aXRoICVzXG4iLCBicmFuY2gxLCBicmFuY2gyKTsKIAogCWluZGV4X2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsb2NrLCBnZXRfaW5kZXhfZmlsZSgpLCAxKTsKIApAQCAtMTIzOSw3ICsxMzU4LDcgQEAKIAkJc3RydWN0IGNvbW1pdCAqYW5jZXN0b3IgPSBnZXRfcmVmKGJhc2VzW2ldKTsKIAkJY2EgPSBjb21taXRfbGlzdF9pbnNlcnQoYW5jZXN0b3IsICZjYSk7CiAJfQotCWNsZWFuID0gbWVyZ2UoaDEsIGgyLCBicmFuY2gxLCBicmFuY2gyLCAwLCBjYSwgJnJlc3VsdCk7CisJY2xlYW4gPSBtZXJnZShoMSwgaDIsIGJyYW5jaDEsIGJyYW5jaDIsIGNhLCAmcmVzdWx0KTsKIAogCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCAmJgogCSAgICAod3JpdGVfY2FjaGUoaW5kZXhfZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fApkaWZmIC0tZ2l0IGEvcGFjay5oIGIvcGFjay5oCmluZGV4IDQ4MTQ4MDAuLmRlYjQyN2UgMTAwNjQ0Ci0tLSBhL3BhY2suaAorKysgYi9wYWNrLmgKQEAgLTEwLDEwICsxMCw0MyBAQAogI2RlZmluZSBQQUNLX1ZFUlNJT04gMgogI2RlZmluZSBwYWNrX3ZlcnNpb25fb2sodikgKCh2KSA9PSBodG9ubCgyKSB8fCAodikgPT0gaHRvbmwoMykpCiBzdHJ1Y3QgcGFja19oZWFkZXIgewotCXVuc2lnbmVkIGludCBoZHJfc2lnbmF0dXJlOwotCXVuc2lnbmVkIGludCBoZHJfdmVyc2lvbjsKLQl1bnNpZ25lZCBpbnQgaGRyX2VudHJpZXM7CisJdWludDMyX3QgaGRyX3NpZ25hdHVyZTsKKwl1aW50MzJfdCBoZHJfdmVyc2lvbjsKKwl1aW50MzJfdCBoZHJfZW50cmllczsKIH07CiAKKy8qCisgKiBQYWNrZWQgb2JqZWN0IGluZGV4IGhlYWRlcgorICoKKyAqIHN0cnVjdCBwYWNrX2lkeF9oZWFkZXIgeworICogCXVpbnQzMl90IGlkeF9zaWduYXR1cmU7CisgKgl1aW50MzJfdCBpZHhfdmVyc2lvbjsKKyAqIH07CisgKgorICogTm90ZTogdGhpcyBoZWFkZXIgaXNuJ3QgYWN0aXZlIHlldC4gIEluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBnaXQKKyAqIHdlIG1heSBjaGFuZ2UgdGhlIGluZGV4IGZpbGUgZm9ybWF0LiAgQXQgdGhhdCB0aW1lIHdlIHdvdWxkIHN0YXJ0CisgKiB0aGUgZmlyc3QgZm91ciBieXRlcyBvZiB0aGUgbmV3IGluZGV4IGZvcm1hdCB3aXRoIHRoaXMgc2lnbmF0dXJlLAorICogYXMgYWxsIG9sZGVyIGdpdCBiaW5hcmllcyB3b3VsZCBmaW5kIHRoaXMgdmFsdWUgaWxsZWdhbCBhbmQgYWJvcnQKKyAqIHJlYWRpbmcgdGhlIGZpbGUuCisgKgorICogVGhpcyBpcyB0aGUgY2FzZSBiZWNhdXNlIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiBhIHBhY2tmaWxlCisgKiBjYW5ub3QgZXhjZWVkIDEsNDMxLDY2MCwwMDAgYXMgZXZlcnkgb2JqZWN0IHdvdWxkIG5lZWQgYXQgbGVhc3QKKyAqIDMgYnl0ZXMgb2YgZGF0YSBhbmQgdGhlIG92ZXJhbGwgcGFja2ZpbGUgY2Fubm90IGV4Y2VlZCA0IEdpQiBkdWUKKyAqIHRvIHRoZSAzMiBiaXQgb2Zmc2V0cyB1c2VkIGJ5IHRoZSBpbmRleC4gIENsZWFybHkgdGhlIHNpZ25hdHVyZQorICogZXhjZWVkcyB0aGlzIG1heGltdW0uCisgKgorICogVmVyeSBvbGQgZ2l0IGJpbmFyaWVzIHdpbGwgYWxzbyBjb21wYXJlIHRoZSBmaXJzdCA0IGJ5dGVzIHRvIHRoZQorICogbmV4dCA0IGJ5dGVzIGluIHRoZSBpbmRleCBhbmQgYWJvcnQgd2l0aCBhICJub24tbW9ub3RvbmljIGluZGV4IgorICogZXJyb3IgaWYgdGhlIHNlY29uZCA0IGJ5dGUgd29yZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGZpcnN0IDQKKyAqIGJ5dGUgd29yZC4gIFRoaXMgd291bGQgYmUgdHJ1ZSBpbiB0aGUgcHJvcG9zZWQgZnV0dXJlIGluZGV4CisgKiBmb3JtYXQgYXMgaWR4X3NpZ25hdHVyZSB3b3VsZCBiZSBncmVhdGVyIHRoYW4gaWR4X3ZlcnNpb24uCisgKi8KKyNkZWZpbmUgUEFDS19JRFhfU0lHTkFUVVJFIDB4ZmY3NDRmNjMJLyogIlwzNzd0T2MiICovCisKIGV4dGVybiBpbnQgdmVyaWZ5X3BhY2soc3RydWN0IHBhY2tlZF9naXQgKiwgaW50KTsKKworI2RlZmluZSBQSF9FUlJPUl9FT0YJCSgtMSkKKyNkZWZpbmUgUEhfRVJST1JfUEFDS19TSUdOQVRVUkUJKC0yKQorI2RlZmluZSBQSF9FUlJPUl9QUk9UT0NPTAkoLTMpCitleHRlcm4gaW50IHJlYWRfcGFja19oZWFkZXIoaW50IGZkLCBzdHJ1Y3QgcGFja19oZWFkZXIgKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3BlZWstcmVtb3RlLmMgYi9wZWVrLXJlbW90ZS5jCmluZGV4IDM1M2RhMDAuLmVmM2M3NmMgMTAwNjQ0Ci0tLSBhL3BlZWstcmVtb3RlLmMKKysrIGIvcGVlay1yZW1vdGUuYwpAQCAtMyw4ICszLDggQEAKICNpbmNsdWRlICJwa3QtbGluZS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBwZWVrX3JlbW90ZV91c2FnZVtdID0KLSJnaXQtcGVlay1yZW1vdGUgWy0tZXhlYz11cGxvYWQtcGFja10gW2hvc3Q6XWRpcmVjdG9yeSI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZXhlYyA9ICJnaXQtdXBsb2FkLXBhY2siOworImdpdC1wZWVrLXJlbW90ZSBbLS11cGxvYWQtcGFjaz08Z2l0LXVwbG9hZC1wYWNrPl0gWzxob3N0PjpdPGRpcmVjdG9yeT4iOworc3RhdGljIGNvbnN0IGNoYXIgKnVwbG9hZHBhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKIAogc3RhdGljIGludCBwZWVrX3JlbW90ZShpbnQgZmRbMl0sIHVuc2lnbmVkIGZsYWdzKQogewpAQCAtMzUsOCArMzUsMTIgQEAKIAkJY2hhciAqYXJnID0gYXJndltpXTsKIAogCQlpZiAoKmFyZyA9PSAnLScpIHsKKwkJCWlmICghc3RybmNtcCgiLS11cGxvYWQtcGFjaz0iLCBhcmcsIDE0KSkgeworCQkJCXVwbG9hZHBhY2sgPSBhcmcgKyAxNDsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RybmNtcCgiLS1leGVjPSIsIGFyZywgNykpIHsKLQkJCQlleGVjID0gYXJnICsgNzsKKwkJCQl1cGxvYWRwYWNrID0gYXJnICsgNzsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghc3RyY21wKCItLXRhZ3MiLCBhcmcpKSB7CkBAIC02MCw3ICs2NCw3IEBACiAJaWYgKCFkZXN0IHx8IGkgIT0gYXJnYyAtIDEpCiAJCXVzYWdlKHBlZWtfcmVtb3RlX3VzYWdlKTsKIAotCXBpZCA9IGdpdF9jb25uZWN0KGZkLCBkZXN0LCBleGVjKTsKKwlwaWQgPSBnaXRfY29ubmVjdChmZCwgZGVzdCwgdXBsb2FkcGFjayk7CiAJaWYgKHBpZCA8IDApCiAJCXJldHVybiAxOwogCXJldCA9IHBlZWtfcmVtb3RlKGZkLCBmbGFncyk7CmRpZmYgLS1naXQgYS9wZXJsL0dpdC5wbSBiL3BlcmwvR2l0LnBtCmluZGV4IDM0NzRhZDMuLjVkMWNjYWEgMTAwNjQ0Ci0tLSBhL3BlcmwvR2l0LnBtCisrKyBiL3BlcmwvR2l0LnBtCkBAIC0yNzUsNyArMjc1LDcgQEAKIAogCX0gZWxzZSB7CiAJCW15IEBsaW5lcyA9IDwkZmg+OwotCQljaG9tcCBAbGluZXM7CisJCWRlZmluZWQgYW5kIGNob21wIGZvciBAbGluZXM7CiAJCXRyeSB7CiAJCQlfY21kX2Nsb3NlKCRmaCwgJGN0eCk7CiAJCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKQEAgLTQ4MiwxNCArNDgyLDE0IEBACiAKID1pdGVtIGNvbmZpZyAoIFZBUklBQkxFICkKIAotUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gQzxWQVJJQUJMRT4gaW4gdGhlIHNhbWUgbWFubmVyIGFzIEM8cmVwby1jb25maWc+CitSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBDPFZBUklBQkxFPiBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgQzxjb25maWc+CiBkb2VzLiBJbiBzY2FsYXIgY29udGV4dCByZXF1aXJlcyB0aGUgdmFyaWFibGUgdG8gYmUgc2V0IG9ubHkgb25lIHRpbWUKIChleGNlcHRpb24gaXMgdGhyb3duIG90aGVyd2lzZSksIGluIGFycmF5IGNvbnRleHQgcmV0dXJucyBhbGxvd3MgdGhlCiB2YXJpYWJsZSB0byBiZSBzZXQgbXVsdGlwbGUgdGltZXMgYW5kIHJldHVybnMgYWxsIHRoZSB2YWx1ZXMuCiAKIE11c3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4KIAotVGhpcyBjdXJyZW50bHkgd3JhcHMgY29tbWFuZCgncmVwby1jb25maWcnKSBzbyBpdCBpcyBub3Qgc28gZmFzdC4KK1RoaXMgY3VycmVudGx5IHdyYXBzIGNvbW1hbmQoJ2NvbmZpZycpIHNvIGl0IGlzIG5vdCBzbyBmYXN0LgogCiA9Y3V0CiAKQEAgLTUwMCw5ICs1MDAsOSBAQAogCiAJdHJ5IHsKIAkJaWYgKHdhbnRhcnJheSkgewotCQkJcmV0dXJuICRzZWxmLT5jb21tYW5kKCdyZXBvLWNvbmZpZycsICctLWdldC1hbGwnLCAkdmFyKTsKKwkJCXJldHVybiAkc2VsZi0+Y29tbWFuZCgnY29uZmlnJywgJy0tZ2V0LWFsbCcsICR2YXIpOwogCQl9IGVsc2UgewotCQkJcmV0dXJuICRzZWxmLT5jb21tYW5kX29uZWxpbmUoJ3JlcG8tY29uZmlnJywgJy0tZ2V0JywgJHZhcik7CisJCQlyZXR1cm4gJHNlbGYtPmNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywgJHZhcik7CiAJCX0KIAl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CiAJCW15ICRFID0gc2hpZnQ7CkBAIC03MzYsMTMgKzczNiwxOSBAQAogCV9jaGVja192YWxpZF9jbWQoJGNtZCk7CiAKIAlteSAkZmg7Ci0JaWYgKCReTyBlcSAnIyNJTlNFUlRfQUNUSVZFU1RBVEVfU1RSSU5HX0hFUkUjIycpIHsKKwlpZiAoJF5PIGVxICdNU1dpbjMyJykgewogCQkjIEFjdGl2ZVN0YXRlIFBlcmwKIAkJI2RlZmluZWQgJG9wdHN7U1RERVJSfSBhbmQKIAkJIwl3YXJuICdpZ25vcmluZyBTVERFUlIgb3B0aW9uIC0gcnVubmluZyB3LyBBY3RpdmVTdGF0ZSc7CiAJCSRkaXJlY3Rpb24gZXEgJy18JyBvcgogCQkJZGllICdpbnB1dCBwaXBlIGZvciBBY3RpdmVTdGF0ZSBub3QgaW1wbGVtZW50ZWQnOwotCQl0aWUgKCRmaCwgJ0dpdDo6YWN0aXZlc3RhdGVfcGlwZScsICRjbWQsIEBhcmdzKTsKKwkJIyB0aGUgc3RyYW5nZSBjb25zdHJ1Y3Rpb24gd2l0aCAqQUNQSVBFIGlzIGp1c3QgdG8KKwkJIyBleHBsYWluIHRoZSB0aWUgYmVsb3cgdGhhdCB3ZSB3YW50IHRvIGJpbmQgdG8KKwkJIyBhIGhhbmRsZSBjbGFzcywgbm90IHNjYWxhci4gSXQgaXMgbm90IGtub3duIGlmCisJCSMgaXQgaXMgc29tZXRoaW5nIHNwZWNpZmljIHRvIEFjdGl2ZVN0YXRlIFBlcmwgb3IKKwkJIyBqdXN0IGEgUGVybCBxdWlyay4KKwkJdGllICgqQUNQSVBFLCAnR2l0OjphY3RpdmVzdGF0ZV9waXBlJywgJGNtZCwgQGFyZ3MpOworCQkkZmggPSAqQUNQSVBFOwogCiAJfSBlbHNlIHsKIAkJbXkgJHBpZCA9IG9wZW4oJGZoLCAkZGlyZWN0aW9uKTsKQEAgLTgwOSw4ICs4MTUsOSBAQAogCSMgRklYTUU6IFRoaXMgaXMgcHJvYmFibHkgaG9ycmlibGUgaWRlYSBhbmQgdGhlIHRoaW5nIHdpbGwgZXhwbG9kZQogCSMgYXQgdGhlIG1vbWVudCB5b3UgZ2l2ZSBpdCBhcmd1bWVudHMgdGhhdCByZXF1aXJlIHNvbWUgcXVvdGluZywKIAkjIGJ1dCBJIGhhdmUgbm8gQWN0aXZlU3RhdGUgY2x1ZS4uLiAtLXBhc2t5Ci0JbXkgJGNtZGxpbmUgPSBqb2luICIgIiwgQHBhcmFtczsKLQlteSBAZGF0YSA9IHF4eyRjbWRsaW5lfTsKKwkjIExldCdzIGp1c3QgaG9wZSBBY3RpdmVTdGF0ZSBQZXJsIGRvZXMgYXQgbGVhc3QgdGhlIHF1b3RpbmcKKwkjIGNvcnJlY3RseS4KKwlteSBAZGF0YSA9IHF4e2dpdCBAcGFyYW1zfTsKIAlibGVzcyB7IGkgPT4gMCwgZGF0YSA9PiBcQGRhdGEgfSwgJGNsYXNzOwogfQogCmRpZmYgLS1naXQgYS9wZXJsL01ha2VmaWxlLlBMIGIvcGVybC9NYWtlZmlsZS5QTAppbmRleCA0MTY4Nzc1Li45YjExN2ZkIDEwMDY0NAotLS0gYS9wZXJsL01ha2VmaWxlLlBMCisrKyBiL3BlcmwvTWFrZWZpbGUuUEwKQEAgLTIwLDYgKzIwLDEwIEBACiBteSAlZXh0cmE7CiAkZXh0cmF7REVTVERJUn0gPSAkRU5We0RFU1RESVJ9IGlmICRFTlZ7REVTVERJUn07CiAKKyMgcmVkaXJlY3Qgc3Rkb3V0LCBvdGhlcndpc2UgdGhlIG1lc3NhZ2UgIldyaXRpbmcgcGVybC5tYWsgZm9yIEdpdCIKKyMgZGlzcnVwdHMgdGhlIG91dHB1dCBmb3IgdGhlIHRhcmdldCAnaW5zdGxpYmRpcicKK29wZW4gU1RET1VULCAiPiZTVERFUlIiOworCiBXcml0ZU1ha2VmaWxlKAogCU5BTUUgICAgICAgICAgICA9PiAnR2l0JywKIAlWRVJTSU9OX0ZST00gICAgPT4gJ0dpdC5wbScsCmRpZmYgLS1naXQgYS9xdW90ZS5jIGIvcXVvdGUuYwppbmRleCBhNDE4YTBmLi5mYjllNGNhIDEwMDY0NAotLS0gYS9xdW90ZS5jCisrKyBiL3F1b3RlLmMKQEAgLTM4NywzICszODcsMzcgQEAKIAl9CiAJZnB1dGMoc3EsIHN0cmVhbSk7CiB9CisKK3ZvaWQgdGNsX3F1b3RlX3ByaW50KEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgYzsKKworCWZwdXRjKCciJywgc3RyZWFtKTsKKwl3aGlsZSAoKGMgPSAqc3JjKyspKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdbJzogY2FzZSAnXSc6CisJCWNhc2UgJ3snOiBjYXNlICd9JzoKKwkJY2FzZSAnJCc6IGNhc2UgJ1xcJzogY2FzZSAnIic6CisJCQlmcHV0YygnXFwnLCBzdHJlYW0pOworCQlkZWZhdWx0OgorCQkJZnB1dGMoYywgc3RyZWFtKTsKKwkJCWJyZWFrOworCQljYXNlICdcZic6CisJCQlmcHV0cygiXFxmIiwgc3RyZWFtKTsKKwkJCWJyZWFrOworCQljYXNlICdccic6CisJCQlmcHV0cygiXFxyIiwgc3RyZWFtKTsKKwkJCWJyZWFrOworCQljYXNlICdcbic6CisJCQlmcHV0cygiXFxuIiwgc3RyZWFtKTsKKwkJCWJyZWFrOworCQljYXNlICdcdCc6CisJCQlmcHV0cygiXFx0Iiwgc3RyZWFtKTsKKwkJCWJyZWFrOworCQljYXNlICdcdic6CisJCQlmcHV0cygiXFx2Iiwgc3RyZWFtKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZwdXRjKCciJywgc3RyZWFtKTsKK30KZGlmZiAtLWdpdCBhL3F1b3RlLmggYi9xdW90ZS5oCmluZGV4IGI1NWU2OTkuLmJkYzM2MTAgMTAwNjQ0Ci0tLSBhL3F1b3RlLmgKKysrIGIvcXVvdGUuaApAQCAtNTUsNSArNTUsNiBAQAogLyogcXVvdGluZyBhcyBhIHN0cmluZyBsaXRlcmFsIGZvciBvdGhlciBsYW5ndWFnZXMgKi8KIGV4dGVybiB2b2lkIHBlcmxfcXVvdGVfcHJpbnQoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzcmMpOwogZXh0ZXJuIHZvaWQgcHl0aG9uX3F1b3RlX3ByaW50KEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqc3JjKTsKK2V4dGVybiB2b2lkIHRjbF9xdW90ZV9wcmludChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnNyYyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVjZWl2ZS1wYWNrLmMgYi9yZWNlaXZlLXBhY2suYwppbmRleCBjMTc2ZDhmLi43MzExYzgyIDEwMDY0NAotLS0gYS9yZWNlaXZlLXBhY2suYworKysgYi9yZWNlaXZlLXBhY2suYwpAQCAtMTAsNiArMTAsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgcmVjZWl2ZV9wYWNrX3VzYWdlW10gPSAiZ2l0LXJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iOwogCiBzdGF0aWMgaW50IGRlbnlfbm9uX2Zhc3RfZm9yd2FyZHMgPSAwOworc3RhdGljIGludCByZWNlaXZlX3VucGFja19saW1pdCA9IC0xOworc3RhdGljIGludCB0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSAtMTsKIHN0YXRpYyBpbnQgdW5wYWNrX2xpbWl0ID0gMTAwOwogc3RhdGljIGludCByZXBvcnRfc3RhdHVzOwogCkBAIC0xOCwyMSArMjAsMjIgQEAKIAogc3RhdGljIGludCByZWNlaXZlX3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCiB7Ci0JZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOwotCi0JaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmRlbnlub25mYXN0Zm9yd2FyZHMiKSA9PSAwKQotCXsKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuZGVueW5vbmZhc3Rmb3J3YXJkcyIpID09IDApIHsKIAkJZGVueV9ub25fZmFzdF9mb3J3YXJkcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLnVucGFja2xpbWl0IikgPT0gMCkKLQl7Ci0JCXVucGFja19saW1pdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS51bnBhY2tsaW1pdCIpID09IDApIHsKKwkJcmVjZWl2ZV91bnBhY2tfbGltaXQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIDA7CisJaWYgKHN0cmNtcCh2YXIsICJ0cmFuc2Zlci51bnBhY2tsaW1pdCIpID09IDApIHsKKwkJdHJhbnNmZXJfdW5wYWNrX2xpbWl0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2hvd19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCkBAIC0yNTAsMjAgKzI1MywyMiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfcGFja19oZWFkZXIoc3RydWN0IHBhY2tfaGVhZGVyICpoZHIpCiB7Ci0JY2hhciAqYyA9IChjaGFyKiloZHI7Ci0Jc3NpemVfdCByZW1haW5pbmcgPSBzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKTsKLQlkbyB7Ci0JCXNzaXplX3QgciA9IHhyZWFkKDAsIGMsIHJlbWFpbmluZyk7Ci0JCWlmIChyIDw9IDApCi0JCQlyZXR1cm4gImVvZiBiZWZvcmUgcGFjayBoZWFkZXIgd2FzIGZ1bGx5IHJlYWQiOwotCQlyZW1haW5pbmcgLT0gcjsKLQkJYyArPSByOwotCX0gd2hpbGUgKHJlbWFpbmluZyA+IDApOwotCWlmIChoZHItPmhkcl9zaWduYXR1cmUgIT0gaHRvbmwoUEFDS19TSUdOQVRVUkUpKQorCXN3aXRjaCAocmVhZF9wYWNrX2hlYWRlcigwLCBoZHIpKSB7CisJY2FzZSBQSF9FUlJPUl9FT0Y6CisJCXJldHVybiAiZW9mIGJlZm9yZSBwYWNrIGhlYWRlciB3YXMgZnVsbHkgcmVhZCI7CisKKwljYXNlIFBIX0VSUk9SX1BBQ0tfU0lHTkFUVVJFOgogCQlyZXR1cm4gInByb3RvY29sIGVycm9yIChwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCBkZXRlY3RlZCkiOwotCWlmICghcGFja192ZXJzaW9uX29rKGhkci0+aGRyX3ZlcnNpb24pKQorCisJY2FzZSBQSF9FUlJPUl9QUk9UT0NPTDoKIAkJcmV0dXJuICJwcm90b2NvbCBlcnJvciAocGFjayB2ZXJzaW9uIHVuc3VwcG9ydGVkKSI7Ci0JcmV0dXJuIE5VTEw7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24gZXJyb3IgaW4gcGFyc2VfcGFja19oZWFkZXIiOworCisJY2FzZSAwOgorCQlyZXR1cm4gTlVMTDsKKwl9CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpwYWNrX2xvY2tmaWxlOwpAQCAtNDIxLDExICs0MjYsMTYgQEAKIAlpZiAoIWVudGVyX3JlcG8oZGlyLCAwKSkKIAkJZGllKCInJXMnOiB1bmFibGUgdG8gY2hkaXIgb3Igbm90IGEgZ2l0IGFyY2hpdmUiLCBkaXIpOwogCi0Jc2V0dXBfaWRlbnQoKTsKLQkvKiBkb24ndCBkaWUgaWYgZ2Vjb3MgaXMgZW1wdHkgKi8KLQlpZ25vcmVfbWlzc2luZ19jb21taXR0ZXJfbmFtZSgpOworCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3coKSkKKwkJZGllKCJhdHRlbXB0IHRvIHB1c2ggaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSIpOworCiAJZ2l0X2NvbmZpZyhyZWNlaXZlX3BhY2tfY29uZmlnKTsKIAorCWlmICgwIDw9IHRyYW5zZmVyX3VucGFja19saW1pdCkKKwkJdW5wYWNrX2xpbWl0ID0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0OworCWVsc2UgaWYgKDAgPD0gcmVjZWl2ZV91bnBhY2tfbGltaXQpCisJCXVucGFja19saW1pdCA9IHJlY2VpdmVfdW5wYWNrX2xpbWl0OworCiAJd3JpdGVfaGVhZF9pbmZvKCk7CiAKIAkvKiBFT0YgKi8KZGlmZiAtLWdpdCBhL3JlZmxvZy13YWxrLmMgYi9yZWZsb2ctd2Fsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjIxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZsb2ctd2Fsay5jCkBAIC0wLDAgKzEsMjUwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicGF0aC1saXN0LmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKworc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgeworCWNoYXIgKnJlZjsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8geworCQl1bnNpZ25lZCBjaGFyIG9zaGExWzIwXSwgbnNoYTFbMjBdOworCQljaGFyICplbWFpbDsKKwkJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CisJCWludCB0ejsKKwkJY2hhciAqbWVzc2FnZTsKKwl9ICppdGVtczsKKwlpbnQgbnIsIGFsbG9jOworfTsKKworc3RhdGljIGludCByZWFkX29uZV9yZWZsb2codW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAorCQljb25zdCBjaGFyICplbWFpbCwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGludCB0eiwKKwkJY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqYXJyYXkgPSBjYl9kYXRhOworCXN0cnVjdCByZWZsb2dfaW5mbyAqaXRlbTsKKworCWlmIChhcnJheS0+bnIgPj0gYXJyYXktPmFsbG9jKSB7CisJCWFycmF5LT5hbGxvYyA9IGFsbG9jX25yKGFycmF5LT5uciArIDEpOworCQlhcnJheS0+aXRlbXMgPSB4cmVhbGxvYyhhcnJheS0+aXRlbXMsIGFycmF5LT5hbGxvYyAqCisJCQlzaXplb2Yoc3RydWN0IHJlZmxvZ19pbmZvKSk7CisJfQorCWl0ZW0gPSBhcnJheS0+aXRlbXMgKyBhcnJheS0+bnI7CisJbWVtY3B5KGl0ZW0tPm9zaGExLCBvc2hhMSwgMjApOworCW1lbWNweShpdGVtLT5uc2hhMSwgbnNoYTEsIDIwKTsKKwlpdGVtLT5lbWFpbCA9IHhzdHJkdXAoZW1haWwpOworCWl0ZW0tPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwlpdGVtLT50eiA9IHR6OworCWl0ZW0tPm1lc3NhZ2UgPSB4c3RyZHVwKG1lc3NhZ2UpOworCWFycmF5LT5ucisrOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKnJlYWRfY29tcGxldGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqcmVmbG9ncyA9CisJCXhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzKSwgMSk7CisJcmVmbG9ncy0+cmVmID0geHN0cmR1cChyZWYpOworCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCWlmIChyZWZsb2dzLT5uciA9PSAwKSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSByZXNvbHZlX3JlZihyZWYsIHNoYTEsIDEsIE5VTEwpOworCQlpZiAobmFtZSkKKwkJCWZvcl9lYWNoX3JlZmxvZ19lbnQobmFtZSwgcmVhZF9vbmVfcmVmbG9nLCByZWZsb2dzKTsKKwl9CisJaWYgKHJlZmxvZ3MtPm5yID09IDApIHsKKwkJaW50IGxlbiA9IHN0cmxlbihyZWYpOworCQljaGFyICpyZWZuYW1lID0geG1hbGxvYyhsZW4gKyAxMik7CisJCXNwcmludGYocmVmbmFtZSwgInJlZnMvJXMiLCByZWYpOworCQlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZm5hbWUsIHJlYWRfb25lX3JlZmxvZywgcmVmbG9ncyk7CisJCWlmIChyZWZsb2dzLT5uciA9PSAwKSB7CisJCQlzcHJpbnRmKHJlZm5hbWUsICJyZWZzL2hlYWRzLyVzIiwgcmVmKTsKKwkJCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmbmFtZSwgcmVhZF9vbmVfcmVmbG9nLCByZWZsb2dzKTsKKwkJfQorCQlmcmVlKHJlZm5hbWUpOworCX0KKwlyZXR1cm4gcmVmbG9nczsKK30KKworc3RhdGljIGludCBnZXRfcmVmbG9nX3JlY25vX2J5X3RpbWUoc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKmFycmF5LAorCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wKQoreworCWludCBpOworCWZvciAoaSA9IGFycmF5LT5uciAtIDE7IGkgPj0gMDsgaS0tKQorCQlpZiAodGltZXN0YW1wID49IGFycmF5LT5pdGVtc1tpXS50aW1lc3RhbXApCisJCQlyZXR1cm4gaTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0cnVjdCBjb21taXRfaW5mb19saWZvIHsKKwlzdHJ1Y3QgY29tbWl0X2luZm8geworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCXZvaWQgKnV0aWw7CisJfSAqaXRlbXM7CisJaW50IG5yLCBhbGxvYzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2luZm8gKmdldF9jb21taXRfaW5mbyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCXN0cnVjdCBjb21taXRfaW5mb19saWZvICpsaWZvLCBpbnQgcG9wKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBsaWZvLT5ucjsgaSsrKQorCQlpZiAobGlmby0+aXRlbXNbaV0uY29tbWl0ID09IGNvbW1pdCkgeworCQkJc3RydWN0IGNvbW1pdF9pbmZvICpyZXN1bHQgPSAmbGlmby0+aXRlbXNbaV07CisJCQlpZiAocG9wKSB7CisJCQkJaWYgKGkgKyAxIDwgbGlmby0+bnIpCisJCQkJCW1lbW1vdmUobGlmby0+aXRlbXMgKyBpLAorCQkJCQkJbGlmby0+aXRlbXMgKyBpICsgMSwKKwkJCQkJCShsaWZvLT5uciAtIGkpICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgY29tbWl0X2luZm8pKTsKKwkJCQlsaWZvLT5uci0tOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBhZGRfY29tbWl0X2luZm8oc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICp1dGlsLAorCQlzdHJ1Y3QgY29tbWl0X2luZm9fbGlmbyAqbGlmbykKK3sKKwlzdHJ1Y3QgY29tbWl0X2luZm8gKmluZm87CisJaWYgKGxpZm8tPm5yID49IGxpZm8tPmFsbG9jKSB7CisJCWxpZm8tPmFsbG9jID0gYWxsb2NfbnIobGlmby0+bnIgKyAxKTsKKwkJbGlmby0+aXRlbXMgPSB4cmVhbGxvYyhsaWZvLT5pdGVtcywKKwkJCWxpZm8tPmFsbG9jICogc2l6ZW9mKHN0cnVjdCBjb21taXRfaW5mbykpOworCX0KKwlpbmZvID0gbGlmby0+aXRlbXMgKyBsaWZvLT5ucjsKKwlpbmZvLT5jb21taXQgPSBjb21taXQ7CisJaW5mby0+dXRpbCA9IHV0aWw7CisJbGlmby0+bnIrKzsKK30KKworc3RydWN0IGNvbW1pdF9yZWZsb2cgeworCWludCBmbGFnLCByZWNubzsKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqcmVmbG9nczsKK307CisKK3N0cnVjdCByZWZsb2dfd2Fsa19pbmZvIHsKKwlzdHJ1Y3QgY29tbWl0X2luZm9fbGlmbyByZWZsb2dzOworCXN0cnVjdCBwYXRoX2xpc3QgY29tcGxldGVfcmVmbG9nczsKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqbGFzdF9jb21taXRfcmVmbG9nOworfTsKKwordm9pZCBpbml0X3JlZmxvZ193YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvKiogaW5mbykKK3sKKwkqaW5mbyA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvKSwgMSk7Cit9CisKK3ZvaWQgYWRkX3JlZmxvZ19mb3Jfd2FsayhzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wID0gMDsKKwlpbnQgcmVjbm8gPSAtMTsKKwlzdHJ1Y3QgcGF0aF9saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKnJlZmxvZ3M7CisJY2hhciAqYnJhbmNoLCAqYXQgPSBzdHJjaHIobmFtZSwgJ0AnKTsKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZzsKKworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCWRpZSAoIkNhbm5vdCB3YWxrIHJlZmxvZ3MgZm9yICVzIiwgbmFtZSk7CisKKwlicmFuY2ggPSB4c3RyZHVwKG5hbWUpOworCWlmIChhdCAmJiBhdFsxXSA9PSAneycpIHsKKwkJY2hhciAqZXA7CisJCWJyYW5jaFthdCAtIG5hbWVdID0gJ1wwJzsKKwkJcmVjbm8gPSBzdHJ0b3VsKGF0ICsgMiwgJmVwLCAxMCk7CisJCWlmICgqZXAgIT0gJ30nKSB7CisJCQlyZWNubyA9IC0xOworCQkJdGltZXN0YW1wID0gYXBwcm94aWRhdGUoYXQgKyAyKTsKKwkJfQorCX0gZWxzZQorCQlyZWNubyA9IDA7CisKKwlpdGVtID0gcGF0aF9saXN0X2xvb2t1cChicmFuY2gsICZpbmZvLT5jb21wbGV0ZV9yZWZsb2dzKTsKKwlpZiAoaXRlbSkKKwkJcmVmbG9ncyA9IGl0ZW0tPnV0aWw7CisJZWxzZSB7CisJCXJlZmxvZ3MgPSByZWFkX2NvbXBsZXRlX3JlZmxvZyhicmFuY2gpOworCQlpZiAoIXJlZmxvZ3MgfHwgcmVmbG9ncy0+bnIgPT0gMCkKKwkJCWRpZSgiTm8gcmVmbG9ncyBmb3VuZCBmb3IgJyVzJyIsIGJyYW5jaCk7CisJCXBhdGhfbGlzdF9pbnNlcnQoYnJhbmNoLCAmaW5mby0+Y29tcGxldGVfcmVmbG9ncyktPnV0aWwKKwkJCT0gcmVmbG9nczsKKwl9CisKKwljb21taXRfcmVmbG9nID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9yZWZsb2cpLCAxKTsKKwlpZiAocmVjbm8gPCAwKSB7CisJCWNvbW1pdF9yZWZsb2ctPmZsYWcgPSAxOworCQljb21taXRfcmVmbG9nLT5yZWNubyA9IGdldF9yZWZsb2dfcmVjbm9fYnlfdGltZShyZWZsb2dzLCB0aW1lc3RhbXApOworCQlpZiAoY29tbWl0X3JlZmxvZy0+cmVjbm8gPCAwKSB7CisJCQlmcmVlKGJyYW5jaCk7CisJCQlmcmVlKGNvbW1pdF9yZWZsb2cpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlCisJCWNvbW1pdF9yZWZsb2ctPnJlY25vID0gcmVmbG9ncy0+bnIgLSByZWNubyAtIDE7CisJY29tbWl0X3JlZmxvZy0+cmVmbG9ncyA9IHJlZmxvZ3M7CisKKwlhZGRfY29tbWl0X2luZm8oY29tbWl0LCBjb21taXRfcmVmbG9nLCAmaW5mby0+cmVmbG9ncyk7Cit9CisKK3ZvaWQgZmFrZV9yZWZsb2dfcGFyZW50KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9pbmZvICpjb21taXRfaW5mbyA9CisJCWdldF9jb21taXRfaW5mbyhjb21taXQsICZpbmZvLT5yZWZsb2dzLCAwKTsKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZzsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKnJlZmxvZzsKKworCWluZm8tPmxhc3RfY29tbWl0X3JlZmxvZyA9IE5VTEw7CisJaWYgKCFjb21taXRfaW5mbykKKwkJcmV0dXJuOworCisJY29tbWl0X3JlZmxvZyA9IGNvbW1pdF9pbmZvLT51dGlsOworCWlmIChjb21taXRfcmVmbG9nLT5yZWNubyA8IDApIHsKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCXJlZmxvZyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNub107CisJaW5mby0+bGFzdF9jb21taXRfcmVmbG9nID0gY29tbWl0X3JlZmxvZzsKKwljb21taXRfcmVmbG9nLT5yZWNuby0tOworCWNvbW1pdF9pbmZvLT5jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKXBhcnNlX29iamVjdChyZWZsb2ctPm9zaGExKTsKKwlpZiAoIWNvbW1pdF9pbmZvLT5jb21taXQpIHsKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCWNvbW1pdC0+cGFyZW50cyA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21taXRfbGlzdCksIDEpOworCWNvbW1pdC0+cGFyZW50cy0+aXRlbSA9IGNvbW1pdF9pbmZvLT5jb21taXQ7CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gfihBRERFRCB8IFNFRU4gfCBTSE9XTik7Cit9CisKK3ZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyogaW5mbywgaW50IG9uZWxpbmUpCit7CisJaWYgKGluZm8gJiYgaW5mby0+bGFzdF9jb21taXRfcmVmbG9nKSB7CisJCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nID0gaW5mby0+bGFzdF9jb21taXRfcmVmbG9nOworCQlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisKKwkJaW5mbyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNubysxXTsKKwkJaWYgKG9uZWxpbmUpIHsKKwkJCXByaW50ZigiJXNAeyIsIGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnJlZik7CisJCQlpZiAoY29tbWl0X3JlZmxvZy0+ZmxhZykKKwkJCQlwcmludGYoIiVzIiwgc2hvd19kYXRlKGluZm8tPnRpbWVzdGFtcCwgMCwgMSkpOworCQkJZWxzZQorCQkJCXByaW50ZigiJWQiLCBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5ucgorCQkJCSAgICAgICAtIDIgLSBjb21taXRfcmVmbG9nLT5yZWNubyk7CisJCQlwcmludGYoIn06ICVzIiwgaW5mby0+bWVzc2FnZSk7CisJCX0KKwkJZWxzZSB7CisJCQlwcmludGYoIlJlZmxvZzogJXNAeyIsIGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnJlZik7CisJCQlpZiAoY29tbWl0X3JlZmxvZy0+ZmxhZykKKwkJCQlwcmludGYoIiVzIiwgc2hvd19yZmMyODIyX2RhdGUoaW5mby0+dGltZXN0YW1wLAorCQkJCQkJCSAgICAgICBpbmZvLT50eikpOworCQkJZWxzZQorCQkJCXByaW50ZigiJWQiLCBjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5ucgorCQkJCSAgICAgICAtIDIgLSBjb21taXRfcmVmbG9nLT5yZWNubyk7CisJCQlwcmludGYoIn0gKCVzKVxuUmVmbG9nIG1lc3NhZ2U6ICVzIiwKKwkJCSAgICAgICBpbmZvLT5lbWFpbCwgaW5mby0+bWVzc2FnZSk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9yZWZsb2ctd2Fsay5oIGIvcmVmbG9nLXdhbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjNkODY3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVmbG9nLXdhbGsuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIFJFRkxPR19XQUxLX0gKKyNkZWZpbmUgUkVGTE9HX1dBTEtfSAorCitleHRlcm4gdm9pZCBpbml0X3JlZmxvZ193YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvKiogaW5mbyk7CitleHRlcm4gdm9pZCBhZGRfcmVmbG9nX2Zvcl93YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAorCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgZmFrZV9yZWZsb2dfcGFyZW50KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAorCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworZXh0ZXJuIHZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywgaW50KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWZzLmMgYi9yZWZzLmMKaW5kZXggNjg5YWM1MC4uM2RiNDQ0YyAxMDA2NDQKLS0tIGEvcmVmcy5jCisrKyBiL3JlZnMuYwpAQCAtMzMxLDcgKzMzMSwxMSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWxvY2twYXRoID0gbWtwYXRoKCIlcy5sb2NrIiwgZ2l0X0hFQUQpOwotCWZkID0gb3Blbihsb2NrcGF0aCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsJCisJZmQgPSBvcGVuKGxvY2twYXRoLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2NjYpOworCWlmIChmZCA8IDApIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nIiwgbG9ja3BhdGgpOworCQlyZXR1cm4gLTU7CisJfQogCXdyaXR0ZW4gPSB3cml0ZV9pbl9mdWxsKGZkLCByZWYsIGxlbik7CiAJY2xvc2UoZmQpOwogCWlmICh3cml0dGVuICE9IGxlbikgewpAQCAtNzA2LDYgKzcxMCw4IEBACiAKIHN0cnVjdCByZWZfbG9jayAqbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUoY29uc3QgY2hhciAqcmVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSkKIHsKKwlpZiAoY2hlY2tfcmVmX2Zvcm1hdChyZWYpID09IC0xKQorCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gbG9ja19yZWZfc2hhMV9iYXNpYyhyZWYsIG9sZF9zaGExLCBOVUxMKTsKIH0KIApAQCAtODM3LDcgKzg0MywxMiBAQAogCiAgcmV0cnk6CiAJaWYgKGxvZyAmJiByZW5hbWUoZ2l0X3BhdGgoInRtcC1yZW5hbWVkLWxvZyIpLCBnaXRfcGF0aCgibG9ncy8lcyIsIG5ld3JlZikpKSB7Ci0JCWlmIChlcnJubz09RUlTRElSKSB7CisJCWlmIChlcnJubz09RUlTRElSIHx8IGVycm5vPT1FTk9URElSKSB7CisJCQkvKgorCQkJICogcmVuYW1lKGEsIGIpIHdoZW4gYiBpcyBhbiBleGlzdGluZworCQkJICogZGlyZWN0b3J5IG91Z2h0IHRvIHJlc3VsdCBpbiBJU0RJUiwgYnV0CisJCQkgKiBTb2xhcmlzIDUuOCBnaXZlcyBFTk9URElSLiAgU2hlZXNoLgorCQkJICovCiAJCQlpZiAocmVtb3ZlX2VtcHR5X2RpcmVjdG9yaWVzKGdpdF9wYXRoKCJsb2dzLyVzIiwgbmV3cmVmKSkpIHsKIAkJCQllcnJvcigiRGlyZWN0b3J5IG5vdCBlbXB0eTogbG9ncy8lcyIsIG5ld3JlZik7CiAJCQkJZ290byByb2xsYmFjazsKQEAgLTkyMCw2ICs5MzEsNyBAQAogewogCWludCBsb2dmZCwgd3JpdHRlbiwgb2ZsYWdzID0gT19BUFBFTkQgfCBPX1dST05MWTsKIAl1bnNpZ25lZCBtYXhsZW4sIGxlbjsKKwlpbnQgbXNnbGVuOwogCWNoYXIgKmxvZ3JlYzsKIAljb25zdCBjaGFyICpjb21taXR0ZXI7CiAKQEAgLTk1MywyNCArOTY1LDMwIEBACiAJCQkJICAgICBsb2NrLT5sb2dfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiAKLQljb21taXR0ZXIgPSBnaXRfY29tbWl0dGVyX2luZm8oMSk7CisJbXNnbGVuID0gMDsKIAlpZiAobXNnKSB7Ci0JCW1heGxlbiA9IHN0cmxlbihjb21taXR0ZXIpICsgc3RybGVuKG1zZykgKyAyKjQwICsgNTsKLQkJbG9ncmVjID0geG1hbGxvYyhtYXhsZW4pOwotCQlsZW4gPSBzbnByaW50Zihsb2dyZWMsIG1heGxlbiwgIiVzICVzICVzXHQlc1xuIiwKLQkJCXNoYTFfdG9faGV4KGxvY2stPm9sZF9zaGExKSwKLQkJCXNoYTFfdG9faGV4KHNoYTEpLAotCQkJY29tbWl0dGVyLAotCQkJbXNnKTsKKwkJLyogY2xlYW4gdXAgdGhlIG1lc3NhZ2UgYW5kIG1ha2Ugc3VyZSBpdCBpcyBhIHNpbmdsZSBsaW5lICovCisJCWZvciAoIDsgKm1zZzsgbXNnKyspCisJCQlpZiAoIWlzc3BhY2UoKm1zZykpCisJCQkJYnJlYWs7CisJCWlmICgqbXNnKSB7CisJCQljb25zdCBjaGFyICplcCA9IHN0cmNocihtc2csICdcbicpOworCQkJaWYgKGVwKQorCQkJCW1zZ2xlbiA9IGVwIC0gbXNnOworCQkJZWxzZQorCQkJCW1zZ2xlbiA9IHN0cmxlbihtc2cpOworCQl9CiAJfQotCWVsc2UgewotCQltYXhsZW4gPSBzdHJsZW4oY29tbWl0dGVyKSArIDIqNDAgKyA0OwotCQlsb2dyZWMgPSB4bWFsbG9jKG1heGxlbik7Ci0JCWxlbiA9IHNucHJpbnRmKGxvZ3JlYywgbWF4bGVuLCAiJXMgJXMgJXNcbiIsCi0JCQlzaGExX3RvX2hleChsb2NrLT5vbGRfc2hhMSksCi0JCQlzaGExX3RvX2hleChzaGExKSwKLQkJCWNvbW1pdHRlcik7Ci0JfQorCisJY29tbWl0dGVyID0gZ2l0X2NvbW1pdHRlcl9pbmZvKC0xKTsKKwltYXhsZW4gPSBzdHJsZW4oY29tbWl0dGVyKSArIG1zZ2xlbiArIDEwMDsKKwlsb2dyZWMgPSB4bWFsbG9jKG1heGxlbik7CisJbGVuID0gc3ByaW50Zihsb2dyZWMsICIlcyAlcyAlc1xuIiwKKwkJICAgICAgc2hhMV90b19oZXgobG9jay0+b2xkX3NoYTEpLAorCQkgICAgICBzaGExX3RvX2hleChzaGExKSwKKwkJICAgICAgY29tbWl0dGVyKTsKKwlpZiAobXNnbGVuKQorCQlsZW4gKz0gc3ByaW50Zihsb2dyZWMgKyBsZW4gLSAxLCAiXHQlLipzXG4iLCBtc2dsZW4sIG1zZykgLSAxOwogCXdyaXR0ZW4gPSBsZW4gPD0gbWF4bGVuID8gd3JpdGVfaW5fZnVsbChsb2dmZCwgbG9ncmVjLCBsZW4pIDogLTE7CiAJZnJlZShsb2dyZWMpOwogCWNsb3NlKGxvZ2ZkKTsKQEAgLTEwMTIsNyArMTAzMCwyMSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcmVhZF9yZWZfYXQoY29uc3QgY2hhciAqcmVmLCB1bnNpZ25lZCBsb25nIGF0X3RpbWUsIGludCBjbnQsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCitzdGF0aWMgY2hhciAqcmVmX21zZyhjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICplbmRwKQoreworCWNvbnN0IGNoYXIgKmVwOworCWNoYXIgKm1zZzsKKworCWxpbmUgKz0gODI7CisJZm9yIChlcCA9IGxpbmU7IGVwIDwgZW5kcCAmJiAqZXAgIT0gJ1xuJzsgZXArKykKKwkJOworCW1zZyA9IHhtYWxsb2MoZXAgLSBsaW5lICsgMSk7CisJbWVtY3B5KG1zZywgbGluZSwgZXAgLSBsaW5lKTsKKwltc2dbZXAgLSBsaW5lXSA9IDA7CisJcmV0dXJuIG1zZzsKK30KKworaW50IHJlYWRfcmVmX2F0KGNvbnN0IGNoYXIgKnJlZiwgdW5zaWduZWQgbG9uZyBhdF90aW1lLCBpbnQgY250LCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqbXNnLCB1bnNpZ25lZCBsb25nICpjdXRvZmZfdGltZSwgaW50ICpjdXRvZmZfdHosIGludCAqY3V0b2ZmX2NudCkKIHsKIAljb25zdCBjaGFyICpsb2dmaWxlLCAqbG9nZGF0YSwgKmxvZ2VuZCwgKnJlYywgKmxhc3RndCwgKmxhc3RyZWM7CiAJY2hhciAqdHpfYzsKQEAgLTEwMjAsNiArMTA1Miw3IEBACiAJc3RydWN0IHN0YXQgc3Q7CiAJdW5zaWduZWQgbG9uZyBkYXRlOwogCXVuc2lnbmVkIGNoYXIgbG9nZ2VkX3NoYTFbMjBdOworCXZvaWQgKmxvZ19tYXBwZWQ7CiAKIAlsb2dmaWxlID0gZ2l0X3BhdGgoImxvZ3MvJXMiLCByZWYpOwogCWxvZ2ZkID0gb3Blbihsb2dmaWxlLCBPX1JET05MWSwgMCk7CkBAIC0xMDI4LDcgKzEwNjEsOCBAQAogCWZzdGF0KGxvZ2ZkLCAmc3QpOwogCWlmICghc3Quc3Rfc2l6ZSkKIAkJZGllKCJMb2cgJXMgaXMgZW1wdHkuIiwgbG9nZmlsZSk7Ci0JbG9nZGF0YSA9IHhtbWFwKE5VTEwsIHN0LnN0X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGxvZ2ZkLCAwKTsKKwlsb2dfbWFwcGVkID0geG1tYXAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgbG9nZmQsIDApOworCWxvZ2RhdGEgPSBsb2dfbWFwcGVkOwogCWNsb3NlKGxvZ2ZkKTsKIAogCWxhc3RyZWMgPSBOVUxMOwpAQCAtMTA0NywxMyArMTA4MSwyMSBAQAogCQkJZGllKCJMb2cgJXMgaXMgY29ycnVwdC4iLCBsb2dmaWxlKTsKIAkJZGF0ZSA9IHN0cnRvdWwobGFzdGd0ICsgMSwgJnR6X2MsIDEwKTsKIAkJaWYgKGRhdGUgPD0gYXRfdGltZSB8fCBjbnQgPT0gMCkgeworCQkJdHogPSBzdHJ0b3VsKHR6X2MsIE5VTEwsIDEwKTsKKwkJCWlmIChtc2cpCisJCQkJKm1zZyA9IHJlZl9tc2cocmVjLCBsb2dlbmQpOworCQkJaWYgKGN1dG9mZl90aW1lKQorCQkJCSpjdXRvZmZfdGltZSA9IGRhdGU7CisJCQlpZiAoY3V0b2ZmX3R6KQorCQkJCSpjdXRvZmZfdHogPSB0ejsKKwkJCWlmIChjdXRvZmZfY250KQorCQkJCSpjdXRvZmZfY250ID0gcmVjY250IC0gMTsKIAkJCWlmIChsYXN0cmVjKSB7CiAJCQkJaWYgKGdldF9zaGExX2hleChsYXN0cmVjLCBsb2dnZWRfc2hhMSkpCiAJCQkJCWRpZSgiTG9nICVzIGlzIGNvcnJ1cHQuIiwgbG9nZmlsZSk7CiAJCQkJaWYgKGdldF9zaGExX2hleChyZWMgKyA0MSwgc2hhMSkpCiAJCQkJCWRpZSgiTG9nICVzIGlzIGNvcnJ1cHQuIiwgbG9nZmlsZSk7CiAJCQkJaWYgKGhhc2hjbXAobG9nZ2VkX3NoYTEsIHNoYTEpKSB7Ci0JCQkJCXR6ID0gc3RydG91bCh0el9jLCBOVUxMLCAxMCk7CiAJCQkJCWZwcmludGYoc3RkZXJyLAogCQkJCQkJIndhcm5pbmc6IExvZyAlcyBoYXMgZ2FwIGFmdGVyICVzLlxuIiwKIAkJCQkJCWxvZ2ZpbGUsIHNob3dfcmZjMjgyMl9kYXRlKGRhdGUsIHR6KSk7CkBAIC0xMDY3LDEzICsxMTA5LDEyIEBACiAJCQkJaWYgKGdldF9zaGExX2hleChyZWMgKyA0MSwgbG9nZ2VkX3NoYTEpKQogCQkJCQlkaWUoIkxvZyAlcyBpcyBjb3JydXB0LiIsIGxvZ2ZpbGUpOwogCQkJCWlmIChoYXNoY21wKGxvZ2dlZF9zaGExLCBzaGExKSkgewotCQkJCQl0eiA9IHN0cnRvdWwodHpfYywgTlVMTCwgMTApOwogCQkJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkJCSJ3YXJuaW5nOiBMb2cgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzLlxuIiwKIAkJCQkJCWxvZ2ZpbGUsIHNob3dfcmZjMjgyMl9kYXRlKGRhdGUsIHR6KSk7CiAJCQkJfQogCQkJfQotCQkJbXVubWFwKCh2b2lkKilsb2dkYXRhLCBzdC5zdF9zaXplKTsKKwkJCW11bm1hcChsb2dfbWFwcGVkLCBzdC5zdF9zaXplKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWxhc3RyZWMgPSByZWM7CkBAIC0xMDkwLDE0ICsxMTMxLDE3IEBACiAJdHogPSBzdHJ0b3VsKHR6X2MsIE5VTEwsIDEwKTsKIAlpZiAoZ2V0X3NoYTFfaGV4KGxvZ2RhdGEsIHNoYTEpKQogCQlkaWUoIkxvZyAlcyBpcyBjb3JydXB0LiIsIGxvZ2ZpbGUpOwotCW11bm1hcCgodm9pZCopbG9nZGF0YSwgc3Quc3Rfc2l6ZSk7Ci0JaWYgKGF0X3RpbWUpCi0JCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogTG9nICVzIG9ubHkgZ29lcyBiYWNrIHRvICVzLlxuIiwKLQkJCWxvZ2ZpbGUsIHNob3dfcmZjMjgyMl9kYXRlKGRhdGUsIHR6KSk7Ci0JZWxzZQotCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IExvZyAlcyBvbmx5IGhhcyAlZCBlbnRyaWVzLlxuIiwKLQkJCWxvZ2ZpbGUsIHJlY2NudCk7Ci0JcmV0dXJuIDA7CisJaWYgKG1zZykKKwkJKm1zZyA9IHJlZl9tc2cobG9nZGF0YSwgbG9nZW5kKTsKKwltdW5tYXAobG9nX21hcHBlZCwgc3Quc3Rfc2l6ZSk7CisKKwlpZiAoY3V0b2ZmX3RpbWUpCisJCSpjdXRvZmZfdGltZSA9IGRhdGU7CisJaWYgKGN1dG9mZl90eikKKwkJKmN1dG9mZl90eiA9IHR6OworCWlmIChjdXRvZmZfY250KQorCQkqY3V0b2ZmX2NudCA9IHJlY2NudDsKKwlyZXR1cm4gMTsKIH0KIAogaW50IGZvcl9lYWNoX3JlZmxvZ19lbnQoY29uc3QgY2hhciAqcmVmLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCkBAIC0xMTA1LDYgKzExNDksNyBAQAogCWNvbnN0IGNoYXIgKmxvZ2ZpbGU7CiAJRklMRSAqbG9nZnA7CiAJY2hhciBidWZbMTAyNF07CisJaW50IHJldCA9IDA7CiAKIAlsb2dmaWxlID0gZ2l0X3BhdGgoImxvZ3MvJXMiLCByZWYpOwogCWxvZ2ZwID0gZm9wZW4obG9nZmlsZSwgInIiKTsKQEAgLTExMTQsNyArMTE1OSw3IEBACiAJCXVuc2lnbmVkIGNoYXIgb3NoYTFbMjBdLCBuc2hhMVsyMF07CiAJCWNoYXIgKmVtYWlsX2VuZCwgKm1lc3NhZ2U7CiAJCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOwotCQlpbnQgbGVuLCByZXQsIHR6OworCQlpbnQgbGVuLCB0ejsKIAogCQkvKiBvbGQgU1AgbmV3IFNQIG5hbWUgPGVtYWlsPiBTUCB0aW1lIFRBQiBtc2cgTEYgKi8KIAkJbGVuID0gc3RybGVuKGJ1Zik7CkBAIC0xMTM1LDkgKzExODAsOSBAQAogCQltZXNzYWdlICs9IDc7CiAJCXJldCA9IGZuKG9zaGExLCBuc2hhMSwgYnVmKzgyLCB0aW1lc3RhbXAsIHR6LCBtZXNzYWdlLCBjYl9kYXRhKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlicmVhazsKIAl9CiAJZmNsb3NlKGxvZ2ZwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9yZWZzLmggYi9yZWZzLmgKaW5kZXggMGU4NzdlOC4uMzM0NTBmMSAxMDA2NDQKLS0tIGEvcmVmcy5oCisrKyBiL3JlZnMuaApAQCAtNDIsNyArNDIsNyBAQAogZXh0ZXJuIGludCB3cml0ZV9yZWZfc2hhMShzdHJ1Y3QgcmVmX2xvY2sgKmxvY2ssIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKm1zZyk7CiAKIC8qKiBSZWFkcyBsb2cgZm9yIHRoZSB2YWx1ZSBvZiByZWYgZHVyaW5nIGF0X3RpbWUuICoqLwotZXh0ZXJuIGludCByZWFkX3JlZl9hdChjb25zdCBjaGFyICpyZWYsIHVuc2lnbmVkIGxvbmcgYXRfdGltZSwgaW50IGNudCwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gaW50IHJlYWRfcmVmX2F0KGNvbnN0IGNoYXIgKnJlZiwgdW5zaWduZWQgbG9uZyBhdF90aW1lLCBpbnQgY250LCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqbXNnLCB1bnNpZ25lZCBsb25nICpjdXRvZmZfdGltZSwgaW50ICpjdXRvZmZfdHosIGludCAqY3V0b2ZmX2NudCk7CiAKIC8qIGl0ZXJhdGUgb3ZlciByZWZsb2cgZW50cmllcyAqLwogdHlwZWRlZiBpbnQgZWFjaF9yZWZsb2dfZW50X2ZuKHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL3JldmlzaW9uLmMgYi9yZXZpc2lvbi5jCmluZGV4IGYyZGRkOTUuLjViY2QxNTUgMTAwNjQ0Ci0tLSBhL3JldmlzaW9uLmMKKysrIGIvcmV2aXNpb24uYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAicmV2aXNpb24uaCIKICNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKIAogc3RhdGljIGNoYXIgKnBhdGhfbmFtZShzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMTE2LDYgKzExNyw5IEBACiB2b2lkIGFkZF9wZW5kaW5nX29iamVjdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlhZGRfb2JqZWN0X2FycmF5KG9iaiwgbmFtZSwgJnJldnMtPnBlbmRpbmcpOworCWlmIChyZXZzLT5yZWZsb2dfaW5mbyAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJYWRkX3JlZmxvZ19mb3Jfd2FsayhyZXZzLT5yZWZsb2dfaW5mbywKKwkJCQkoc3RydWN0IGNvbW1pdCAqKW9iaiwgbmFtZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0ICpnZXRfcmVmZXJlbmNlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtODY0LDYgKzg2OCwxMSBAQAogCQkJCWhhbmRsZV9yZWZsb2cocmV2cywgZmxhZ3MpOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLWciKSB8fAorCQkJCQkhc3RyY21wKGFyZywgIi0td2Fsay1yZWZsb2dzIikpIHsKKwkJCQlpbml0X3JlZmxvZ193YWxrKCZyZXZzLT5yZWZsb2dfaW5mbyk7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLW5vdCIpKSB7CiAJCQkJZmxhZ3MgXj0gVU5JTlRFUkVTVElORzsKIAkJCQljb250aW51ZTsKQEAgLTEyMTAsNiArMTIxOSw5IEBACiAJCXJldnMtPmNvbW1pdHMgPSBlbnRyeS0+bmV4dDsKIAkJZnJlZShlbnRyeSk7CiAKKwkJaWYgKHJldnMtPnJlZmxvZ19pbmZvKQorCQkJZmFrZV9yZWZsb2dfcGFyZW50KHJldnMtPnJlZmxvZ19pbmZvLCBjb21taXQpOworCiAJCS8qCiAJCSAqIElmIHdlIGhhdmVuJ3QgZG9uZSB0aGUgbGlzdCBsaW1pdGluZywgd2UgbmVlZCB0byBsb29rIGF0CiAJCSAqIHRoZSBwYXJlbnRzIGhlcmUuIFdlIGFsc28gbmVlZCB0byBkbyB0aGUgZGF0ZS1iYXNlZCBsaW1pdGluZwpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uaCBiL3JldmlzaW9uLmgKaW5kZXggOGY3OTA3ZC4uZDkzNDgxZiAxMDA2NDQKLS0tIGEvcmV2aXNpb24uaAorKysgYi9yZXZpc2lvbi5oCkBAIC04OSw2ICs4OSw4IEBACiAKIAl0b3BvX3NvcnRfc2V0X2ZuX3QgdG9wb19zZXR0ZXI7CiAJdG9wb19zb3J0X2dldF9mbl90IHRvcG9fZ2V0dGVyOworCisJc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvOwogfTsKIAogI2RlZmluZSBSRVZfVFJFRV9TQU1FCQkwCmRpZmYgLS1naXQgYS9zZW5kLXBhY2suYyBiL3NlbmQtcGFjay5jCmluZGV4IDY3NTYyNjQuLjMzZTY5ZGIgMTAwNjQ0Ci0tLSBhL3NlbmQtcGFjay5jCisrKyBiL3NlbmQtcGFjay5jCkBAIC02LDkgKzYsOSBAQAogI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHNlbmRfcGFja191c2FnZVtdID0KLSJnaXQtc2VuZC1wYWNrIFstLWFsbF0gWy0tZXhlYz1naXQtcmVjZWl2ZS1wYWNrXSA8cmVtb3RlPiBbPGhlYWQ+Li4uXVxuIgotIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxoZWFkPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIjsKLXN0YXRpYyBjb25zdCBjaGFyICpleGVjID0gImdpdC1yZWNlaXZlLXBhY2siOworImdpdC1zZW5kLXBhY2sgWy0tYWxsXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iOworc3RhdGljIGNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrID0gImdpdC1yZWNlaXZlLXBhY2siOwogc3RhdGljIGludCB2ZXJib3NlOwogc3RhdGljIGludCBzZW5kX2FsbDsKIHN0YXRpYyBpbnQgZm9yY2VfdXBkYXRlOwpAQCAtMjUsNiArMjUsOCBAQAogCWlmIChwaXBlKHBpcGVfZmQpIDwgMCkKIAkJcmV0dXJuIGVycm9yKCJzZW5kLXBhY2s6IHBpcGUgZmFpbGVkIik7CiAJcGlkID0gZm9yaygpOworCWlmIChwaWQgPCAwKQorCQlyZXR1cm4gZXJyb3IoInNlbmQtcGFjazogdW5hYmxlIHRvIGZvcmsgZ2l0LXBhY2stb2JqZWN0cyIpOwogCWlmICghcGlkKSB7CiAJCS8qCiAJCSAqIFRoZSBjaGlsZCBiZWNvbWVzIHBhY2stb2JqZWN0cyAtLXJldnM7IHdlIGZlZWQKQEAgLTM3Nyw4ICszNzksMTIgQEAKIAkJY2hhciAqYXJnID0gKmFyZ3Y7CiAKIAkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cm5jbXAoYXJnLCAiLS1yZWNlaXZlLXBhY2s9IiwgMTUpKSB7CisJCQkJcmVjZWl2ZXBhY2sgPSBhcmcgKyAxNTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RybmNtcChhcmcsICItLWV4ZWM9IiwgNykpIHsKLQkJCQlleGVjID0gYXJnICsgNzsKKwkJCQlyZWNlaXZlcGFjayA9IGFyZyArIDc7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CkBAIC00MTMsNyArNDE5LDcgQEAKIAkJdXNhZ2Uoc2VuZF9wYWNrX3VzYWdlKTsKIAl2ZXJpZnlfcmVtb3RlX25hbWVzKG5yX2hlYWRzLCBoZWFkcyk7CiAKLQlwaWQgPSBnaXRfY29ubmVjdChmZCwgZGVzdCwgZXhlYyk7CisJcGlkID0gZ2l0X2Nvbm5lY3QoZmQsIGRlc3QsIHJlY2VpdmVwYWNrKTsKIAlpZiAocGlkIDwgMCkKIAkJcmV0dXJuIDE7CiAJcmV0ID0gc2VuZF9wYWNrKGZkWzBdLCBmZFsxXSwgbnJfaGVhZHMsIGhlYWRzKTsKZGlmZiAtLWdpdCBhL3NlcnZlci1pbmZvLmMgYi9zZXJ2ZXItaW5mby5jCmluZGV4IDZjZDM4YmUuLmY5YmU1YTcgMTAwNjQ0Ci0tLSBhL3NlcnZlci1pbmZvLmMKKysrIGIvc2VydmVyLWluZm8uYwpAQCAtMTAsNiArMTAsOCBAQAogc3RhdGljIGludCBhZGRfaW5mb19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCiB7CiAJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdChzaGExKTsKKwlpZiAoIW8pCisJCXJldHVybiAtMTsKIAogCWZwcmludGYoaW5mb19yZWZfZnAsICIlcwklc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIHBhdGgpOwogCWlmIChvLT50eXBlID09IE9CSl9UQUcpIHsKZGlmZiAtLWdpdCBhL3NldHVwLmMgYi9zZXR1cC5jCmluZGV4IGNjOTdmOWYuLmU5ZDNmNWEgMTAwNjQ0Ci0tLSBhL3NldHVwLmMKKysrIGIvc2V0dXAuYwpAQCAtOTUsNiArOTUsOCBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IHN0YXQgc3Q7CiAKKwlpZiAoaXNfaW5zaWRlX2dpdF9kaXIoKSkKKwkJcmV0dXJuOwogCWlmICgqYXJnID09ICctJykKIAkJcmV0dXJuOyAvKiBmbGFnICovCiAJbmFtZSA9IHByZWZpeCA/IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCBhcmcpIDogYXJnOwpAQCAtMTY4LDYgKzE3MCwyOCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGluc2lkZV9naXRfZGlyID0gLTE7CisKK2ludCBpc19pbnNpZGVfZ2l0X2Rpcih2b2lkKQoreworCWlmIChpbnNpZGVfZ2l0X2RpciA8IDApIHsKKwkJY2hhciBidWZmZXJbMTAyNF07CisKKwkJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeSgpKQorCQkJcmV0dXJuIChpbnNpZGVfZ2l0X2RpciA9IDEpOworCQlpZiAoZ2V0Y3dkKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKSB7CisJCQljb25zdCBjaGFyICpnaXRfZGlyID0gZ2V0X2dpdF9kaXIoKSwgKmN3ZCA9IGJ1ZmZlcjsKKwkJCXdoaWxlICgqZ2l0X2RpciAmJiAqZ2l0X2RpciA9PSAqY3dkKSB7CisJCQkJZ2l0X2RpcisrOworCQkJCWN3ZCsrOworCQkJfQorCQkJaW5zaWRlX2dpdF9kaXIgPSAhKmdpdF9kaXI7CisJCX0gZWxzZQorCQkJaW5zaWRlX2dpdF9kaXIgPSAwOworCX0KKwlyZXR1cm4gaW5zaWRlX2dpdF9kaXI7Cit9CisKIGNvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KGludCAqbm9uZ2l0X29rKQogewogCXN0YXRpYyBjaGFyIGN3ZFtQQVRIX01BWCsxXTsKQEAgLTIwNiw2ICsyMzAsNyBAQAogCQkJCQlpZiAoY2hkaXIoY3dkKSkKIAkJCQkJCWRpZSgiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKTsKIAkJCQkJc2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQsIGN3ZCwgMSk7CisJCQkJCWluc2lkZV9naXRfZGlyID0gMTsKIAkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJfQogCQkJCWlmIChub25naXRfb2spIHsKQEAgLTIyNiw2ICsyNTEsNyBAQAogCW9mZnNldCsrOwogCWN3ZFtsZW4rK10gPSAnLyc7CiAJY3dkW2xlbl0gPSAwOworCWluc2lkZV9naXRfZGlyID0gIXN0cm5jbXAoY3dkICsgb2Zmc2V0LCAiLmdpdC8iLCA1KTsKIAlyZXR1cm4gY3dkICsgb2Zmc2V0OwogfQogCmRpZmYgLS1naXQgYS9zaGExX2ZpbGUuYyBiL3NoYTFfZmlsZS5jCmluZGV4IDFiMWMwZjcuLjQ5ODY2NWUgMTAwNjQ0Ci0tLSBhL3NoYTFfZmlsZS5jCisrKyBiL3NoYTFfZmlsZS5jCkBAIC00MzUsNyArNDM1LDcgQEAKIAkJCQl2b2lkICoqaWR4X21hcF8pCiB7CiAJdm9pZCAqaWR4X21hcDsKLQl1bnNpZ25lZCBpbnQgKmluZGV4OworCXVpbnQzMl90ICppbmRleDsKIAl1bnNpZ25lZCBsb25nIGlkeF9zaXplOwogCWludCBuciwgaTsKIAlpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKQEAgLTQ1NiwxMiArNDU2LDIzIEBACiAKIAkvKiBjaGVjayBpbmRleCBtYXAgKi8KIAlpZiAoaWR4X3NpemUgPCA0KjI1NiArIDIwICsgMjApCi0JCXJldHVybiBlcnJvcigiaW5kZXggZmlsZSB0b28gc21hbGwiKTsKKwkJcmV0dXJuIGVycm9yKCJpbmRleCBmaWxlICVzIGlzIHRvbyBzbWFsbCIsIHBhdGgpOworCisJLyogYSBmdXR1cmUgaW5kZXggZm9ybWF0IHdvdWxkIHN0YXJ0IHdpdGggdGhpcywgYXMgb2xkZXIgZ2l0CisJICogYmluYXJpZXMgd291bGQgZmFpbCB0aGUgbm9uLW1vbm90b25pYyBpbmRleCBjaGVjayBiZWxvdy4KKwkgKiBnaXZlIGEgbmljZXIgd2FybmluZyB0byB0aGUgdXNlciBpZiB3ZSBjYW4uCisJICovCisJaWYgKGluZGV4WzBdID09IGh0b25sKFBBQ0tfSURYX1NJR05BVFVSRSkpCisJCXJldHVybiBlcnJvcigiaW5kZXggZmlsZSAlcyBpcyBhIG5ld2VyIHZlcnNpb24iCisJCQkiIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYmluYXJ5IgorCQkJIiAodHJ5IHVwZ3JhZGluZyBHSVQgdG8gYSBuZXdlciB2ZXJzaW9uKSIsCisJCQlwYXRoKTsKKwogCW5yID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJdW5zaWduZWQgaW50IG4gPSBudG9obChpbmRleFtpXSk7CiAJCWlmIChuIDwgbnIpCi0JCQlyZXR1cm4gZXJyb3IoIm5vbi1tb25vdG9uaWMgaW5kZXgiKTsKKwkJCXJldHVybiBlcnJvcigibm9uLW1vbm90b25pYyBpbmRleCAlcyIsIHBhdGgpOwogCQluciA9IG47CiAJfQogCkBAIC00NzMsNyArNDg0LDcgQEAKIAkgKiAgLSAyMC1ieXRlIFNIQTEgZmlsZSBjaGVja3N1bQogCSAqLwogCWlmIChpZHhfc2l6ZSAhPSA0KjI1NiArIG5yICogMjQgKyAyMCArIDIwKQotCQlyZXR1cm4gZXJyb3IoIndyb25nIGluZGV4IGZpbGUgc2l6ZSIpOworCQlyZXR1cm4gZXJyb3IoIndyb25nIGluZGV4IGZpbGUgc2l6ZSBpbiAlcyIsIHBhdGgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzQwLDcgKzEzNTEsNyBAQAogdW5zaWduZWQgbG9uZyBmaW5kX3BhY2tfZW50cnlfb25lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCiAJCQkJICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKIHsKLQl1bnNpZ25lZCBpbnQgKmxldmVsMV9vZnMgPSBwLT5pbmRleF9iYXNlOworCXVpbnQzMl90ICpsZXZlbDFfb2ZzID0gcC0+aW5kZXhfYmFzZTsKIAlpbnQgaGkgPSBudG9obChsZXZlbDFfb2ZzWypzaGExXSk7CiAJaW50IGxvID0gKCgqc2hhMSA9PSAweDApID8gMCA6IG50b2hsKGxldmVsMV9vZnNbKnNoYTEgLSAxXSkpOwogCXZvaWQgKmluZGV4ID0gcC0+aW5kZXhfYmFzZSArIDI1NjsKQEAgLTEzNDksNyArMTM2MCw3IEBACiAJCWludCBtaSA9IChsbyArIGhpKSAvIDI7CiAJCWludCBjbXAgPSBoYXNoY21wKCh1bnNpZ25lZCBjaGFyICopaW5kZXggKyAoMjQgKiBtaSkgKyA0LCBzaGExKTsKIAkJaWYgKCFjbXApCi0JCQlyZXR1cm4gbnRvaGwoKigodW5zaWduZWQgaW50ICopICgoY2hhciAqKSBpbmRleCArICgyNCAqIG1pKSkpKTsKKwkJCXJldHVybiBudG9obCgqKCh1aW50MzJfdCAqKSgoY2hhciAqKWluZGV4ICsgKDI0ICogbWkpKSkpOwogCQlpZiAoY21wID4gMCkKIAkJCWhpID0gbWk7CiAJCWVsc2UKQEAgLTE0NTgsMjEgKzE0NjksMjAgQEAKIHsKIAlzdHJ1Y3QgcGFja19lbnRyeSBlOwogCi0JaWYgKCFmaW5kX3BhY2tfZW50cnkoc2hhMSwgJmUsIE5VTEwpKSB7Ci0JCWVycm9yKCJjYW5ub3QgcmVhZCBzaGExX2ZpbGUgZm9yICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmICghZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlLCBOVUxMKSkKIAkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiB1bnBhY2tfZW50cnkoZS5wLCBlLm9mZnNldCwgdHlwZSwgc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gdW5wYWNrX2VudHJ5KGUucCwgZS5vZmZzZXQsIHR5cGUsIHNpemUpOwogfQogCiB2b2lkICogcmVhZF9zaGExX2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqdHlwZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIG1hcHNpemU7CiAJdm9pZCAqbWFwLCAqYnVmOwotCXN0cnVjdCBwYWNrX2VudHJ5IGU7CiAKLQlpZiAoZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlLCBOVUxMKSkKLQkJcmV0dXJuIHJlYWRfcGFja2VkX3NoYTEoc2hhMSwgdHlwZSwgc2l6ZSk7CisJYnVmID0gcmVhZF9wYWNrZWRfc2hhMShzaGExLCB0eXBlLCBzaXplKTsKKwlpZiAoYnVmKQorCQlyZXR1cm4gYnVmOwogCW1hcCA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJm1hcHNpemUpOwogCWlmIChtYXApIHsKIAkJYnVmID0gdW5wYWNrX3NoYTFfZmlsZShtYXAsIG1hcHNpemUsIHR5cGUsIHNpemUpOwpAQCAtMTQ4MCw5ICsxNDkwLDcgQEAKIAkJcmV0dXJuIGJ1ZjsKIAl9CiAJcmVwcmVwYXJlX3BhY2tlZF9naXQoKTsKLQlpZiAoZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlLCBOVUxMKSkKLQkJcmV0dXJuIHJlYWRfcGFja2VkX3NoYTEoc2hhMSwgdHlwZSwgc2l6ZSk7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJlYWRfcGFja2VkX3NoYTEoc2hhMSwgdHlwZSwgc2l6ZSk7CiB9CiAKIHZvaWQgKnJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCkBAIC0xNzcwLDYgKzE3NzgsOCBAQAogCiAJLyogbmVlZCB0byB1bnBhY2sgYW5kIHJlY29tcHJlc3MgaXQgYnkgaXRzZWxmICovCiAJdW5wYWNrZWQgPSByZWFkX3BhY2tlZF9zaGExKHNoYTEsIHR5cGUsICZsZW4pOworCWlmICghdW5wYWNrZWQpCisJCWVycm9yKCJjYW5ub3QgcmVhZCBzaGExX2ZpbGUgZm9yICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOwogCiAJaGRybGVuID0gc3ByaW50ZihoZHIsICIlcyAlbHUiLCB0eXBlLCBsZW4pICsgMTsKIApAQCAtMjAzOCwzICsyMDQ4LDI0IEBACiAJfQogCXJldHVybiAwOwogfQorCitpbnQgcmVhZF9wYWNrX2hlYWRlcihpbnQgZmQsIHN0cnVjdCBwYWNrX2hlYWRlciAqaGVhZGVyKQoreworCWNoYXIgKmMgPSAoY2hhciopaGVhZGVyOworCXNzaXplX3QgcmVtYWluaW5nID0gc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcik7CisJZG8geworCQlzc2l6ZV90IHIgPSB4cmVhZChmZCwgYywgcmVtYWluaW5nKTsKKwkJaWYgKHIgPD0gMCkKKwkJCS8qICJlb2YgYmVmb3JlIHBhY2sgaGVhZGVyIHdhcyBmdWxseSByZWFkIiAqLworCQkJcmV0dXJuIFBIX0VSUk9SX0VPRjsKKwkJcmVtYWluaW5nIC09IHI7CisJCWMgKz0gcjsKKwl9IHdoaWxlIChyZW1haW5pbmcgPiAwKTsKKwlpZiAoaGVhZGVyLT5oZHJfc2lnbmF0dXJlICE9IGh0b25sKFBBQ0tfU0lHTkFUVVJFKSkKKwkJLyogInByb3RvY29sIGVycm9yIChwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCBkZXRlY3RlZCkiICovCisJCXJldHVybiBQSF9FUlJPUl9QQUNLX1NJR05BVFVSRTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZWFkZXItPmhkcl92ZXJzaW9uKSkKKwkJLyogInByb3RvY29sIGVycm9yIChwYWNrIHZlcnNpb24gdW5zdXBwb3J0ZWQpIiAqLworCQlyZXR1cm4gUEhfRVJST1JfUFJPVE9DT0w7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zaGExX25hbWUuYyBiL3NoYTFfbmFtZS5jCmluZGV4IDZkN2NkNzguLjlkZmIzYWMgMTAwNjQ0Ci0tLSBhL3NoYTFfbmFtZS5jCisrKyBiL3NoYTFfbmFtZS5jCkBAIC0yMzUsNyArMjM1LDcgQEAKIAlyZXR1cm4gc2xhc2g7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3NoYTFfYmFzaWMoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExKQoraW50IGR3aW1fcmVmKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqKnJlZikKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqZm10W10gPSB7CiAJCSIlLipzIiwKQEAgLTI0NiwxMyArMjQ2LDMyIEBACiAJCSJyZWZzL3JlbW90ZXMvJS4qcy9IRUFEIiwKIAkJTlVMTAogCX07CisJY29uc3QgY2hhciAqKnAsICpyOworCWludCByZWZzX2ZvdW5kID0gMDsKKworCSpyZWYgPSBOVUxMOworCWZvciAocCA9IGZtdDsgKnA7IHArKykgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFfZnJvbV9yZWZbMjBdOworCQl1bnNpZ25lZCBjaGFyICp0aGlzX3Jlc3VsdDsKKworCQl0aGlzX3Jlc3VsdCA9IHJlZnNfZm91bmQgPyBzaGExX2Zyb21fcmVmIDogc2hhMTsKKwkJciA9IHJlc29sdmVfcmVmKG1rcGF0aCgqcCwgbGVuLCBzdHIpLCB0aGlzX3Jlc3VsdCwgMSwgTlVMTCk7CisJCWlmIChyKSB7CisJCQlpZiAoIXJlZnNfZm91bmQrKykKKwkJCQkqcmVmID0geHN0cmR1cChyKTsKKwkJCWlmICghd2Fybl9hbWJpZ3VvdXNfcmVmcykKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmVmc19mb3VuZDsKK30KKworc3RhdGljIGludCBnZXRfc2hhMV9iYXNpYyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CiAJc3RhdGljIGNvbnN0IGNoYXIgKndhcm5pbmcgPSAid2FybmluZzogcmVmbmFtZSAnJS4qcycgaXMgYW1iaWd1b3VzLlxuIjsKLQljb25zdCBjaGFyICoqcCwgKnJlZjsKIAljaGFyICpyZWFsX3JlZiA9IE5VTEw7CiAJaW50IHJlZnNfZm91bmQgPSAwOwogCWludCBhdCwgcmVmbG9nX2xlbjsKLQl1bnNpZ25lZCBjaGFyICp0aGlzX3Jlc3VsdDsKLQl1bnNpZ25lZCBjaGFyIHNoYTFfZnJvbV9yZWZbMjBdOwogCiAJaWYgKGxlbiA9PSA0MCAmJiAhZ2V0X3NoYTFfaGV4KHN0ciwgc2hhMSkpCiAJCXJldHVybiAwOwpAQCAtMjczLDE2ICsyOTIsNyBAQAogCWlmIChhbWJpZ3VvdXNfcGF0aChzdHIsIGxlbikpCiAJCXJldHVybiAtMTsKIAotCWZvciAocCA9IGZtdDsgKnA7IHArKykgewotCQl0aGlzX3Jlc3VsdCA9IHJlZnNfZm91bmQgPyBzaGExX2Zyb21fcmVmIDogc2hhMTsKLQkJcmVmID0gcmVzb2x2ZV9yZWYobWtwYXRoKCpwLCBsZW4sIHN0ciksIHRoaXNfcmVzdWx0LCAxLCBOVUxMKTsKLQkJaWYgKHJlZikgewotCQkJaWYgKCFyZWZzX2ZvdW5kKyspCi0JCQkJcmVhbF9yZWYgPSB4c3RyZHVwKHJlZik7Ci0JCQlpZiAoIXdhcm5fYW1iaWd1b3VzX3JlZnMpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9CisJcmVmc19mb3VuZCA9IGR3aW1fcmVmKHN0ciwgbGVuLCBzaGExLCAmcmVhbF9yZWYpOwogCiAJaWYgKCFyZWZzX2ZvdW5kKQogCQlyZXR1cm4gLTE7CkBAIC0yOTQsNiArMzA0LDkgQEAKIAkJLyogSXMgaXQgYXNraW5nIGZvciBOLXRoIGVudHJ5LCBvciBhcHByb3hpZGF0ZT8gKi8KIAkJaW50IG50aCwgaTsKIAkJdW5zaWduZWQgbG9uZyBhdF90aW1lOworCQl1bnNpZ25lZCBsb25nIGNvX3RpbWU7CisJCWludCBjb190eiwgY29fY250OworCiAJCWZvciAoaSA9IG50aCA9IDA7IDAgPD0gbnRoICYmIGkgPCByZWZsb2dfbGVuOyBpKyspIHsKIAkJCWNoYXIgY2ggPSBzdHJbYXQrMitpXTsKIAkJCWlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKQpAQCAtMzA1LDcgKzMxOCwxOCBAQAogCQkJYXRfdGltZSA9IDA7CiAJCWVsc2UKIAkJCWF0X3RpbWUgPSBhcHByb3hpZGF0ZShzdHIgKyBhdCArIDIpOwotCQlyZWFkX3JlZl9hdChyZWFsX3JlZiwgYXRfdGltZSwgbnRoLCBzaGExKTsKKwkJaWYgKHJlYWRfcmVmX2F0KHJlYWxfcmVmLCBhdF90aW1lLCBudGgsIHNoYTEsIE5VTEwsCisJCQkJJmNvX3RpbWUsICZjb190eiwgJmNvX2NudCkpIHsKKwkJCWlmIChhdF90aW1lKQorCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkid2FybmluZzogTG9nIGZvciAnJS4qcycgb25seSBnb2VzICIKKwkJCQkJImJhY2sgdG8gJXMuXG4iLCBsZW4sIHN0ciwKKwkJCQkJc2hvd19yZmMyODIyX2RhdGUoY29fdGltZSwgY29fdHopKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIndhcm5pbmc6IExvZyBmb3IgJyUuKnMnIG9ubHkgaGFzICIKKwkJCQkJIiVkIGVudHJpZXMuXG4iLCBsZW4sIHN0ciwgY29fY250KTsKKwkJfQogCX0KIAogCWZyZWUocmVhbF9yZWYpOwpkaWZmIC0tZ2l0IGEvc2hhbGxvdy5jIGIvc2hhbGxvdy5jCmluZGV4IDNkNTNkMTcuLmQxNzg2ODkgMTAwNjQ0Ci0tLSBhL3NoYWxsb3cuYworKysgYi9zaGFsbG93LmMKQEAgLTE3LDcgKzE3LDcgQEAKIAlyZXR1cm4gcmVnaXN0ZXJfY29tbWl0X2dyYWZ0KGdyYWZ0LCAwKTsKIH0KIAotaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpCitpbnQgaXNfcmVwb3NpdG9yeV9zaGFsbG93KHZvaWQpCiB7CiAJRklMRSAqZnA7CiAJY2hhciBidWZbMTAyNF07CmRpZmYgLS1naXQgYS9zc2gtZmV0Y2guYyBiL3NzaC1mZXRjaC5jCmluZGV4IDRjMTcyYjYuLmJkZjUxYTcgMTAwNjQ0Ci0tLSBhL3NzaC1mZXRjaC5jCisrKyBiL3NzaC1mZXRjaC5jCkBAIC0xMjQsNyArMTI0LDYgQEAKIAlwcm9nID0gZ2V0ZW52KCJHSVRfU1NIX1BVU0giKTsKIAlpZiAoIXByb2cpIHByb2cgPSAiZ2l0LXNzaC11cGxvYWQiOwogCi0Jc2V0dXBfaWRlbnQoKTsKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwogCmRpZmYgLS1naXQgYS90L3QxMDIwLXN1YmRpcmVjdG9yeS5zaCBiL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoCmluZGV4IDQ0MDliODcuLmMwOTBjOTYgMTAwNzU1Ci0tLSBhL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoCisrKyBiL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoCkBAIC0xMDYsNCArMTA2LDMzIEBACiAJY21wIC4uL29uZSAuLi9vcmlnaW5hbC5vbmUKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1idWd1aXR5IGNoZWNrIGluc2lkZSAuZ2l0JyAnCisJY2QgJEhFUkUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIDEgJiYKKwljZCAkSEVSRS8uZ2l0ICYmCisJZ2l0IHNob3cgLXMgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBmaWxlL3JldiBhbWJ1Z3VpdHkgY2hlY2sgaW5zaWRlIGEgYmFyZSByZXBvJyAnCisJY2QgJEhFUkUgJiYKKwlnaXQgY2xvbmUgLXMgLS1iYXJlIC5naXQgZm9vLmdpdCAmJgorCWNkIGZvby5naXQgJiYgR0lUX0RJUj0uIGdpdCBzaG93IC1zIEhFQUQKKycKKworIyBUaGlzIHN0aWxsIGRvZXMgbm90IHdvcmsgYXMgaXQgc2hvdWxkLi4uCis6IHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYnVndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8nICcKKwljZCAkSEVSRSAmJgorCWdpdCBjbG9uZSAtcyAtLWJhcmUgLmdpdCBmb28uZ2l0ICYmCisJY2QgZm9vLmdpdCAmJiBnaXQgc2hvdyAtcyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdGlvbiBzaG91bGQgbm90IGJlIGZvb2xlZCBieSBhIHN5bWxpbmsnICcKKwljZCAkSEVSRSAmJgorCXJtIC1mciBmb28uZ2l0ICYmCisJZ2l0IGNsb25lIC1zIC5naXQgYW5vdGhlciAmJgorCWxuIC1zIGFub3RoZXIgeWV0YW5vdGhlciAmJgorCWNkIHlldGFub3RoZXIvLmdpdCAmJgorCWdpdCBzaG93IC1zIEhFQUQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzAwLXJlcG8tY29uZmlnLnNoIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaAppbmRleCA2MGFjZGQzLi40OWI1NjY2IDEwMDc1NQotLS0gYS90L3QxMzAwLXJlcG8tY29uZmlnLnNoCisrKyBiL3QvdDEzMDAtcmVwby1jb25maWcuc2gKQEAgLTMsMTMgKzMsMTMgQEAKICMgQ29weXJpZ2h0IChjKSAyMDA1IEpvaGFubmVzIFNjaGluZGVsaW4KICMKIAotdGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQtcmVwby1jb25maWcgaW4gZGlmZmVyZW50IHNldHRpbmdzJwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQtY29uZmlnIGluIGRpZmZlcmVudCBzZXR0aW5ncycKIAogLiAuL3Rlc3QtbGliLnNoCiAKIHRlc3QgLWYgLmdpdC9jb25maWcgJiYgcm0gLmdpdC9jb25maWcKIAotZ2l0LXJlcG8tY29uZmlnIGNvcmUucGVuZ3VpbiAibGl0dGxlIGJsdWUiCitnaXQtY29uZmlnIGNvcmUucGVuZ3VpbiAibGl0dGxlIGJsdWUiCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIFtjb3JlXQpAQCAtMTgsNyArMTgsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsJyAnY21wIC5naXQvY29uZmlnIGV4cGVjdCcKIAotZ2l0LXJlcG8tY29uZmlnIENvcmUuTW92aWUgQmFkUGh5c2ljcworZ2l0LWNvbmZpZyBDb3JlLk1vdmllIEJhZFBoeXNpY3MKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogW2NvcmVdCkBAIC0yOCw3ICsyOCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkIGNhc2UnICdjbXAgLmdpdC9jb25maWcgZXhwZWN0JwogCi1naXQtcmVwby1jb25maWcgQ29yZXMuV2hhdEV2ZXIgU2Vjb25kCitnaXQtY29uZmlnIENvcmVzLldoYXRFdmVyIFNlY29uZAogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiBbY29yZV0KQEAgLTQwLDcgKzQwLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltaWxhciBzZWN0aW9uJyAnY21wIC5naXQvY29uZmlnIGV4cGVjdCcKIAotZ2l0LXJlcG8tY29uZmlnIENPUkUuVVBQRVJDQVNFIHRydWUKK2dpdC1jb25maWcgQ09SRS5VUFBFUkNBU0UgdHJ1ZQogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiBbY29yZV0KQEAgLTU0LDEwICs1NCwxMCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltaWxhciBzZWN0aW9uJyAnY21wIC5naXQvY29uZmlnIGV4cGVjdCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSB3aXRoIG5vbi1tYXRjaCcgXAotCSdnaXQtcmVwby1jb25maWcgY29yZS5wZW5ndWluIGtpbmdwaW4gIWJsdWUnCisJJ2dpdC1jb25maWcgY29yZS5wZW5ndWluIGtpbmdwaW4gIWJsdWUnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2Ugd2l0aCBub24tbWF0Y2ggKGFjdHVhbGx5IG1hdGNoaW5nKScgXAotCSdnaXQtcmVwby1jb25maWcgY29yZS5wZW5ndWluICJ2ZXJ5IGJsdWUiICFraW5ncGluJworCSdnaXQtY29uZmlnIGNvcmUucGVuZ3VpbiAidmVyeSBibHVlIiAha2luZ3BpbicKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogW2NvcmVdCkBAIC04Niw3ICs4Niw3IEBACiBjcCAuZ2l0L2NvbmZpZyAuZ2l0L2NvbmZpZzIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgdW5zZXQnIFwKLQknZ2l0LXJlcG8tY29uZmlnIC0tdW5zZXQtYWxsIGJldGEuaGFoYScKKwknZ2l0LWNvbmZpZyAtLXVuc2V0LWFsbCBiZXRhLmhhaGEnCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIFtiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKQEAgLTEwMiw3ICsxMDIsNyBAQAogbXYgLmdpdC9jb25maWcyIC5naXQvY29uZmlnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVwbGFjZS1hbGwnIFwKLQknZ2l0LXJlcG8tY29uZmlnIC0tcmVwbGFjZS1hbGwgYmV0YS5oYWhhIGdhbW1hJworCSdnaXQtY29uZmlnIC0tcmVwbGFjZS1hbGwgYmV0YS5oYWhhIGdhbW1hJwogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiBbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50CkBAIC0xMTYsNyArMTE2LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIHJlcGxhY2VkJyAnY21wIC5naXQvY29uZmlnIGV4cGVjdCcKIAotZ2l0LXJlcG8tY29uZmlnIGJldGEuaGFoYSBhbHBoYQorZ2l0LWNvbmZpZyBiZXRhLmhhaGEgYWxwaGEKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudApAQCAtMTMwLDcgKzEzMCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWxseSBtZWFuIHRlc3QnICdjbXAgLmdpdC9jb25maWcgZXhwZWN0JwogCi1naXQtcmVwby1jb25maWcgbmV4dHNlY3Rpb24ubm9uZXdsaW5lIHdvdworZ2l0LWNvbmZpZyBuZXh0c2VjdGlvbi5ub25ld2xpbmUgd293CiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIFtiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKQEAgLTE0NSw4ICsxNDUsOCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsbHkgcmVhbGx5IG1lYW4gdGVzdCcgJ2NtcCAuZ2l0L2NvbmZpZyBleHBlY3QnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCB2YWx1ZScgJ3Rlc3QgYWxwaGEgPSAkKGdpdC1yZXBvLWNvbmZpZyBiZXRhLmhhaGEpJwotZ2l0LXJlcG8tY29uZmlnIC0tdW5zZXQgYmV0YS5oYWhhCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFsdWUnICd0ZXN0IGFscGhhID0gJChnaXQtY29uZmlnIGJldGEuaGFoYSknCitnaXQtY29uZmlnIC0tdW5zZXQgYmV0YS5oYWhhCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIFtiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnNldCcgJ2NtcCAuZ2l0L2NvbmZpZyBleHBlY3QnCiAKLWdpdC1yZXBvLWNvbmZpZyBuZXh0c2VjdGlvbi5Ob05ld0xpbmUgIndvdzIgZm9yIG1lIiAiZm9yIG1lJCIKK2dpdC1jb25maWcgbmV4dHNlY3Rpb24uTm9OZXdMaW5lICJ3b3cyIGZvciBtZSIgImZvciBtZSQiCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIFtiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKQEAgLTE3NiwxOCArMTc2LDE4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXZhcicgJ2NtcCAuZ2l0L2NvbmZpZyBleHBlY3QnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaCcgXAotCSdnaXQtcmVwby1jb25maWcgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICFmb3InCisJJ2dpdC1jb25maWcgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICFmb3InCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaCB2YWx1ZScgXAotCSd0ZXN0IHdvdyA9ICQoZ2l0LXJlcG8tY29uZmlnIC0tZ2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZSAhZm9yKScKKwkndGVzdCB3b3cgPSAkKGdpdC1jb25maWcgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICFmb3IpJwogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlICdhbWJpZ3VvdXMgZ2V0JyBcCi0JJ2dpdC1yZXBvLWNvbmZpZyAtLWdldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUnCisJJ2dpdC1jb25maWcgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgbXVsdGl2YXInIFwKLQknZ2l0LXJlcG8tY29uZmlnIC0tZ2V0LWFsbCBuZXh0c2VjdGlvbi5ub25ld2xpbmUnCisJJ2dpdC1jb25maWcgLS1nZXQtYWxsIG5leHRzZWN0aW9uLm5vbmV3bGluZScKIAotZ2l0LXJlcG8tY29uZmlnIG5leHRzZWN0aW9uLm5vbmV3bGluZSAid293MyIgIndvdyQiCitnaXQtY29uZmlnIG5leHRzZWN0aW9uLm5vbmV3bGluZSAid293MyIgIndvdyQiCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIFtiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKQEAgLTIwMiwxNSArMjAyLDE1IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpdmFyIHJlcGxhY2UnICdjbXAgLmdpdC9jb25maWcgZXhwZWN0JwogCi10ZXN0X2V4cGVjdF9mYWlsdXJlICdhbWJpZ3VvdXMgdmFsdWUnICdnaXQtcmVwby1jb25maWcgbmV4dHNlY3Rpb24ubm9uZXdsaW5lJwordGVzdF9leHBlY3RfZmFpbHVyZSAnYW1iaWd1b3VzIHZhbHVlJyAnZ2l0LWNvbmZpZyBuZXh0c2VjdGlvbi5ub25ld2xpbmUnCiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2FtYmlndW91cyB1bnNldCcgXAotCSdnaXQtcmVwby1jb25maWcgLS11bnNldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUnCisJJ2dpdC1jb25maWcgLS11bnNldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUnCiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2ludmFsaWQgdW5zZXQnIFwKLQknZ2l0LXJlcG8tY29uZmlnIC0tdW5zZXQgc29tZXNlY3Rpb24ubm9uZXdsaW5lJworCSdnaXQtY29uZmlnIC0tdW5zZXQgc29tZXNlY3Rpb24ubm9uZXdsaW5lJwogCi1naXQtcmVwby1jb25maWcgLS11bnNldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUgIndvdzMkIgorZ2l0LWNvbmZpZyAtLXVuc2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZSAid293MyQiCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIFtiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKQEAgLTIyNCwxMiArMjI0LDEyIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpdmFyIHVuc2V0JyAnY21wIC5naXQvY29uZmlnIGV4cGVjdCcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAnaW52YWxpZCBrZXknICdnaXQtcmVwby1jb25maWcgaW52YWwuMmtleSBibGFibGEnCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdpbnZhbGlkIGtleScgJ2dpdC1jb25maWcgaW52YWwuMmtleSBibGFibGEnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3Qga2V5JyAnZ2l0LXJlcG8tY29uZmlnIDEyMzQ1Ni5hMTIzIDk4NycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3Qga2V5JyAnZ2l0LWNvbmZpZyAxMjM0NTYuYTEyMyA5ODcnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hpZXJhcmNoaWNhbCBzZWN0aW9uJyBcCi0JJ2dpdC1yZXBvLWNvbmZpZyBWZXJzaW9uLjEuMi4zZVguQWxwaGEgYmV0YScKKwknZ2l0LWNvbmZpZyBWZXJzaW9uLjEuMi4zZVguQWxwaGEgYmV0YScKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudApAQCAtMjU1LDcgKzI1NSw3IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd29ya2luZyAtLWxpc3QnIFwKLQknZ2l0LXJlcG8tY29uZmlnIC0tbGlzdCA+IG91dHB1dCAmJiBjbXAgb3V0cHV0IGV4cGVjdCcKKwknZ2l0LWNvbmZpZyAtLWxpc3QgPiBvdXRwdXQgJiYgY21wIG91dHB1dCBleHBlY3QnCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIGJldGEubm9pbmRlbnQgc2lsbHlWYWx1ZQpAQCAtMjYzLDkgKzI2Myw5IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1nZXQtcmVnZXhwJyBcCi0JJ2dpdC1yZXBvLWNvbmZpZyAtLWdldC1yZWdleHAgaW4gPiBvdXRwdXQgJiYgY21wIG91dHB1dCBleHBlY3QnCisJJ2dpdC1jb25maWcgLS1nZXQtcmVnZXhwIGluID4gb3V0cHV0ICYmIGNtcCBvdXRwdXQgZXhwZWN0JwogCi1naXQtcmVwby1jb25maWcgLS1hZGQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICJ3b3c0IGZvciB5b3UiCitnaXQtY29uZmlnIC0tYWRkIG5leHRzZWN0aW9uLm5vbmV3bGluZSAid293NCBmb3IgeW91IgogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiB3b3cyIGZvciBtZQpAQCAtMjczLDcgKzI3Myw3IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hZGQnIFwKLQknZ2l0LXJlcG8tY29uZmlnIC0tZ2V0LWFsbCBuZXh0c2VjdGlvbi5ub25ld2xpbmUgPiBvdXRwdXQgJiYgY21wIG91dHB1dCBleHBlY3QnCisJJ2dpdC1jb25maWcgLS1nZXQtYWxsIG5leHRzZWN0aW9uLm5vbmV3bGluZSA+IG91dHB1dCAmJiBjbXAgb3V0cHV0IGV4cGVjdCcKIAogY2F0ID4gLmdpdC9jb25maWcgPDwgRU9GCiBbbm92YWx1ZV0KQEAgLTI4MSw5ICsyODEsOSBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCB2YXJpYWJsZSB3aXRoIG5vIHZhbHVlJyBcCi0JJ2dpdC1yZXBvLWNvbmZpZyAtLWdldCBub3ZhbHVlLnZhcmlhYmxlIF4kJworCSdnaXQtY29uZmlnIC0tZ2V0IG5vdmFsdWUudmFyaWFibGUgXiQnCiAKLWdpdC1yZXBvLWNvbmZpZyA+IG91dHB1dCAyPiYxCitnaXQtY29uZmlnID4gb3V0cHV0IDI+JjEKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gYXJndW1lbnRzLCBidXQgbm8gY3Jhc2gnIFwKIAkidGVzdCAkPyA9IDEyOSAmJiBncmVwIHVzYWdlIG91dHB1dCIKQEAgLTI5Myw3ICsyOTMsNyBAQAogCWMgPSBkCiBFT0YKIAotZ2l0LXJlcG8tY29uZmlnIGEueCB5CitnaXQtY29uZmlnIGEueCB5CiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIFthLmJdCkBAIC0zMDQsOCArMzA0LDggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHNlY3Rpb24gaXMgcGFydGlhbCBtYXRjaCBvZiBhbm90aGVyJyAnY21wIC5naXQvY29uZmlnIGV4cGVjdCcKIAotZ2l0LXJlcG8tY29uZmlnIGIueCB5Ci1naXQtcmVwby1jb25maWcgYS5iIGMKK2dpdC1jb25maWcgYi54IHkKK2dpdC1jb25maWcgYS5iIGMKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogW2EuYl0KQEAgLTMyOCwxMSArMzI4LDExIEBACiBlaW4uYmFobj1zdHJhc3NlCiBFT0YKIAotR0lUX0NPTkZJRz1vdGhlci1jb25maWcgZ2l0LXJlcG8tY29uZmlnIC1sID4gb3V0cHV0CitHSVRfQ09ORklHPW90aGVyLWNvbmZpZyBnaXQtY29uZmlnIC1sID4gb3V0cHV0CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsdGVybmF0aXZlIEdJVF9DT05GSUcnICdjbXAgb3V0cHV0IGV4cGVjdCcKIAotR0lUX0NPTkZJRz1vdGhlci1jb25maWcgZ2l0LXJlcG8tY29uZmlnIGFud29obmVyLnBhcmsgYXVzd2VpcworR0lUX0NPTkZJRz1vdGhlci1jb25maWcgZ2l0LWNvbmZpZyBhbndvaG5lci5wYXJrIGF1c3dlaXMKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogW2Vpbl0KQEAgLTM1NSw3ICszNTUsNyBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBzZWN0aW9uIiBcCi0JImdpdC1yZXBvLWNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC5laW5zIGJyYW5jaC56d2VpIgorCSJnaXQtY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gYnJhbmNoLmVpbnMgYnJhbmNoLnp3ZWkiCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKICMgSGFsbG8KQEAgLTM3MSwxMiArMzcxLDEyIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgc3VjY2VlZGVkIiAiZGlmZiAtdSBleHBlY3QgLmdpdC9jb25maWciCiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgInJlbmFtZSBub24tZXhpc3Rpbmcgc2VjdGlvbiIgXAotCSdnaXQtcmVwby1jb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guIndvcmxkIGRvbWluYXRpb24iIGJyYW5jaC5kcmVpJworCSdnaXQtY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gYnJhbmNoLiJ3b3JsZCBkb21pbmF0aW9uIiBicmFuY2guZHJlaScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgImRpZmYgLXUgZXhwZWN0IC5naXQvY29uZmlnIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgYW5vdGhlciBzZWN0aW9uIiBcCi0JJ2dpdC1yZXBvLWNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC4iMSAyMzQgYmxhYmwvYSIgYnJhbmNoLmRyZWknCisJJ2dpdC1jb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guIjEgMjM0IGJsYWJsL2EiIGJyYW5jaC5kcmVpJwogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiAjIEhhbGxvCkBAIC0zOTMsMjAgKzM5MywyMCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIG51bWJlcnMgJwogCi0JZ2l0LXJlcG8tY29uZmlnIGtpbG8uZ3JhbSAxayAmJgotCWdpdC1yZXBvLWNvbmZpZyBtZWdhLnRvbiAxbSAmJgotCWs9JChnaXQtcmVwby1jb25maWcgLS1pbnQgLS1nZXQga2lsby5ncmFtKSAmJgorCWdpdC1jb25maWcga2lsby5ncmFtIDFrICYmCisJZ2l0LWNvbmZpZyBtZWdhLnRvbiAxbSAmJgorCWs9JChnaXQtY29uZmlnIC0taW50IC0tZ2V0IGtpbG8uZ3JhbSkgJiYKIAl0ZXN0IHoxMDI0ID0gInokayIgJiYKLQltPSQoZ2l0LXJlcG8tY29uZmlnIC0taW50IC0tZ2V0IG1lZ2EudG9uKSAmJgorCW09JChnaXQtY29uZmlnIC0taW50IC0tZ2V0IG1lZ2EudG9uKSAmJgogCXRlc3QgejEwNDg1NzYgPSAieiRtIgogJwogCiBybSAuZ2l0L2NvbmZpZwogCi1naXQtcmVwby1jb25maWcgcXVvdGUubGVhZGluZyAiIHRlc3QiCi1naXQtcmVwby1jb25maWcgcXVvdGUuZW5kaW5nICJ0ZXN0ICIKLWdpdC1yZXBvLWNvbmZpZyBxdW90ZS5zZW1pY29sb24gInRlc3Q7dGVzdCIKLWdpdC1yZXBvLWNvbmZpZyBxdW90ZS5oYXNoICJ0ZXN0I3Rlc3QiCitnaXQtY29uZmlnIHF1b3RlLmxlYWRpbmcgIiB0ZXN0IgorZ2l0LWNvbmZpZyBxdW90ZS5lbmRpbmcgInRlc3QgIgorZ2l0LWNvbmZpZyBxdW90ZS5zZW1pY29sb24gInRlc3Q7dGVzdCIKK2dpdC1jb25maWcgcXVvdGUuaGFzaCAidGVzdCN0ZXN0IgogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiBbcXVvdGVdCkBAIC00MTgsNSArNDE4LDMxIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RpbmcnICdjbXAgLmdpdC9jb25maWcgZXhwZWN0JwogCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdrZXkgd2l0aCBuZXdsaW5lJyAnZ2l0IGNvbmZpZyBrZXkud2l0aFxcXAorbmV3bGluZSAxMjMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbHVlIHdpdGggbmV3bGluZScgJ2dpdCBjb25maWcga2V5LnN1YiB2YWx1ZS53aXRoXFxcCituZXdsaW5lJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PFxFT0YKK1tzZWN0aW9uXQorCTsgY29tbWVudCBcCisJY29udGludWVkID0gY29udFwKK2ludWVkCisJbm9uY29udCAgID0gbm90IGNvbnRpbnVlZCA7IFwKKwlxdW90ZWNvbnQgPSAiY29udDtcCitpbnVlZCIKK0VPRgorCitjYXQgPiBleHBlY3QgPDxcRU9GCitzZWN0aW9uLmNvbnRpbnVlZD1jb250aW51ZWQKK3NlY3Rpb24ubm9uY29udD1ub3QgY29udGludWVkCitzZWN0aW9uLnF1b3RlY29udD1jb250O2ludWVkCitFT0YKKworZ2l0IGNvbmZpZyAtLWxpc3QgPiByZXN1bHQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsdWUgY29udGludWVkIG9uIG5leHQgbGluZScgJ2NtcCByZXN1bHQgZXhwZWN0JworCiB0ZXN0X2RvbmUKIApkaWZmIC0tZ2l0IGEvdC90MTQwMC11cGRhdGUtcmVmLnNoIGIvdC90MTQwMC11cGRhdGUtcmVmLnNoCmluZGV4IDU2MzdjYjUuLmQwYWJhMmMgMTAwNzU1Ci0tLSBhL3QvdDE0MDAtdXBkYXRlLXJlZi5zaAorKysgYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKQEAgLTkzLDggKzkzLDggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2VuYWJsZSBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMnIFwKLQknZ2l0LXJlcG8tY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyB0cnVlICYmCi0JIHRlc3QgdHJ1ZSA9ICQoZ2l0LXJlcG8tY29uZmlnIC0tYm9vbCAtLWdldCBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMpJworCSdnaXQtY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyB0cnVlICYmCisJIHRlc3QgdHJ1ZSA9ICQoZ2l0LWNvbmZpZyAtLWJvb2wgLS1nZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzKScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJImNyZWF0ZSAkbSAobG9nZ2VkIGJ5IGNvbmZpZykiIFwKQEAgLTEzOCwxOSArMTM4LDE5IEBACiAJJ3JtIC1mIG8gZQogCSBnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNSAyMDA1fSIgPm8gMj5lICYmCiAJIHRlc3QgJyIkQyInID0gJChjYXQgbykgJiYKLQkgdGVzdCAid2FybmluZzogTG9nIC5naXQvbG9ncy8nIiRtIG9ubHkgZ29lcyBiYWNrIHRvICRlZCInLiIgPSAiJChjYXQgZSkiJworCSB0ZXN0ICJ3YXJuaW5nOiBMb2cgZm9yICdcJ21hc3RlclwnJyBvbmx5IGdvZXMgYmFjayB0byAkZWQuIiA9ICIkKGNhdCBlKSInCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAkiUXVlcnkgbWFzdGVyQHsyMDA1LTA1LTI1fSAoYmVmb3JlIGhpc3RvcnkpIiBcCiAJJ3JtIC1mIG8gZQogCSBnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7MjAwNS0wNS0yNX0gPm8gMj5lICYmCiAJIHRlc3QgJyIkQyInID0gJChjYXQgbykgJiYKLQkgZWNobyB0ZXN0ICJ3YXJuaW5nOiBMb2cgLmdpdC9sb2dzLyciJG0gb25seSBnb2VzIGJhY2sgdG8gJGVkIicuIiA9ICIkKGNhdCBlKSInCisJIGVjaG8gdGVzdCAid2FybmluZzogTG9nIGZvciAnXCdtYXN0ZXJcJycgb25seSBnb2VzIGJhY2sgdG8gJGVkLiIgPSAiJChjYXQgZSkiJwogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ1F1ZXJ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMxOjU5fSIgKDEgc2Vjb25kIGJlZm9yZSBoaXN0b3J5KScgXAogCSdybSAtZiBvIGUKIAkgZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMTo1OX0iID5vIDI+ZSAmJgogCSB0ZXN0ICciJEMiJyA9ICQoY2F0IG8pICYmCi0JIHRlc3QgIndhcm5pbmc6IExvZyAuZ2l0L2xvZ3MvJyIkbSBvbmx5IGdvZXMgYmFjayB0byAkZWQiJy4iID0gIiQoY2F0IGUpIicKKwkgdGVzdCAid2FybmluZzogTG9nIGZvciAnXCcnbWFzdGVyJ1wnJyBvbmx5IGdvZXMgYmFjayB0byAkZWQuIiA9ICIkKGNhdCBlKSInCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknUXVlcnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MDB9IiAoZXhhY3RseSBoaXN0b3J5IHN0YXJ0KScgXAogCSdybSAtZiBvIGUKZGlmZiAtLWdpdCBhL3QvdDE0MTAtcmVmbG9nLnNoIGIvdC90MTQxMC1yZWZsb2cuc2gKaW5kZXggOGU4ZDUyNi4uZTViYmMzOCAxMDA3NTUKLS0tIGEvdC90MTQxMC1yZWZsb2cuc2gKKysrIGIvdC90MTQxMC1yZWZsb2cuc2gKQEAgLTIwLDcgKzIwLDcgQEAKIH0KIAogY2hlY2tfZnNjayAoKSB7Ci0Jb3V0cHV0PSQoZ2l0IGZzY2stb2JqZWN0cyAtLWZ1bGwpCisJb3V0cHV0PSQoZ2l0IGZzY2sgLS1mdWxsKQogCWNhc2UgIiQxIiBpbgogCScnKQogCQl0ZXN0IC16ICIkb3V0cHV0IiA7OwpAQCAtNzEsNyArNzEsNyBAQAogCWNoZWNrX2ZzY2sgJiYKIAogCWNobW9kICt4IEMgJiYKLQkoIHRlc3QgImBnaXQgcmVwby1jb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGVgIiAhPSBmYWxzZSB8fAorCSggdGVzdCAiYGdpdCBjb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGVgIiAhPSBmYWxzZSB8fAogCSAgZWNobyBleGVjdXRhYmxlID4+QyApICYmCiAJZ2l0IGFkZCBDICYmCiAJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gZHJhZ29uICYmCmRpZmYgLS1naXQgYS90L3QzMjAwLWJyYW5jaC5zaCBiL3QvdDMyMDAtYnJhbmNoLnNoCmluZGV4IGJiODBlNDIuLjU1NjVjMjcgMTAwNzU1Ci0tLSBhL3QvdDMyMDAtYnJhbmNoLnNoCisrKyBiL3QvdDMyMDAtYnJhbmNoLnNoCkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICBnaXQtYnJhbmNoIHIgJiYKICAgICAgICAgIGdpdC1icmFuY2ggLW0gcSByL3EnCiAKLWdpdC1yZXBvLWNvbmZpZyBicmFuY2gucy9zLmR1bW15IEhlbGxvCitnaXQtY29uZmlnIGJyYW5jaC5zL3MuZHVtbXkgSGVsbG8KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBicmFuY2ggLW0gcy9zIHMgc2hvdWxkIHdvcmsgd2hlbiBzL3QgaXMgZGVsZXRlZCcgXApAQCAtMTA3LDggKzEwNyw4IEBACiAgICAgICAgIHRlc3QgLWYgLmdpdC9sb2dzL3JlZnMvaGVhZHMvcycKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIGluZm9ybWF0aW9uIHdhcyByZW5hbWVkLCB0b28nIFwKLQkidGVzdCAkKGdpdC1yZXBvLWNvbmZpZyBicmFuY2gucy5kdW1teSkgPSBIZWxsbyAmJgotCSAhIGdpdC1yZXBvLWNvbmZpZyBicmFuY2gucy9zL2R1bW15IgorCSJ0ZXN0ICQoZ2l0LWNvbmZpZyBicmFuY2gucy5kdW1teSkgPSBIZWxsbyAmJgorCSAhIGdpdC1jb25maWcgYnJhbmNoLnMvcy9kdW1teSIKIAogdGVzdF9leHBlY3RfZmFpbHVyZSBcCiAgICAgJ2dpdC1icmFuY2ggLW0gdSB2IHNob3VsZCBmYWlsIHdoZW4gdGhlIHJlZmxvZyBmb3IgdSBpcyBhIHN5bWxpbmsnIFwKZGlmZiAtLWdpdCBhL3QvdDMyMTAtcGFjay1yZWZzLnNoIGIvdC90MzIxMC1wYWNrLXJlZnMuc2gKaW5kZXggMTZiZGFlNC4uZjBjN2UyMiAxMDA3NTUKLS0tIGEvdC90MzIxMC1wYWNrLXJlZnMuc2gKKysrIGIvdC90MzIxMC1wYWNrLXJlZnMuc2gKQEAgLTk2LDQgKzk2LDEzIEBACiAgICAgIGdpdC1icmFuY2ggLWQgbi9vL3AgJiYKICAgICAgZ2l0LWJyYW5jaCBuJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrLCBwcnVuZSBhbmQgcmVwYWNrJyAnCisJZ2l0LXRhZyBmb28gJiYKKwlnaXQtcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlnaXQtc2hvdy1yZWYgPmFsbC1vZi10aGVtICYmCisJZ2l0LXBhY2stcmVmcyAmJgorCWdpdC1zaG93LXJlZiA+YWdhaW4gJiYKKwlkaWZmIGFsbC1vZi10aGVtIGFnYWluCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2ggYi90L3QzNTAxLXJldmVydC1jaGVycnktcGljay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NTJhZjFjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2hlcnJ5LXBpY2sgYW5kIHJldmVydCB3aXRoIHJlbmFtZXMKKworICAtLQorICAgKyByZW5hbWUyOiByZW5hbWVzIG9vcHMgdG8gb3BvcworICArICByZW5hbWUxOiByZW5hbWVzIG9vcHMgdG8gc3BvbworICArICBhZGRlZDogICBhZGRzIGV4dHJhIGxpbmUgdG8gb29wcworICArKyBpbml0aWFsOiBoYXMgbGluZXMgaW4gb29wcworCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBsIGluIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvCisJZG8KKwkJZWNobyAkbCRsJGwkbCRsJGwkbCRsJGwKKwlkb25lID5vb3BzICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIG9vcHMgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gIkFkZCBleHRyYSBsaW5lIGF0IHRoZSBlbmQiID4+b29wcyAmJgorCWdpdCBjb21taXQgLWEgLW0gYWRkZWQgJiYKKwlnaXQgdGFnIGFkZGVkICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbXYgb29wcyBzcG9vICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUxICYmCisJZ2l0IHRhZyByZW5hbWUxICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBpbml0aWFsICYmCisJZ2l0IG12IG9vcHMgb3BvcyAmJgorCWdpdCBjb21taXQgLW0gcmVuYW1lMiAmJgorCWdpdCB0YWcgcmVuYW1lMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhZnRlciByZW5hbWluZyBicmFuY2gnICcKKworCWdpdCBjaGVja291dCByZW5hbWUyICYmCisJRURJVE9SPTogVklTVUFMPTogZ2l0IGNoZXJyeS1waWNrIGFkZGVkICYmCisJdGVzdCAtZiBvcG9zICYmCisJZ3JlcCAiQWRkIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCIgb3BvcworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhZnRlciByZW5hbWluZyBicmFuY2gnICcKKworCWdpdCBjaGVja291dCByZW5hbWUxICYmCisJRURJVE9SPTogVklTVUFMPTogZ2l0IHJldmVydCBhZGRlZCAmJgorCXRlc3QgLWYgc3BvbyAmJgorCSEgZ3JlcCAiQWRkIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCIgc3BvbworCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMC1hZGQuc2ggYi90L3QzNzAwLWFkZC5zaAppbmRleCBlOTg3ODZkLi5jYWFhYjI2IDEwMDc1NQotLS0gYS90L3QzNzAwLWFkZC5zaAorKysgYi90L3QzNzAwLWFkZC5zaApAQCAtMjEsNyArMjEsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknZ2l0LWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkIGlmIGNvcmUuZmlsZW1vZGU9MCcgXAotCSdnaXQgcmVwby1jb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCiAJIGVjaG8gZm9vID54Zm9vMSAmJgogCSBjaG1vZCA3NTUgeGZvbzEgJiYKIAkgZ2l0LWFkZCB4Zm9vMSAmJgpAQCAtMzIsNyArMzIsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkLi4uJyBcCi0JJ2dpdCByZXBvLWNvbmZpZyBjb3JlLmZpbGVtb2RlIDAgJiYKKwknZ2l0IGNvbmZpZyBjb3JlLmZpbGVtb2RlIDAgJiYKIAkgZWNobyBmb28gPnhmb28yICYmCiAJIGNobW9kIDc1NSB4Zm9vMiAmJgogCSBnaXQtdXBkYXRlLWluZGV4IC0tYWRkIHhmb28yICYmCkBAIC00Myw3ICs0Myw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdnaXQtdXBkYXRlLWluZGV4IC0tYWRkOiBUZXN0IHRoYXQgZXhlY3V0YWJsZSBiaXQgaXMgbm90IHVzZWQuLi4nIFwKLQknZ2l0IHJlcG8tY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgorCSdnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgogCSBsbiAtcyB4Zm9vMiB4Zm9vMyAmJgogCSBnaXQtdXBkYXRlLWluZGV4IC0tYWRkIHhmb28zICYmCiAJIGNhc2UgImBnaXQtbHMtZmlsZXMgLS1zdGFnZSB4Zm9vM2AiIGluCmRpZmYgLS1naXQgYS90L3QzODAwLW1rdGFnLnNoIGIvdC90MzgwMC1ta3RhZy5zaAppbmRleCA1YjIzYjc3Li5lZGU0ZDQyIDEwMDc1NQotLS0gYS90L3QzODAwLW1rdGFnLnNoCisrKyBiL3QvdDM4MDAtbWt0YWcuc2gKQEAgLTg4LDcgKzg4LDcgQEAKICMgIDUuIHR5cGUgbGluZSBlb2wgY2hlY2sKIAogZWNobyAib2JqZWN0IDc3OWU5YjMzOTg2YjFjMjY3MGZmZjUyYzUwNjc2MDMxMTdiM2U4OTUiID50YWcuc2lnCi1lY2hvIC1uICJ0eXBlIHRhZ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MiID4+dGFnLnNpZworcHJpbnRmICJ0eXBlIHRhZ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MiID4+dGFnLnNpZwogCiBjYXQgPmV4cGVjdC5wYXQgPDxFT0YKIF5lcnJvcjogY2hhcjQ4OiAuKiJbXF1uIiQKZGlmZiAtLWdpdCBhL3QvdDM5MDAtaTE4bi1jb21taXQuc2ggYi90L3QzOTAwLWkxOG4tY29tbWl0LnNoCmluZGV4IDY3MTRiMGQuLmU1NGZlMGYgMTAwNzU1Ci0tLSBhL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKKysrIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaApAQCAtMjksNyArMjksNyBAQAogZm9yIEggaW4gSVNPLTg4NTktMSBFVUNKUCBJU08tMjAyMi1KUAogZG8KIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJwotCQlnaXQtcmVwby1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgorCQlnaXQtY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJEggJiYKIAkJZ2l0LWNoZWNrb3V0IC1iICRIIEMwICYmCiAJCWVjaG8gJEggPkYgJiYKIAkJZ2l0LWNvbW1pdCAtYSAtRiAuLi90MzkwMC8kSC50eHQKQEAgLTQ0LDE2ICs0NCwxNiBAQAogCScKIGRvbmUKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwby1jb25maWcgdG8gcmVtb3ZlIGN1c3RvbWl6YXRpb24nICcKLQlnaXQtcmVwby1jb25maWcgLS11bnNldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZyAmJgotCWlmIFo9JChnaXQtcmVwby1jb25maWcgLS1nZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgdG8gcmVtb3ZlIGN1c3RvbWl6YXRpb24nICcKKwlnaXQtY29uZmlnIC0tdW5zZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlpZiBaPSQoZ2l0LWNvbmZpZyAtLWdldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZykKIAl0aGVuCiAJCWVjaG8gT29wcywgc2hvdWxkIGhhdmUgZmFpbGVkLgogCQlmYWxzZQogCWVsc2UKIAkJdGVzdCB6ID0gInokWiIKIAlmaSAmJgotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIHV0Zi04CisJZ2l0LWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIHV0Zi04CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0lTTy04ODU5LTEgc2hvdWxkIGJlIHNob3duIGluIFVURi04IG5vdycgJwpAQCAtNjcsOSArNjcsOSBAQAogCScKIGRvbmUKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwby1jb25maWcgdG8gYWRkIGN1c3RvbWl6YXRpb24nICcKLQlnaXQtcmVwby1jb25maWcgLS11bnNldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZyAmJgotCWlmIFo9JChnaXQtcmVwby1jb25maWcgLS1nZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgdG8gYWRkIGN1c3RvbWl6YXRpb24nICcKKwlnaXQtY29uZmlnIC0tdW5zZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlpZiBaPSQoZ2l0LWNvbmZpZyAtLWdldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZykKIAl0aGVuCiAJCWVjaG8gT29wcywgc2hvdWxkIGhhdmUgZmFpbGVkLgogCQlmYWxzZQpAQCAtODEsMTMgKzgxLDEzIEBACiBmb3IgSCBpbiBJU08tODg1OS0xIEVVQ0pQIElTTy0yMDIyLUpQCiBkbwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBpdHNlbGYgbm93IiAnCi0JCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICckSCcgJiYKKwkJZ2l0LWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICckSCcgJiYKIAkJY29tcGFyZV93aXRoICckSCcgLi4vdDM5MDAvJyRIJy50eHQKIAknCiBkb25lCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcG8tY29uZmlnIHRvIHR3ZWFrIGN1c3RvbWl6YXRpb24nICcKLQlnaXQtcmVwby1jb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyB1dGYtOAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIHRvIHR3ZWFrIGN1c3RvbWl6YXRpb24nICcKKwlnaXQtY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgdXRmLTgKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPLTg4NTktMSBzaG91bGQgYmUgc2hvd24gaW4gVVRGLTggbm93JyAnCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogZm9yIEogaW4gRVVDSlAgSVNPLTIwMjItSlAKIGRvCi0JZ2l0LXJlcG8tY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgJEoKKwlnaXQtY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgJEoKIAlmb3IgSCBpbiBFVUNKUCBJU08tMjAyMi1KUAogCWRvCiAJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiAkSiBub3ciICcKZGlmZiAtLWdpdCBhL3QvdDM5MDEtaTE4bi1wYXRjaC5zaCBiL3QvdDM5MDEtaTE4bi1wYXRjaC5zaAppbmRleCBlZGEwZTJkLi5hODgxNzk3IDEwMDc1NQotLS0gYS90L3QzOTAxLWkxOG4tcGF0Y2guc2gKKysrIGIvdC90MzkwMS1pMThuLXBhdGNoLnNoCkBAIC0zMSw3ICszMSw3IEBACiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJZ2l0LWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCiAKIAkjIHVzZSBVVEYtOCBpbiBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lIHRvIG1hdGNoIHRoZQogCSMgaTE4bi5jb21taXRlbmNvZGluZyBzZXR0aW5ncwpAQCAtNTUsNyArNTUsNyBAQAogCWdpdCBjb21taXQgLXMgLW0gIlNlY29uZCBvbiBzaWRlIiAmJgogCiAJIyB0aGUgc2Vjb25kIG9uZSBvbiB0aGUgc2lkZSBicmFuY2ggaXMgSVNPLTg4NTktMQotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQtY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgogCSMgdXNlIGF1dGhvciBhbmQgY29tbWl0dGVyIG5hbWUgaW4gSVNPLTg4NTktMSB0byBtYXRjaCBpdC4KIAkuIC4uL3QzOTAxLTg4NTktMS50eHQgJiYKIAl0ZXN0X3RpY2sgJiYKQEAgLTY0LDExICs2NCwxMSBAQAogCWdpdCBjb21taXQgLXMgLW0gIlRoaXJkIG9uIHNpZGUiICYmCiAKIAkjIEJhY2sgdG8gZGVmYXVsdAotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04CisJZ2l0LWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCBvdXRwdXQgKElTTy04ODU5LTEpJyAnCi0JZ2l0LXJlcG8tY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdC1jb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCiAKIAlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uSEVBRF4gPm91dC1sMSAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPm91dC1sMiAmJgpAQCAtNzksNyArNzksNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggb3V0cHV0IChVVEYtOCknICcKLQlnaXQgcmVwby1jb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgogCiAJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLkhFQUReID5vdXQtdTEgJiYKIAlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUReID5vdXQtdTIgJiYKQEAgLTkxLDEzICs5MSwxMyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKFUvVSknICcKIAkjIFdlIHdhbnQgdGhlIHJlc3VsdCBvZiByZWJhc2UgaW4gVVRGLTgKLQlnaXQtcmVwby1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdC1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgogCiAJIyBUaGUgdGVzdCBpcyBhYm91dCBsb2dvdXRwdXRlbmNvZGluZyBub3QgYWZmZWN0aW5nIHRoZQogCSMgZmluYWwgb3V0Y29tZSAtLSBpdCBpcyB1c2VkIGludGVybmFsbHkgdG8gZ2VuZXJhdGUgdGhlCiAJIyBwYXRjaCBhbmQgdGhlIGxvZy4KIAotCWdpdCByZXBvLWNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCiAKIAkjIFRoZSByZXN1bHQgd2lsbCBiZSBjb21taXR0ZWQgYnkgR0lUX0NPTU1JVFRFUl9OQU1FIC0tCiAJIyB3ZSB3YW50IFVURi04IGVuY29kZWQgbmFtZS4KQEAgLTEwOSw4ICsxMDksOCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgKFUvTCknICcKLQlnaXQtcmVwby1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgotCWdpdCByZXBvLWNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQtY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgogCS4gLi4vdDM5MDEtdXRmOC50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgpAQCAtMTIxLDggKzEyMSw4IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAoTC9MKScgJwogCSMgSW4gdGhpcyB0ZXN0IHdlIHdhbnQgSVNPLTg4NTktMSBlbmNvZGVkIGNvbW1pdHMgYXMgdGhlIHJlc3VsdAotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKLQlnaXQgcmVwby1jb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0LWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgogCS4gLi4vdDM5MDEtODg1OS0xLnR4dCAmJgogCiAJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCkBAIC0xMzQsOCArMTM0LDggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAoTC9VKScgJwogCSMgVGhpcyBpcyBwYXRob2xvZ2ljYWwgLS0gdXNlIFVURi04IGFzIGludGVybWVkaWF0ZSBmb3JtCiAJIyB0byBnZXQgSVNPLTg4NTktMSByZXN1bHRzLgotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKLQlnaXQgcmVwby1jb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdC1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCiAJLiAuLi90MzkwMS04ODU5LTEudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKQEAgLTE0Nyw4ICsxNDcsOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2soVS9VKScgJwogCSMgQm90aCB0aGUgY29tbWl0ZW5jb2RpbmcgYW5kIGxvZ291dHB1dGVuY29kaW5nIGlzIHNldCB0byBVVEYtOC4KIAotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCi0JZ2l0IHJlcG8tY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQtY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKIAkuIC4uL3QzOTAxLXV0ZjgudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgpAQCAtMTYyLDggKzE2Miw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayhML0wpJyAnCiAJIyBCb3RoIHRoZSBjb21taXRlbmNvZGluZyBhbmQgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIElTTy04ODU5LTEKIAotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKLQlnaXQgcmVwby1jb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0LWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgogCS4gLi4vdDM5MDEtODg1OS0xLnR4dCAmJgogCiAJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKQEAgLTE3Nyw4ICsxNzcsOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2soVS9MKScgJwogCSMgQ29tbWl0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04IGJ1dCBsb2dvdXRwdXRlbmNvZGluZyBpcyBJU08tODg1OS0xCiAKLQlnaXQtcmVwby1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgotCWdpdCByZXBvLWNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwlnaXQtY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgogCS4gLi4vdDM5MDEtdXRmOC50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCkBAIC0xOTMsOCArMTkzLDggQEAKIAkjIEFnYWluLCB0aGUgY29tbWl0ZW5jb2RpbmcgaXMgc2V0IHRvIElTTy04ODU5LTEgYnV0CiAJIyBsb2dvdXRwdXRlbmNvZGluZyBpcyBzZXQgdG8gVVRGLTguCiAKLQlnaXQtcmVwby1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCi0JZ2l0IHJlcG8tY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQtY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgogCS4gLi4vdDM5MDEtODg1OS0xLnR4dCAmJgogCiAJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKQEAgLTIwNiw4ICsyMDYsOCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoVS9VKScgJwotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCi0JZ2l0IHJlcG8tY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQtY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKIAkuIC4uL3QzOTAxLXV0ZjgudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKQEAgLTIxNyw4ICsyMTcsOCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoVS9MKScgJwotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCi0JZ2l0IHJlcG8tY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdC1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU08tODg1OS0xICYmCiAJLiAuLi90MzkwMS11dGY4LnR4dCAmJgogCiAJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCkBAIC0yMjksOCArMjI5LDggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKEwvTCknICcKIAkjIEluIHRoaXMgdGVzdCB3ZSB3YW50IElTTy04ODU5LTEgZW5jb2RlZCBjb21taXRzIGFzIHRoZSByZXN1bHQKLQlnaXQtcmVwby1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCi0JZ2l0IHJlcG8tY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCWdpdC1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTy04ODU5LTEgJiYKIAkuIC4uL3QzOTAxLTg4NTktMS50eHQgJiYKIAogCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgpAQCAtMjQyLDggKzI0Miw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1tZXJnZSAoTC9VKScgJwogCSMgVGhpcyBpcyBwYXRob2xvZ2ljYWwgLS0gdXNlIFVURi04IGFzIGludGVybWVkaWF0ZSBmb3JtCiAJIyB0byBnZXQgSVNPLTg4NTktMSByZXN1bHRzLgotCWdpdC1yZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKLQlnaXQgcmVwby1jb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCWdpdC1jb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU08tODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCiAJLiAuLi90MzkwMS04ODU5LTEudHh0ICYmCiAKIAlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKZGlmZiAtLWdpdCBhL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2ggYi90L3Q0MDAwLWRpZmYtZm9ybWF0LnNoCmluZGV4IDY3Yjk2ODEuLjljNThkNzcgMTAwNzU1Ci0tLSBhL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2gKKysrIGIvdC90NDAwMC1kaWZmLWZvcm1hdC5zaApAQCAtMjgsNyArMjgsNyBAQAogICAgICdnaXQtZGlmZi1maWxlcyAtcCA+Y3VycmVudCcKIAogIyB0aGF0J3MgYXMgZmFyIGFzIGl0IGNvbWVzCi1pZiBbICIkKGdpdCByZXBvLWNvbmZpZyAtLWdldCBjb3JlLmZpbGVtb2RlKSIgPSBmYWxzZSBdCitpZiBbICIkKGdpdCBjb25maWcgLS1nZXQgY29yZS5maWxlbW9kZSkiID0gZmFsc2UgXQogdGhlbgogCXNheSAnZmlsZW1vZGUgZGlzYWJsZWQgb24gdGhlIGZpbGVzeXN0ZW0nCiAJdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA2LWRpZmYtbW9kZS5zaCBiL3QvdDQwMDYtZGlmZi1tb2RlLnNoCmluZGV4IDhhZDY5ZDEuLmNhMzQyZjQgMTAwNzU1Ci0tLSBhL3QvdDQwMDYtZGlmZi1tb2RlLnNoCisrKyBiL3QvdDQwMDYtZGlmZi1tb2RlLnNoCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgIHRyZWU9YGdpdC13cml0ZS10cmVlYCAmJgogICAgICBlY2hvICR0cmVlJwogCi1pZiBbICIkKGdpdCByZXBvLWNvbmZpZyAtLWdldCBjb3JlLmZpbGVtb2RlKSIgPSBmYWxzZSBdCitpZiBbICIkKGdpdCBjb25maWcgLS1nZXQgY29yZS5maWxlbW9kZSkiID0gZmFsc2UgXQogdGhlbgogCXNheSAnZmlsZW1vZGUgZGlzYWJsZWQgb24gdGhlIGZpbGVzeXN0ZW0sIHVzaW5nIHVwZGF0ZS1pbmRleCAtLWNobW9kPSt4JwogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApkaWZmIC0tZ2l0IGEvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2ggYi90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaAppbmRleCBlZDM3MTQxLi4zZDg1Y2VhIDEwMDc1NQotLS0gYS90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaAorKysgYi90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaApAQCAtNzMsNyArNzMsNyBAQAogCWZvciBpIGluIDEgMjsgZG8gZWNobyAkaTsgZG9uZSA+PmRpci9zdWIgJiYKIAlnaXQgdXBkYXRlLWluZGV4IGZpbGUwIGRpci9zdWIgJiYKIAotCWdpdCByZXBvLWNvbmZpZyBsb2cuc2hvd3Jvb3QgZmFsc2UgJiYKKwlnaXQgY29uZmlnIGxvZy5zaG93cm9vdCBmYWxzZSAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAmJgogCWdpdCBzaG93LWJyYW5jaAogJwpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgppbmRleCBiNDc0NWUxLi5lNWRkZDZmIDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpAQCAtMTksNiArMTksNyBAQAogIGZpbGUwICAgfCAgICAzICsrKwogIGZpbGUyICAgfCAgICAzIC0tLQogIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgogQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7CiAgbmFtZT0iMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NC5kaWZmIgpAQCAtNzcsNiArNzgsNyBAQAogIGRpci9zdWIgfCAgICAyICsrCiAgZmlsZTEgICB8ICAgIDMgKysrCiAgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCiAtLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCiBDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsKICBuYW1lPSI5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwLmRpZmYiCkBAIC0xMjYsNiArMTI4LDcgQEAKICBmaWxlMCAgIHwgICAgMyArKysKICBmaWxlMyAgIHwgICAgNCArKysrCiAgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCiAtLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCiBDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsKICBuYW1lPSJjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhLmRpZmYiCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4gYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KaW5kZXggYTlkMWNkMy4uZDBkZDE5YiAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgpAQCAtMTksNiArMTksNyBAQAogIGZpbGUwICAgfCAgICAzICsrKwogIGZpbGUyICAgfCAgICAzIC0tLQogIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgogLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgogQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7CiAgbmFtZT0iMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NC5kaWZmIgpAQCAtNzcsNiArNzgsNyBAQAogIGRpci9zdWIgfCAgICAyICsrCiAgZmlsZTEgICB8ICAgIDMgKysrCiAgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCiAtLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCiBDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsKICBuYW1lPSI5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwLmRpZmYiCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKaW5kZXggNTdiOWQwYi4uNjdhOTVjNSAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1hdHRhY2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpAQCAtMTcsNiArMTcsNyBAQAogIGZpbGUwICAgfCAgICAzICsrKwogIGZpbGUzICAgfCAgICA0ICsrKysKICAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKIC0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KIENvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOwogIG5hbWU9ImM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEuZGlmZiIKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKaW5kZXggYzMzMzAyZS4uOGI4OGNhNCAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKQEAgLTEwLDYgKzEwLDcgQEAKICBmaWxlMCAgIHwgICAgMyArKysKICBmaWxlMiAgIHwgICAgMyAtLS0KICAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKIAogZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCiBpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NApAQCAtNTMsNiArNTQsNyBAQAogIGRpci9zdWIgfCAgICAyICsrCiAgZmlsZTEgICB8ICAgIDMgKysrCiAgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKQEAgLTg3LDYgKzg5LDcgQEAKICBmaWxlMCAgIHwgICAgMyArKysKICBmaWxlMyAgIHwgICAgNCArKysrCiAgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXiBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXgppbmRleCAwM2QwZjk2Li40N2E0Yjg4IDEwMDY0NAotLS0gYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCkBAIC0xMCw2ICsxMCw3IEBACiAgZmlsZTAgICB8ICAgIDMgKysrCiAgZmlsZTIgICB8ICAgIDMgLS0tCiAgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKQEAgLTUzLDYgKzU0LDcgQEAKICBkaXIvc3ViIHwgICAgMiArKwogIGZpbGUxICAgfCAgICAzICsrKwogIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQogCiBkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKIGluZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKaW5kZXggZDEwYTQ2NS4uZTc2NTA4OCAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpAQCAtOSw2ICs5LDcgQEAKICBmaWxlMCAgIHwgICAgMyArKysKICBmaWxlMyAgIHwgICAgNCArKysrCiAgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCiAKIGRpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgogaW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKZGlmZiAtLWdpdCBhL3QvdDQxMDItYXBwbHktcmVuYW1lLnNoIGIvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKaW5kZXggMjJkYTZhMC4uYjQ2NjJiMCAxMDA3NTUKLS0tIGEvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKKysrIGIvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKQEAgLTMxLDcgKzMxLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgYXBwbHkgXAogICAgICdnaXQtYXBwbHkgLS1pbmRleCAtLXN0YXQgLS1zdW1tYXJ5IC0tYXBwbHkgdGVzdC1wYXRjaCcKIAotaWYgWyAiJChnaXQgcmVwby1jb25maWcgLS1nZXQgY29yZS5maWxlbW9kZSkiID0gZmFsc2UgXQoraWYgWyAiJChnaXQgY29uZmlnIC0tZ2V0IGNvcmUuZmlsZW1vZGUpIiA9IGZhbHNlIF0KIHRoZW4KIAlzYXkgJ2ZpbGVtb2RlIGRpc2FibGVkIG9uIHRoZSBmaWxlc3lzdGVtJwogZWxzZQpkaWZmIC0tZ2l0IGEvdC90NDIwMC1yZXJlcmUuc2ggYi90L3Q0MjAwLXJlcmVyZS5zaAppbmRleCA1ZWU1YjIzLi45MWJlMjcyIDEwMDc1NQotLS0gYS90L3Q0MjAwLXJlcmVyZS5zaAorKysgYi90L3Q0MjAwLXJlcmVyZS5zaApAQCAtMTIwLDI5ICsxMjAsMjkgQEAKIAlqdXN0X292ZXJfMTVfZGF5c19hZ289JCgoJG5vdy0xLTE1Kjg2NDAwKSkKIAlhbG1vc3RfNjBfZGF5c19hZ289JCgoJG5vdys2MC02MCo4NjQwMCkpCiAJanVzdF9vdmVyXzYwX2RheXNfYWdvPSQoKCRub3ctMS02MCo4NjQwMCkpCi0JcHJlZGF0ZTE9IiQoZGF0ZSAtZCAiQCRhbG1vc3RfNjBfZGF5c19hZ28iICslYykiCi0JcHJlZGF0ZTI9IiQoZGF0ZSAtZCAiQCRhbG1vc3RfMTVfZGF5c19hZ28iICslYykiCi0JcG9zdGRhdGUxPSIkKGRhdGUgLWQgIkAkanVzdF9vdmVyXzYwX2RheXNfYWdvIiArJWMpIgotCXBvc3RkYXRlMj0iJChkYXRlIC1kICJAJGp1c3Rfb3Zlcl8xNV9kYXlzX2FnbyIgKyVjKSIKKwlwcmVkYXRlMT0iJChkYXRlIC1kICJAJGFsbW9zdF82MF9kYXlzX2FnbyIgKyVZJW0lZCVIJU0uJVMpIgorCXByZWRhdGUyPSIkKGRhdGUgLWQgIkAkYWxtb3N0XzE1X2RheXNfYWdvIiArJVklbSVkJUglTS4lUykiCisJcG9zdGRhdGUxPSIkKGRhdGUgLWQgIkAkanVzdF9vdmVyXzYwX2RheXNfYWdvIiArJVklbSVkJUglTS4lUykiCisJcG9zdGRhdGUyPSIkKGRhdGUgLWQgIkAkanVzdF9vdmVyXzE1X2RheXNfYWdvIiArJVklbSVkJUglTS4lUykiCiAJOzsKICopCiAJIyBpdCBpcyBub3QgR05VIGRhdGUuIG9oLCB3ZWxsLgotCXByZWRhdGUxPSIkKGRhdGUpIgotCXByZWRhdGUyPSIkKGRhdGUpIgotCXBvc3RkYXRlMT0nMSBPY3QgMjAwNiAwMDowMDowMCcKLQlwb3N0ZGF0ZTI9JzEgRGVjIDIwMDYgMDA6MDA6MDAnCisJcHJlZGF0ZTE9IiQoZGF0ZSArJVklbSVkJUglTS4lUykiCisJcHJlZGF0ZTI9IiQoZGF0ZSArJVklbSVkJUglTS4lUykiCisJcG9zdGRhdGUxPScyMDA2MTAwMTAwMDAuMDAnCisJcG9zdGRhdGUyPScyMDA2MTIwMTAwMDAuMDAnCiBlc2FjCiAKLXRvdWNoIC1tIC1kICIkcHJlZGF0ZTEiICRyci9wcmVpbWFnZQotdG91Y2ggLW0gLWQgIiRwcmVkYXRlMiIgJHJyMi9wcmVpbWFnZQordG91Y2ggLW0gLXQgIiRwcmVkYXRlMSIgJHJyL3ByZWltYWdlCit0b3VjaCAtbSAtdCAiJHByZWRhdGUyIiAkcnIyL3ByZWltYWdlCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dhcmJhZ2UgY29sbGVjdGlvbiAocGFydDEpJyAnZ2l0IHJlcmVyZSBnYycKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAneW91bmcgcmVjb3JkcyBzdGlsbCBsaXZlJyBcCiAJInRlc3QgLWYgJHJyL3ByZWltYWdlIC1hIC1mICRycjIvcHJlaW1hZ2UiCiAKLXRvdWNoIC1tIC1kICIkcG9zdGRhdGUxIiAkcnIvcHJlaW1hZ2UKLXRvdWNoIC1tIC1kICIkcG9zdGRhdGUyIiAkcnIyL3ByZWltYWdlCit0b3VjaCAtbSAtdCAiJHBvc3RkYXRlMSIgJHJyL3ByZWltYWdlCit0b3VjaCAtbSAtdCAiJHBvc3RkYXRlMiIgJHJyMi9wcmVpbWFnZQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYXJiYWdlIGNvbGxlY3Rpb24gKHBhcnQyKScgJ2dpdCByZXJlcmUgZ2MnCiAKZGlmZiAtLWdpdCBhL3QvdDUzMDEtc2xpZGluZy13aW5kb3cuc2ggYi90L3Q1MzAxLXNsaWRpbmctd2luZG93LnNoCmluZGV4IDVhNzIzMmEuLmE2ZGJiMDQgMTAwNzU1Ci0tLSBhL3QvdDUzMDEtc2xpZGluZy13aW5kb3cuc2gKKysrIGIvdC90NTMwMS1zbGlkaW5nLXdpbmRvdy5zaApAQCAtMzAsMTkgKzMwLDE5IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2ZXJpZnktcGFjayAtdiwgcGFja2VkR2l0V2luZG93U2l6ZSA9PSAxIHBhZ2UnIFwKLSAgICAnZ2l0LXJlcG8tY29uZmlnIGNvcmUucGFja2VkR2l0V2luZG93U2l6ZSA1MTIgJiYKKyAgICAnZ2l0LWNvbmZpZyBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgNTEyICYmCiAgICAgIGdpdC12ZXJpZnktcGFjayAtdiAiJHBhY2sxIicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZlcmlmeS1wYWNrIC12LCBwYWNrZWRHaXR7V2luZG93U2l6ZSxMaW1pdH0gPT0gMSBwYWdlJyBcCi0gICAgJ2dpdC1yZXBvLWNvbmZpZyBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgNTEyICYmCi0gICAgIGdpdC1yZXBvLWNvbmZpZyBjb3JlLnBhY2tlZEdpdExpbWl0IDUxMiAmJgorICAgICdnaXQtY29uZmlnIGNvcmUucGFja2VkR2l0V2luZG93U2l6ZSA1MTIgJiYKKyAgICAgZ2l0LWNvbmZpZyBjb3JlLnBhY2tlZEdpdExpbWl0IDUxMiAmJgogICAgICBnaXQtdmVyaWZ5LXBhY2sgLXYgIiRwYWNrMSInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdyZXBhY2sgLWEgLWQsIHBhY2tlZEdpdHtXaW5kb3dTaXplLExpbWl0fSA9PSAxIHBhZ2UnIFwKLSAgICAnZ2l0LXJlcG8tY29uZmlnIGNvcmUucGFja2VkR2l0V2luZG93U2l6ZSA1MTIgJiYKLSAgICAgZ2l0LXJlcG8tY29uZmlnIGNvcmUucGFja2VkR2l0TGltaXQgNTEyICYmCisgICAgJ2dpdC1jb25maWcgY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplIDUxMiAmJgorICAgICBnaXQtY29uZmlnIGNvcmUucGFja2VkR2l0TGltaXQgNTEyICYmCiAgICAgIGNvbW1pdDI9YGdpdC1jb21taXQtdHJlZSAkdHJlZSAtcCAkY29tbWl0MSA8L2Rldi9udWxsYCAmJgogICAgICBnaXQtdXBkYXRlLXJlZiBIRUFEICRjb21taXQyICYmCiAgICAgIGdpdC1yZXBhY2sgLWEgLWQgJiYKQEAgLTUzLDggKzUzLDggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZlcmlmeS1wYWNrIC12LCBkZWZhdWx0cycgXAotICAgICdnaXQtcmVwby1jb25maWcgLS11bnNldCBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgJiYKLSAgICAgZ2l0LXJlcG8tY29uZmlnIC0tdW5zZXQgY29yZS5wYWNrZWRHaXRMaW1pdCAmJgorICAgICdnaXQtY29uZmlnIC0tdW5zZXQgY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplICYmCisgICAgIGdpdC1jb25maWcgLS11bnNldCBjb3JlLnBhY2tlZEdpdExpbWl0ICYmCiAgICAgIGdpdC12ZXJpZnktcGFjayAtdiAiJHBhY2syIicKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAwLXNlbmQtcGFjay5zaCBiL3QvdDU0MDAtc2VuZC1wYWNrLnNoCmluZGV4IDJjMTUxOTEuLjdkOTNkMGQgMTAwNzU1Ci0tLSBhL3QvdDU0MDAtc2VuZC1wYWNrLnNoCisrKyBiL3QvdDU0MDAtc2VuZC1wYWNrLnNoCkBAIC0xMDYsNyArMTA2LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICAgICAncHVzaGluZyB3aXRoIC0tZm9yY2Ugc2hvdWxkIGJlIGRlbmllZCB3aXRoIGRlbnlOb25GYXN0Zm9yd2FyZHMnICcKIAljZCB2aWN0aW0gJiYKLQlnaXQtcmVwby1jb25maWcgcmVjZWl2ZS5kZW55Tm9uRmFzdGZvcndhcmRzIHRydWUgJiYKKwlnaXQtY29uZmlnIHJlY2VpdmUuZGVueU5vbkZhc3Rmb3J3YXJkcyB0cnVlICYmCiAJY2QgLi4gJiYKIAlnaXQtdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciBtYXN0ZXJeICYmCiAJZ2l0LXNlbmQtcGFjayAtLWZvcmNlIC4vdmljdGltLy5naXQvIG1hc3RlciAmJgpkaWZmIC0tZ2l0IGEvdC90NTQwMS11cGRhdGUtaG9va3Muc2ggYi90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaAppbmRleCBjZDhjZWU2Li4wNTE0MDU2IDEwMDc1NQotLS0gYS90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaAorKysgYi90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaApAQCAtMjMsNyArMjMsNyBAQAogY2F0ID52aWN0aW0vLmdpdC9ob29rcy91cGRhdGUgPDwnRU9GJwogIyEvYmluL3NoCiBlY2hvICIkQCIgPiRHSVRfRElSL3VwZGF0ZS5hcmdzCi1yZWFkIHg7IGVjaG8gLW4gIiR4IiA+JEdJVF9ESVIvdXBkYXRlLnN0ZGluCityZWFkIHg7IHByaW50ZiAiJHgiID4kR0lUX0RJUi91cGRhdGUuc3RkaW4KIGVjaG8gU1RET1VUIHVwZGF0ZQogZWNobyBTVERFUlIgdXBkYXRlID4mMgogRU9GCkBAIC0zMiw3ICszMiw3IEBACiBjYXQgPnZpY3RpbS8uZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlIDw8J0VPRicKICMhL2Jpbi9zaAogZWNobyAiJEAiID4kR0lUX0RJUi9wb3N0LXVwZGF0ZS5hcmdzCi1yZWFkIHg7IGVjaG8gLW4gIiR4IiA+JEdJVF9ESVIvcG9zdC11cGRhdGUuc3RkaW4KK3JlYWQgeDsgcHJpbnRmICIkeCIgPiRHSVRfRElSL3Bvc3QtdXBkYXRlLnN0ZGluCiBlY2hvIFNURE9VVCBwb3N0LXVwZGF0ZQogZWNobyBTVERFUlIgcG9zdC11cGRhdGUgPiYyCiBFT0YKZGlmZiAtLWdpdCBhL3QvdDU1MDAtZmV0Y2gtcGFjay5zaCBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaAppbmRleCBlZjc4ZGY2Li40OGUzZDE3IDEwMDc1NQotLS0gYS90L3Q1NTAwLWZldGNoLXBhY2suc2gKKysrIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCkBAIC02MywxMyArNjMsMTMgQEAKIAljYXNlICIkaGVhZHMiIGluICpCKikgZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9COzsgZXNhYwogCWdpdC1zeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL2BlY2hvICRoZWFkcyB8IHNlZCAtZSAncy9eXCguXCkuKiQvXDEvJ2AKIAotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZzY2siICdnaXQtZnNjay1vYmplY3RzIC0tZnVsbCA+IGZzY2sudHh0IDI+JjEnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZnNjayIgJ2dpdC1mc2NrIC0tZnVsbCA+IGZzY2sudHh0IDI+JjEnCiAKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBkb3dubG9hZGVkIHJlc3VsdHMnIFwKIAknbXYgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qIC4gJiYKIAkgcD1gbHMgLTEgcGFjay0qLnBhY2tgICYmCiAJIGdpdC11bnBhY2stb2JqZWN0cyA8JHAgJiYKLQkgZ2l0LWZzY2stb2JqZWN0cyAtLWZ1bGwnCisJIGdpdC1mc2NrIC0tZnVsbCcKIAogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm5ldyBvYmplY3QgY291bnQgYWZ0ZXIgJG51bWJlciBwdWxsIiBcCiAJJ2lkeD1gZWNobyBwYWNrLSouaWR4YCAmJgpAQCAtOTcsNyArOTcsOCBAQAogKAogCW1rZGlyIGNsaWVudCAmJgogCWNkIGNsaWVudCAmJgotCWdpdC1pbml0IDI+PiBsb2cyLnR4dAorCWdpdC1pbml0IDI+PiBsb2cyLnR4dCAmJgorCWdpdCBjb25maWcgdHJhbnNmZXIudW5wYWNrbGltaXQgMAogKQogCiBhZGQgQTEKQEAgLTE0NCw3ICsxNDUsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJmc2NrIGluIHNoYWxsb3cgcmVwbyIgXAotCSIoY2Qgc2hhbGxvdzsgZ2l0LWZzY2stb2JqZWN0cyAtLWZ1bGwpIgorCSIoY2Qgc2hhbGxvdzsgZ2l0LWZzY2sgLS1mdWxsKSIKIAogI3Rlc3RfZG9uZTsgZXhpdAogCmRpZmYgLS1naXQgYS90L3Q1NTEwLWZldGNoLnNoIGIvdC90NTUxMC1mZXRjaC5zaAppbmRleCAzY2U5NDQ2Li41MGM2NDg1IDEwMDc1NQotLS0gYS90L3Q1NTEwLWZldGNoLnNoCisrKyBiL3QvdDU1MTAtZmV0Y2guc2gKQEAgLTIyLDE0ICsyMiwxNCBAQAogCWNkIC4uICYmCiAJZ2l0IGNsb25lIC4gdHdvICYmCiAJY2QgdHdvICYmCi0JZ2l0IHJlcG8tY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIG9uZSAmJgotCWdpdCByZXBvLWNvbmZpZyByZW1vdGUub25lLnVybCAuLi9vbmUvLmdpdC8gJiYKLQlnaXQgcmVwby1jb25maWcgcmVtb3RlLm9uZS5mZXRjaCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL29uZSAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgb25lICYmCisJZ2l0IGNvbmZpZyByZW1vdGUub25lLnVybCAuLi9vbmUvLmdpdC8gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5vbmUuZmV0Y2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vbmUgJiYKIAljZCAuLiAmJgogCWdpdCBjbG9uZSAuIHRocmVlICYmCiAJY2QgdGhyZWUgJiYKLQlnaXQgcmVwby1jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgdHdvICYmCi0JZ2l0IHJlcG8tY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9vbmUgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHR3byAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL29uZSAmJgogCW1rZGlyIC1wIC5naXQvcmVtb3RlcyAmJgogCXsKIAkJZWNobyAiVVJMOiAuLi90d28vLmdpdC8iCmRpZmYgLS1naXQgYS90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoIGIvdC90NTcxMC1pbmZvLWFsdGVybmF0ZS5zaAppbmRleCBiOWY2ZDk2Li4yZjhlOTdjIDEwMDc1NQotLS0gYS90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoCisrKyBiL3QvdDU3MTAtaW5mby1hbHRlcm5hdGUuc2gKQEAgLTE3LDcgKzE3LDcgQEAKIH0KIAogdGVzdF92YWxpZF9yZXBvKCkgewotCWdpdCBmc2NrLW9iamVjdHMgLS1mdWxsID4gZnNjay5sb2cgJiYKKwlnaXQgZnNjayAtLWZ1bGwgPiBmc2NrLmxvZyAmJgogCXRlc3QgYHdjIC1sIDwgZnNjay5sb2dgID0gMAogfQogCmRpZmYgLS1naXQgYS90L3Q2MDIzLW1lcmdlLWZpbGUuc2ggYi90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKaW5kZXggMWMyMWQ4Yy4uZjNjZDNkYiAxMDA2NDQKLS0tIGEvdC90NjAyMy1tZXJnZS1maWxlLnNoCisrKyBiL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaApAQCAtNTIsNyArNTIsNyBAQAogYW5pbWFtIG1lYW0gY29udmVydGl0LAogZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAogRU9GCi1lY2hvIC1uICJwcm9wdGVyIG5vbWVuIHN1dW0uIiA+PiBuZXc0LnR4dAorcHJpbnRmICJwcm9wdGVyIG5vbWVuIHN1dW0uIiA+PiBuZXc0LnR4dAogCiBjcCBuZXcxLnR4dCB0ZXN0LnR4dAogdGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2Ugd2l0aG91dCBjb25mbGljdCIgXApkaWZmIC0tZ2l0IGEvdC90NjEyMC1kZXNjcmliZS5zaCBiL3QvdDYxMjAtZGVzY3JpYmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2U5ZWRkYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMjAtZGVzY3JpYmUuc2gKQEAgLTAsMCArMSw5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGVzY3JpYmUKKworICAgICAgICAgICAgICAgICAgICAgICBCCisgICAgICAgIC4tLS0tLS0tLS0tLS0tLW8tLS0tby0tLS1vLS0tLXgKKyAgICAgICAvICAgICAgICAgICAgICAgICAgIC8gICAgLworIG8tLS0tby0tLS1vLS0tLW8tLS0tby0tLS0uICAgIC8KKyAgICAgICBcICAgICAgICBBICAgIGMgICAgICAgIC8KKyAgICAgICAgLi0tLS0tLS0tLS0tLW8tLS1vLS0tbworICAgICAgICAgICAgICAgICAgICAgRCAgIGUKKycKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19kZXNjcmliZSAoKSB7CisJZXhwZWN0PSIkMSIKKwlzaGlmdAorCVI9JChnaXQgZGVzY3JpYmUgIiRAIikgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXNjcmliZSAkKiIgJworCWNhc2UgIiRSIiBpbgorCSRleHBlY3QpCWVjaG8gaGFwcHkgOzsKKwkqKQllY2hvICJPb3BzIC0gJFIgaXMgbm90ICRleHBlY3QiOworCQlmYWxzZSA7OworCWVzYWMKKwknCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJdGVzdF90aWNrICYmCisJZWNobyBvbmUgPmZpbGUgJiYgZ2l0LWFkZCBmaWxlICYmIGdpdC1jb21taXQgLW0gaW5pdGlhbCAmJgorCW9uZT0kKGdpdC1yZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdHdvID5maWxlICYmIGdpdC1hZGQgZmlsZSAmJiBnaXQtY29tbWl0IC1tIHNlY29uZCAmJgorCXR3bz0kKGdpdC1yZXYtcGFyc2UgSEVBRCkgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdGhyZWUgPmZpbGUgJiYgZ2l0LWFkZCBmaWxlICYmIGdpdC1jb21taXQgLW0gdGhpcmQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gQSA+ZmlsZSAmJiBnaXQtYWRkIGZpbGUgJiYgZ2l0LWNvbW1pdCAtbSBBICYmCisJdGVzdF90aWNrICYmCisJZ2l0LXRhZyAtYSAtbSBBIEEgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gYyA+ZmlsZSAmJiBnaXQtYWRkIGZpbGUgJiYgZ2l0LWNvbW1pdCAtbSBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0LXRhZyBjICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICR0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEIgPnNpZGUgJiYgZ2l0LWFkZCBzaWRlICYmIGdpdC1jb21taXQgLW0gQiAmJgorCXRlc3RfdGljayAmJgorCWdpdC10YWcgLWEgLW0gQiBCICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQtbWVyZ2UgLW0gTWVyZ2VkIGMgJiYKKwltZXJnZWQ9JChnaXQtcmV2LXBhcnNlIEhFQUQpICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICR0d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEQgPmFub3RoZXIgJiYgZ2l0LWFkZCBhbm90aGVyICYmIGdpdC1jb21taXQgLW0gRCAmJgorCXRlc3RfdGljayAmJgorCWdpdC10YWcgLWEgLW0gRCBEICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIEREID5hbm90aGVyICYmIGdpdCBjb21taXQgLWEgLW0gYW5vdGhlciAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0LXRhZyBlICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIERERCA+YW5vdGhlciAmJiBnaXQgY29tbWl0IC1hIC1tICJ5ZXQgYW5vdGhlciIgJiYKKworCXRlc3RfdGljayAmJgorCWdpdC1tZXJnZSAtbSBNZXJnZWQgJG1lcmdlZCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBYID5maWxlICYmIGVjaG8gWCA+c2lkZSAmJiBnaXQtYWRkIGZpbGUgc2lkZSAmJgorCWdpdC1jb21taXQgLW0geAorCisnCisKK2NoZWNrX2Rlc2NyaWJlIEEtKiBIRUFECitjaGVja19kZXNjcmliZSBBLSogSEVBRF4KK2NoZWNrX2Rlc2NyaWJlIEQtKiBIRUFEXl4KK2NoZWNrX2Rlc2NyaWJlIEEtKiBIRUFEXl4yCitjaGVja19kZXNjcmliZSBCIEhFQUReXjJeCisKK2NoZWNrX2Rlc2NyaWJlIEEtKiAtLXRhZ3MgSEVBRAorY2hlY2tfZGVzY3JpYmUgQS0qIC0tdGFncyBIRUFEXgorY2hlY2tfZGVzY3JpYmUgRC0qIC0tdGFncyBIRUFEXl4KK2NoZWNrX2Rlc2NyaWJlIEEtKiAtLXRhZ3MgSEVBRF5eMgorY2hlY2tfZGVzY3JpYmUgQiAtLXRhZ3MgSEVBRF5eMl4KKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2ggYi90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2gKaW5kZXggNjNlNDlmMy4uZWExNDAyMyAxMDA3NTUKLS0tIGEvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoCisrKyBiL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaApAQCAtMTA4LDcgKzEwOCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0ZXN0ICMzJyAnCiAKLQlnaXQgcmVwby1jb25maWcgbWVyZ2Uuc3VtbWFyeSB0cnVlICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5zdW1tYXJ5IHRydWUgJiYKIAogCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKIAlzZXRkYXRlICYmCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzQnICcKIAotCWdpdCByZXBvLWNvbmZpZyBtZXJnZS5zdW1tYXJ5IHRydWUgJiYKKwlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgdHJ1ZSAmJgogCiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgogCXNldGRhdGUgJiYKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGVzdCAjNScgJwogCi0JZ2l0IHJlcG8tY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgogCiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgogCXNldGRhdGUgJiYKZGlmZiAtLWdpdCBhL3QvdDcyMDEtY28uc2ggYi90L3Q3MjAxLWNvLnNoCmluZGV4IDA4NWQ0YTAuLjg2N2JiZDIgMTAwNzU1Ci0tLSBhL3QvdDcyMDEtY28uc2gKKysrIGIvdC90NzIwMS1jby5zaApAQCAtMTQsMTUgKzE0LDIzIEBACiAJZG9uZQogfQogCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwogCi0JZmlsbCAxIDIgMyA0IDUgPm9uZSAmJgorCWZpbGwgMSAyIDMgNCA1IDYgNyA4ID5vbmUgJiYKIAlmaWxsIGEgYiBjIGQgZSA+dHdvICYmCiAJZ2l0IGFkZCBvbmUgdHdvICYmCiAJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBBIG9uZSwgQSB0d28iICYmCiAKLQlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgotCWZpbGwgMSAyIDMgPm9uZSAmJgorCWdpdCBjaGVja291dCAtYiByZW5hbWVyICYmCisJcm0gLWYgb25lICYmCisJZmlsbCAxIDMgNCA1IDYgNyA4ID51bm8gJiYKKwlnaXQgYWRkIHVubyAmJgorCWZpbGwgYSBiIGMgZCBlIGYgPnR3byAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJlbmFtZXIgUiBvbmUtPnVubywgTSB0d28iICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBtYXN0ZXIgJiYKKwlmaWxsIDEgMiAzIDQgNSA2IDcgPm9uZSAmJgogCWZpbGwgQSBCIEMgRCBFID50aHJlZSAmJgogCXJtIC1mIHR3byAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgb25lIHR3byB0aHJlZSAmJgpAQCAtNDIsNyArNTAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCB3aXRoIGRpcnR5IHRyZWUgd2l0aG91dCAtbSIgJwogCi0JZmlsbCAwIDEgMiAzIDQgNSA+b25lICYmCisJZmlsbCAwIDEgMiAzIDQgNSA2IDcgOCA+b25lICYmCiAJaWYgZ2l0IGNoZWNrb3V0IHNpZGUKIAl0aGVuCiAJCWVjaG8gTm90IGhhcHB5CkBAIC01OCwxMiArNjYsMTAgQEAKIAlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCiAJZ2l0IGNsZWFuICYmCiAKLQlmaWxsIDAgMSAyIDMgNCA1ID5vbmUgJiYKKwlmaWxsIDAgMSAyIDMgNCA1IDYgNyA4ID5vbmUgJiYKIAlnaXQgY2hlY2tvdXQgLW0gc2lkZSAmJgogCi0JZmlsbCAiICBtYXN0ZXIiICIqIHNpZGUiID5leHBlY3QuYnJhbmNoICYmCi0JZ2l0IGJyYW5jaCA+Y3VycmVudC5icmFuY2ggJiYKLQlkaWZmIGV4cGVjdC5icmFuY2ggY3VycmVudC5icmFuY2ggJiYKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInJlZnMvaGVhZHMvc2lkZSIgJiYKIAogCWZpbGwgIk0Jb25lIiAiQQl0aHJlZSIgIkQJdHdvIiA+ZXhwZWN0Lm1hc3RlciAmJgogCWdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgbWFzdGVyID5jdXJyZW50Lm1hc3RlciAmJgpAQCAtNzgsNCArODQsNDkgQEAKIAlkaWZmIGV4cGVjdC5pbmRleCBjdXJyZW50LmluZGV4CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IC1tIHdpdGggZGlydHkgdHJlZSwgcmVuYW1lZCIgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gJiYKKworCWZpbGwgMSAyIDMgNCA1IDcgOCA+b25lICYmCisJaWYgZ2l0IGNoZWNrb3V0IHJlbmFtZXIKKwl0aGVuCisJCWVjaG8gTm90IGhhcHB5CisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSAtIGZhaWxlZCBjb3JyZWN0bHkiCisJZmkgJiYKKworCWdpdCBjaGVja291dCAtbSByZW5hbWVyICYmCisJZmlsbCAxIDMgNCA1IDcgOCA+ZXhwZWN0ICYmCisJZGlmZiBleHBlY3QgdW5vICYmCisJISB0ZXN0IC1mIG9uZSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5jdXJyZW50ICYmCisJISB0ZXN0IC1zIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtbSB3aXRoIG1lcmdlIGNvbmZsaWN0JyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAmJgorCisJZmlsbCAxIFQgMyA0IDUgNiBTIDggPm9uZSAmJgorCWlmIGdpdCBjaGVja291dCByZW5hbWVyCisJdGhlbgorCQllY2hvIE5vdCBoYXBweQorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgLSBmYWlsZWQgY29ycmVjdGx5IgorCWZpICYmCisKKwlnaXQgY2hlY2tvdXQgLW0gcmVuYW1lciAmJgorCisJZ2l0IGRpZmYgbWFzdGVyOm9uZSA6Mzp1bm8gfAorCXNlZCAtZSAiMSwvXkBAL2QiIC1lICIvXiAvZCIgLWUgInMvXi0vZC8iIC1lICJzL14rL2EvIiA+Y3VycmVudCAmJgorCWZpbGwgZDIgYVQgZDcgYVMgPmV4cGVjdCAmJgorCWRpZmYgY3VycmVudCBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCB0d28gPmN1cnJlbnQgJiYKKwkhIHRlc3QgLXMgY3VycmVudAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoIGIvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKaW5kZXggNTcyYWFlZC4uNGUwODA4MyAxMDA3NTUKLS0tIGEvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKKysrIGIvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2gKQEAgLTEsMyArMSw0IEBACisjIS9iaW4vc2gKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gcm1kaXInCiAuIC4vbGliLWdpdC1zdm4uc2gKIApkaWZmIC0tZ2l0IGEvdC90OTEwMy1naXQtc3ZuLWdyYWZ0LWJyYW5jaGVzLnNoIGIvdC90OTEwMy1naXQtc3ZuLWdyYWZ0LWJyYW5jaGVzLnNoCmluZGV4IGI1Zjc2NzcuLjRlNTU3NzggMTAwNzU1Ci0tLSBhL3QvdDkxMDMtZ2l0LXN2bi1ncmFmdC1icmFuY2hlcy5zaAorKysgYi90L3Q5MTAzLWdpdC1zdm4tZ3JhZnQtYnJhbmNoZXMuc2gKQEAgLTEsMyArMSw0IEBACisjIS9iaW4vc2gKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gZ3JhZnQtYnJhbmNoZXMnCiAuIC4vbGliLWdpdC1zdm4uc2gKIApkaWZmIC0tZ2l0IGEvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoIGIvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCmluZGV4IDMxNTExOWEuLmM0NDNmMzIgMTAwNzU1Ci0tLSBhL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaAorKysgYi90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2gKQEAgLTEsNCArMSw0IEBACi0jIS9iaW4vYmFzaAorIyEvYmluL3NoCiAjCiAjIENvcHlyaWdodCAoYykgUm9iaW4gUm9zZW5iZXJnCiAjCkBAIC0xNjksMTkgKzE2OSwxOSBAQAogICAgICAgdGVzdCAiJChlY2hvICQoc29ydCAiRyBnL0NWUy9FbnRyaWVzInxjdXQgLWQvIC1mMiwzLDUpKSIgPSAid2l0aCBzcGFjZXMucG5nLzEuMi8ta2Igd2l0aCBzcGFjZXMudHh0LzEuMi8iCiAgICAgICApJwogCi0jIFRoaXMgdGVzdCBjb250YWlucyBJU08tODg1OS0xIGNoYXJhY3RlcnMKKyMgVGhpcyB0ZXN0IGNvbnRhaW5zIFVURi04IGNoYXJhY3RlcnMKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICAnRmlsZSB3aXRoIG5vbi1hc2NpaSBmaWxlIG5hbWUnIFwKLSAgICAgJ21rZGlyIC1wIMUvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/lL+Qv9iAmJgotICAgICAgZWNobyBGb28gPsUvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/lL+Qv9i9n5XJkZXRz5WflcmRldC50eHQgJiYKLSAgICAgIGdpdCBhZGQgxS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L+Uv5C/2L2flcmRldHPlZ+VyZGV0LnR4dCAmJgotICAgICAgY3AgLi4vdGVzdDkyMDBhLnBuZyDFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ov5S/kL/YvZ+VyZGV0c+Vn5XJkZXQucG5nICYmCi0gICAgICBnaXQgYWRkIMUvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/lL+Qv9i9n5XJkZXRz5WflcmRldC5wbmcgJiYKLSAgICAgIGdpdCBjb21taXQgLWEgLW0gIkflciBkZXQgc+UgZ+VyIGRldCIgJiYgXAorICAgICAnbWtkaXIgLXAgw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/DtiAmJgorICAgICAgZWNobyBGb28gPsOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YvZ8OlcmRldHPDpWfDpXJkZXQudHh0ICYmCisgICAgICBnaXQgYWRkIMOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YvZ8OlcmRldHPDpWfDpXJkZXQudHh0ICYmCisgICAgICBjcCAuLi90ZXN0OTIwMGEucG5nIMOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YvZ8OlcmRldHPDpWfDpXJkZXQucG5nICYmCisgICAgICBnaXQgYWRkIMOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YvZ8OlcmRldHPDpWfDpXJkZXQucG5nICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJHw6VyIGRldCBzw6UgZ8OlciBkZXQiICYmIFwKICAgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKICAgICAgIChjZCAiJENWU1dPUksiICYmCiAgICAgICBnaXQtY3ZzZXhwb3J0Y29tbWl0IC12IC1jICRpZCAmJgotICAgICAgdGVzdCAiJChlY2hvICQoc29ydCDFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ov5S/kL/YvQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gImflcmRldHPlZ+VyZGV0LnBuZy8xLjEvLWtiIGflcmRldHPlZ+VyZGV0LnR4dC8xLjEvIgorICAgICAgdGVzdCAiJChlY2hvICQoc29ydCDDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2L0NWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICJnw6VyZGV0c8OlZ8OlcmRldC5wbmcvMS4xLy1rYiBnw6VyZGV0c8OlZ8OlcmRldC50eHQvMS4xLyIKICAgICAgICknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMTk3LDYgKzE5NywxMCBAQAogICAgICAgISBnaXQtY3ZzZXhwb3J0Y29tbWl0IC1jICRpZAogICAgICAgKScKIAorY2FzZSAiJChnaXQgcmVwby1jb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGUpIiBpbgorZmFsc2UpCisJOzsKKyopCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAgJ1JldGFpbiBleGVjdXRlIGJpdCcgXAogICAgICAnbWtkaXIgRyAmJgpAQCAtMjExLDUgKzIxNSw3IEBACiAgICAgICB0ZXN0IC14IEcvb24gJiYKICAgICAgICEgdGVzdCAteCBHL29mZgogICAgICAgKScKKwk7OworZXNhYwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tdXBkYXRlIGIvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUKaW5kZXggOTg2M2E4MC4uNGJkOWQ5NiAxMDA2NDQKLS0tIGEvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUKQEAgLTEsODkgKzEsMjg1IEBACiAjIS9iaW4vc2gKICMKICMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBtYWlsIG91dCBjb21taXQgdXBkYXRlIGluZm9ybWF0aW9uLgotIyBJdCBhbHNvIGJsb2NrcyB0YWdzIHRoYXQgYXJlbid0IGFubm90YXRlZC4KKyMgSXQgY2FuIGFsc28gYmxvY2tzIHRhZ3MgdGhhdCBhcmVuJ3QgYW5ub3RhdGVkLgogIyBDYWxsZWQgYnkgZ2l0LXJlY2VpdmUtcGFjayB3aXRoIGFyZ3VtZW50czogcmVmbmFtZSBzaGExLW9sZCBzaGExLW5ldwogIwotIyBUbyBlbmFibGUgdGhpcyBob29rOgotIyAoMSkgY2hhbmdlIHRoZSByZWNpcGllbnQgZS1tYWlsIGFkZHJlc3MKLSMgKDIpIG1ha2UgdGhpcyBmaWxlIGV4ZWN1dGFibGUgYnkgImNobW9kICt4IHVwZGF0ZSIuCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIG1ha2UgdGhpcyBmaWxlIGV4ZWN1dGFibGUgYnkgImNobW9kICt4IHVwZGF0ZSIuCiAjCisjIENvbmZpZworIyAtLS0tLS0KKyMgaG9va3MubWFpbGluZ2xpc3QKKyMgICBUaGlzIGlzIHRoZSBsaXN0IHRoYXQgYWxsIHB1c2hlcyB3aWxsIGdvIHRvOyBsZWF2ZSBpdCBibGFuayB0byBub3Qgc2VuZAorIyAgIGVtYWlscyBmcmVxdWVudGx5LiAgVGhlIGxvZyBlbWFpbCB3aWxsIGxpc3QgZXZlcnkgbG9nIGVudHJ5IGluIGZ1bGwgYmV0d2VlbgorIyAgIHRoZSBvbGQgcmVmIHZhbHVlIGFuZCB0aGUgbmV3IHJlZiB2YWx1ZS4KKyMgaG9va3MuYW5ub3VuY2VsaXN0CisjICAgVGhpcyBpcyB0aGUgbGlzdCB0aGF0IGFsbCBwdXNoZXMgb2YgYW5ub3RhdGVkIHRhZ3Mgd2lsbCBnbyB0by4gIExlYXZlIGl0CisjICAgYmxhbmsgdG8ganVzdCB1c2UgdGhlIG1haWxpbmdsaXN0IGZpZWxkLiAgVGhlIGFubm91bmNlIGVtYWlscyBsaXN0IHRoZQorIyAgIHNob3J0IGxvZyBzdW1tYXJ5IG9mIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBsYXN0IGFubm90YXRlZCB0YWcKKyMgaG9va3MuYWxsb3d1bmFubm90YXRlZAorIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgdW5hbm5vdGF0ZWQgdGFncyB3aWxsIGJlIGFsbG93ZWQgaW50byB0aGUKKyMgICByZXBvc2l0b3J5LiAgQnkgZGVmYXVsdCB0aGV5IHdvbid0IGJlLgorIworIyBOb3RlcworIyAtLS0tLQorIyBBbGwgZW1haWxzIGhhdmUgdGhlaXIgc3ViamVjdHMgcHJlZml4ZWQgd2l0aCAiW1NDTV0iIHRvIGFpZCBmaWx0ZXJpbmcuCisjIEFsbCBlbWFpbHMgaW5jbHVkZSB0aGUgaGVhZGVycyAiWC1HaXQtUmVmbmFtZSIsICJYLUdpdC1PbGRyZXYiLAorIyAiWC1HaXQtTmV3cmV2IiwgYW5kICJYLUdpdC1SZWZ0eXBlIiB0byBlbmFibGUgZmluZSB0dW5lZCBmaWx0ZXJpbmcgYW5kIGluZm8uCiAKLXByb2plY3Q9JChjYXQgJEdJVF9ESVIvZGVzY3JpcHRpb24pCi1yZWNpcGllbnRzPSJjb21taXQtbGlzdEBzb21ld2hlcmUuY29tIGNvbW1pdC1saXN0QHNvbWV3aGVyZWVsc2UuY29tIgorIyAtLS0gQ29uc3RhbnRzCitFTUFJTFBSRUZJWD0iW1NDTV0gIgorTE9HQkVHSU49Ii0gTG9nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorTE9HRU5EPSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK0RBVEVGT1JNQVQ9IiVGICVSICV6IgogCi1yZWZfdHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAiJDMiKQorIyAtLS0gQ29tbWFuZCBsaW5lCityZWZuYW1lPSIkMSIKK29sZHJldj0iJDIiCituZXdyZXY9IiQzIgogCi0jIE9ubHkgYWxsb3cgYW5ub3RhdGVkIHRhZ3MgaW4gYSBzaGFyZWQgcmVwbwotIyBSZW1vdmUgdGhpcyBjb2RlIHRvIHRyZWF0IGR1bWIgdGFncyB0aGUgc2FtZSBhcyBldmVyeXRoaW5nIGVsc2UKLWNhc2UgIiQxIiwiJHJlZl90eXBlIiBpbgotcmVmcy90YWdzLyosY29tbWl0KQotCWVjaG8gIioqKiBVbi1hbm5vdGF0ZWQgdGFncyBhcmUgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvIiA+JjIKLQllY2hvICIqKiogVXNlICdnaXQgdGFnIFsgLWEgfCAtcyBdJyBmb3IgdGFncyB5b3Ugd2FudCB0byBwcm9wYWdhdGUuIiA+JjIKLQlleGl0IDE7OwotcmVmcy90YWdzLyosdGFnKQotCWVjaG8gIiMjIyBQdXNoaW5nIHZlcnNpb24gJyR7MSMjcmVmcy90YWdzL30nIHRvIHRoZSBtYXNzZXMiID4mMgotCSMgcmVjaXBpZW50cz0icmVsZWFzZS1hbm5vdW5jZUBzb213ZWhlcmUuY29tIGFubm91bmNlQHNvbWV3aGVyZWVsc2UuY29tIgotCTs7Ci1lc2FjCisjIC0tLSBTYWZldHkgY2hlY2sKK2lmIFsgLXogIiRHSVRfRElSIiBdOyB0aGVuCisJZWNobyAiRG9uJ3QgcnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIGNvbW1hbmQgbGluZS4iID4mMgorCWVjaG8gIiAoaWYgeW91IHdhbnQsIHlvdSBjb3VsZCBzdXBwbHkgR0lUX0RJUiB0aGVuIHJ1biIgPiYyCisJZWNobyAiICAkMCA8cmVmPiA8b2xkcmV2PiA8bmV3cmV2PikiID4mMgorCWV4aXQgMQorZmkKIAotIyBzZXQgdGhpcyAgdG8gJ2NhdCcgdG8gZ2V0IGEgdmVyeSBkZXRhaWxlZCBsaXN0aW5nLgotIyBzaG9ydCBvbmx5IGtpY2tzIGluIHdoZW4gYW4gYW5ub3RhdGVkIHRhZyBpcyBhZGRlZAotc2hvcnQ9J2dpdCBzaG9ydGxvZycKK2lmIFsgLXogIiRyZWZuYW1lIiAtbyAteiAiJG9sZHJldiIgLW8gLXogIiRuZXdyZXYiIF07IHRoZW4KKwllY2hvICJVc2FnZTogJDAgPHJlZj4gPG9sZHJldj4gPG5ld3Jldj4iID4mMgorCWV4aXQgMQorZmkKIAotIyBzZWUgJ2RhdGUgLS1oZWxwJyBmb3IgaW5mbyBvbiBob3cgdG8gd3JpdGUgdGhpcwotIyBUaGUgZGVmYXVsdCBpcyBhIGh1bWFuLXJlYWRhYmxlIGlzbzg2MDEtbGlrZSBmb3JtYXQgd2l0aCBtaW51dGUKLSMgcHJlY2lzaW9uICgnMjAwNi0wMS0yNSAxNTo1OCArMDEwMCcgZm9yIGV4YW1wbGUpCi1kYXRlX2Zvcm1hdD0iJUYgJVIgJXoiCisjIC0tLSBDb25maWcKK3Byb2plY3RkZXNjPSQoY2F0ICRHSVRfRElSL2Rlc2NyaXB0aW9uKQorcmVjaXBpZW50cz0kKGdpdC1yZXBvLWNvbmZpZyBob29rcy5tYWlsaW5nbGlzdCkKK2Fubm91bmNlcmVjaXBpZW50cz0kKGdpdC1yZXBvLWNvbmZpZyBob29rcy5hbm5vdW5jZWxpc3QpCithbGxvd3VuYW5ub3RhdGVkPSQoZ2l0LXJlcG8tY29uZmlnIC0tYm9vbCBob29rcy5hbGxvd3VuYW5ub3RhdGVkKQogCi0oaWYgZXhwciAiJDIiIDogJzAqJCcgPi9kZXYvbnVsbAotdGhlbgotCSMgbmV3IHJlZgotCWNhc2UgIiQxIiBpbgotCXJlZnMvdGFncy8qKQotCQkjIGEgcHVzaGVkIGFuZCBhbm5vdGF0ZWQgdGFnICh1c3VhbGx5KSBtZWFucyBhIG5ldyB2ZXJzaW9uCi0JCXRhZz0iJHsxIyNyZWZzL3RhZ3MvfSIKLQkJaWYgWyAiJHJlZl90eXBlIiA9IHRhZyBdOyB0aGVuCi0JCQlldmFsICQoZ2l0IGNhdC1maWxlIHRhZyAkMyB8IFwKLQkJCQlzZWQgLW4gJzRzL3RhZ2dlciBcKFtePl0qPlwpW14wLTldKlwoWzAtOV0qXCkuKi90YWdnZXI9IlwxIiB0cz0iXDIiL3AnKQotCQkJZGF0ZT0kKGRhdGUgLS1kYXRlPSIxOTcwLTAxLTAxIDAwOjAwOjAwICR0cyBzZWNvbmRzIiArIiRkYXRlX2Zvcm1hdCIpCi0JCQllY2hvICJUYWcgJyR0YWcnIGNyZWF0ZWQgYnkgJHRhZ2dlciBhdCAkZGF0ZSIKLQkJCWdpdCBjYXQtZmlsZSB0YWcgJDMgfCBzZWQgLW4gJzUsJHAnCi0JCQllY2hvCi0JCWZpCi0JCXByZXY9JChnaXQgZGVzY3JpYmUgIiQzXiIgfCBzZWQgJ3MvLWcuKi8vJykKLQkJIyB0aGUgZmlyc3QgdGFnIGluIGEgcmVwbyB3aWxsIHlpZWxkIG5vICRwcmV2Ci0JCWlmIFsgLXogIiRwcmV2IiBdOyB0aGVuCi0JCQllY2hvICJDaGFuZ2VzIHNpbmNlIHRoZSBkYXduIG9mIHRpbWU6IgotCQkJZ2l0IHJldi1saXN0IC0tcHJldHR5ICQzIHwgJHNob3J0Ci0JCWVsc2UKLQkJCWVjaG8gIkNoYW5nZXMgc2luY2UgJHByZXY6IgotCQkJZ2l0IHJldi1saXN0IC0tcHJldHR5ICRwcmV2Li4kMyB8ICRzaG9ydAotCQkJZWNobyAtLS0KLQkJCWdpdCBkaWZmIC0tc3RhdCAkcHJldi4uJDMKLQkJCWVjaG8gLS0tCisjIC0tLSBDaGVjayB0eXBlcworbmV3cmV2X3R5cGU9JChnaXQtY2F0LWZpbGUgLXQgIiRuZXdyZXYiKQorCitjYXNlICIkcmVmbmFtZSIsIiRuZXdyZXZfdHlwZSIgaW4KKwlyZWZzL3RhZ3MvKixjb21taXQpCisJCSMgdW4tYW5ub3RlZCB0YWcKKwkJcmVmbmFtZV90eXBlPSJ0YWciCisJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL3RhZ3MvfQorCQlpZiBbICRhbGxvd3VuYW5ub3RhdGVkICE9ICJ0cnVlIiBdOyB0aGVuCisJCQllY2hvICIqKiogVGhlIHVuLWFubm90YXRlZCB0YWcsICRzaG9ydF9yZWZuYW1lIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeSIgPiYyCisJCQllY2hvICIqKiogVXNlICdnaXQgdGFnIFsgLWEgfCAtcyBdJyBmb3IgdGFncyB5b3Ugd2FudCB0byBwcm9wYWdhdGUuIiA+JjIKKwkJCWV4aXQgMQogCQlmaQogCQk7OwotCi0JcmVmcy9oZWFkcy8qKQotCQlicmFuY2g9IiR7MSMjcmVmcy9oZWFkcy99IgotCQllY2hvICJOZXcgYnJhbmNoICckYnJhbmNoJyBhdmFpbGFibGUgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgotCQlnaXQtcmV2LWxpc3QgLS1wcmV0dHkgIiQzIiAkKGdpdC1yZXYtcGFyc2UgLS1ub3QgLS1hbGwpCisJcmVmcy90YWdzLyosdGFnKQorCQkjIGFubm90YXRlZCB0YWcKKwkJcmVmbmFtZV90eXBlPSJhbm5vdGF0ZWQgdGFnIgorCQlzaG9ydF9yZWZuYW1lPSR7cmVmbmFtZSMjcmVmcy90YWdzL30KKwkJIyBjaGFuZ2UgcmVjaXBpZW50cworCQlpZiBbIC1uICIkYW5ub3VuY2VyZWNpcGllbnRzIiBdOyB0aGVuCisJCQlyZWNpcGllbnRzPSIkYW5ub3VuY2VyZWNpcGllbnRzIgorCQlmaQogCQk7OwotCWVzYWMKLWVsc2UKLQliYXNlPSQoZ2l0LW1lcmdlLWJhc2UgIiQyIiAiJDMiKQotCWNhc2UgIiRiYXNlIiBpbgotCSIkMiIpCi0JCWdpdCBkaWZmIC0tc3RhdCAiJDMiICJeJGJhc2UiCi0JCWVjaG8KLQkJZWNobyAiTmV3IGNvbW1pdHM6IgorCXJlZnMvaGVhZHMvKixjb21taXQpCisJCSMgYnJhbmNoCisJCXJlZm5hbWVfdHlwZT0iYnJhbmNoIgorCQlzaG9ydF9yZWZuYW1lPSR7cmVmbmFtZSMjcmVmcy9oZWFkcy99CisJCTs7CisJcmVmcy9yZW1vdGVzLyosY29tbWl0KQorCQkjIHRyYWNraW5nIGJyYW5jaAorCQlyZWZuYW1lX3R5cGU9InRyYWNraW5nIGJyYW5jaCIKKwkJc2hvcnRfcmVmbmFtZT0ke3JlZm5hbWUjI3JlZnMvcmVtb3Rlcy99CisJCSMgU2hvdWxkIHRoaXMgZXZlbiBiZSBhbGxvd2VkPworCQllY2hvICIqKiogUHVzaC11cGRhdGUgb2YgdHJhY2tpbmcgYnJhbmNoLCAkcmVmbmFtZS4gIE5vIGVtYWlsIGdlbmVyYXRlZC4iID4mMgorCQlleGl0IDAKIAkJOzsKIAkqKQotCQllY2hvICJSZWJhc2VkIHJlZiwgY29tbWl0cyBmcm9tIGNvbW1vbiBhbmNlc3RvcjoiCisJCSMgQW55dGhpbmcgZWxzZSAoaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8pCisJCWVjaG8gIioqKiBVcGRhdGUgaG9vazogdW5rbm93biB0eXBlIG9mIHVwZGF0ZSwgXCIkbmV3cmV2X3R5cGVcIiwgdG8gcmVmICRyZWZuYW1lIiA+JjIKKwkJZXhpdCAxCiAJCTs7Ci0JZXNhYwotCWdpdC1yZXYtbGlzdCAtLXByZXR0eSAiJDMiICJeJGJhc2UiCi1maSkgfAotbWFpbCAtcyAiJHByb2plY3Q6IENoYW5nZXMgdG8gJyR7MSMjcmVmcy9oZWFkcy99JyIgJHJlY2lwaWVudHMKK2VzYWMKKworIyBDaGVjayBpZiB3ZSd2ZSBnb3QgYW55b25lIHRvIHNlbmQgdG8KK2lmIFsgLXogIiRyZWNpcGllbnRzIiBdOyB0aGVuCisJIyBJZiB0aGUgZW1haWwgaXNuJ3Qgc2VudCwgdGhlbiBhdCBsZWFzdCBnaXZlIHRoZSB1c2VyIHNvbWUgaWRlYSBvZiB3aGF0IGNvbW1hbmQKKwkjIHdvdWxkIGdlbmVyYXRlIHRoZSBlbWFpbCBhdCBhIGxhdGVyIGRhdGUKKwllY2hvICIqKiogTm8gcmVjaXBpZW50cyBmb3VuZCAtIG5vIGVtYWlsIHdpbGwgYmUgc2VudCwgYnV0IHRoZSBwdXNoIHdpbGwgY29udGludWUiID4mMgorCWVjaG8gIioqKiBmb3IgJDAgJDEgJDIgJDMiID4mMgorCWV4aXQgMAorZmkKKworIyAtLS0gRW1haWwgcGFyYW1ldGVycworY29tbWl0dGVyPSQoZ2l0IHNob3cgLS1wcmV0dHk9ZnVsbCAtcyAkbmV3cmV2IHwgZ3JlcCAiXkNvbW1pdDogIiB8IHNlZCAtZSAicy9eQ29tbWl0OiAvLyIpCitkZXNjcmliZT0kKGdpdCBkZXNjcmliZSAkbmV3cmV2IDI+L2Rldi9udWxsKQoraWYgWyAteiAiJGRlc2NyaWJlIiBdOyB0aGVuCisJZGVzY3JpYmU9JG5ld3JldgorZmkKKworIyAtLS0gRW1haWwgKGFsbCBzdGRvdXQgd2lsbCBiZSB0aGUgZW1haWwpCisoCisjIEdlbmVyYXRlIGhlYWRlcgorY2F0IDw8LUVPRgorRnJvbTogJGNvbW1pdHRlcgorVG86ICRyZWNpcGllbnRzCitTdWJqZWN0OiAke0VNQUlMUFJFRklYfSRwcm9qZWN0ZGVzYyAkcmVmbmFtZV90eXBlLCAkc2hvcnRfcmVmbmFtZSBub3cgYXQgJGRlc2NyaWJlCitYLUdpdC1SZWZuYW1lOiAkcmVmbmFtZQorWC1HaXQtUmVmdHlwZTogJHJlZm5hbWVfdHlwZQorWC1HaXQtT2xkcmV2OiAkb2xkcmV2CitYLUdpdC1OZXdyZXY6ICRuZXdyZXYKKworSGVsbG8sCisKK1RoaXMgaXMgYW4gYXV0b21hdGVkIGVtYWlsIGZyb20gdGhlIGdpdCBob29rcy91cGRhdGUgc2NyaXB0LCBpdCB3YXMKK2dlbmVyYXRlZCBiZWNhdXNlIGEgcmVmIGNoYW5nZSB3YXMgcHVzaGVkIHRvIHRoZSByZXBvc2l0b3J5LgorCitVcGRhdGluZyAkcmVmbmFtZV90eXBlLCAkc2hvcnRfcmVmbmFtZSwKK0VPRgorCitjYXNlICIkcmVmbmFtZV90eXBlIiBpbgorCSJ0cmFja2luZyBicmFuY2gifGJyYW5jaCkKKwkJaWYgZXhwciAiJG9sZHJldiIgOiAnMCokJyA+L2Rldi9udWxsCisJCXRoZW4KKwkJCSMgSWYgdGhlIG9sZCByZWZlcmVuY2UgaXMgIjAwMDAuLjAwMDAiIHRoZW4gdGhpcyBpcyBhIG5ldyBicmFuY2gKKwkJCSMgYW5kIHNvIG9sZHJldiBpcyBub3QgdmFsaWQKKwkJCWVjaG8gIiAgYXMgYSBuZXcgICRyZWZuYW1lX3R5cGUiCisJCSAgICBlY2hvICIgICAgICAgIHRvICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCQkJZWNobyAiIgorCQkJZWNobyAkTE9HQkVHSU4KKwkJCSMgVGhpcyBzaG93cyBhbGwgbG9nIGVudHJpZXMgdGhhdCBhcmUgbm90IGFscmVhZHkgY292ZXJlZCBieQorCQkJIyBhbm90aGVyIHJlZiAtIGkuZS4gY29tbWl0cyB0aGF0IGFyZSBub3cgYWNjZXNzaWJsZSBmcm9tIHRoaXMKKwkJCSMgcmVmIHRoYXQgd2VyZSBwcmV2aW91c2x5IG5vdCBhY2Nlc3NpYmxlCisJCQlnaXQtcmV2LWxpc3QgLS1wcmV0dHkgJG5ld3JlZiAkKGdpdC1yZXYtcGFyc2UgLS1ub3QgLS1hbGwpCisJCQllY2hvICRMT0dFTkQKKwkJZWxzZQorCQkJIyBvbGRyZXYgaXMgdmFsaWQKKwkJCW9sZHJldl90eXBlPSQoZ2l0LWNhdC1maWxlIC10ICIkb2xkcmV2IikKKworCQkJIyBOb3cgdGhlIHByb2JsZW0gaXMgZm9yIGNhc2VzIGxpa2UgdGhpczoKKwkJCSMgICAqIC0tLSAqIC0tLSAqIC0tLSAqIChvbGRyZXYpCisJCQkjICAgICAgICAgIFwKKwkJCSMgICAgICAgICAgICogLS0tICogLS0tICogKG5ld3JldikKKwkJCSMgaS5lLiB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBuZXdyZXYgaXMgYSBzdHJpY3Qgc3Vic2V0CisJCQkjIG9mIG9sZHJldiAtICh3b3VsZCBoYXZlIHJlcXVpcmVkIGEgZm9yY2UsIGJ1dCB0aGF0J3MgYWxsb3dlZCkuCisJCQkjIFNvLCB3ZSBjYW4ndCBzaW1wbHkgc2F5IHJldi1saXN0ICRvbGRyZXYuLiRuZXdyZXYuICBJbnN0ZWFkCisJCQkjIHdlIGZpbmQgdGhlIGNvbW1vbiBiYXNlIG9mIHRoZSB0d28gcmV2cyBhbmQgbGlzdCBmcm9tIHRoZXJlCisJCQliYXNlcmV2PSQoZ2l0LW1lcmdlLWJhc2UgJG9sZHJldiAkbmV3cmV2KQorCisJCQkjIENvbW1pdCB3aXRoIGEgcGFyZW50CisJCQlmb3IgcmV2IGluICQoZ2l0LXJldi1saXN0ICRuZXdyZXYgXiRiYXNlcmV2KQorCQkJZG8KKwkJCQlyZXZ0eXBlPSQoZ2l0LWNhdC1maWxlIC10ICIkcmV2IikKKwkJCQllY2hvICIgICAgICAgdmlhICAkcmV2ICgkcmV2dHlwZSkiCisJCQlkb25lCisJCQlpZiBbICIkYmFzZXJldiIgPSAiJG9sZHJldiIgXTsgdGhlbgorCQkJCWVjaG8gIiAgICAgIGZyb20gICRvbGRyZXYgKCRvbGRyZXZfdHlwZSkiCisJCQllbHNlCisJCQkJZWNobyAiICBiYXNlZCBvbiAgJGJhc2VyZXYiCisJCQkJZWNobyAiICAgICAgZnJvbSAgJG9sZHJldiAoJG9sZHJldl90eXBlKSIKKwkJCQllY2hvICIiCisJCQkJZWNobyAiVGhpcyByZWYgdXBkYXRlIGNyb3NzZWQgYSBicmFuY2ggcG9pbnQ7IGkuZS4gdGhlIG9sZCByZXYgaXMgbm90IGEgc3RyaWN0IHN1YnNldCIKKwkJCQllY2hvICJvZiB0aGUgbmV3IHJldi4gIFRoaXMgb2NjdXJzLCB3aGVuIHlvdSAtLWZvcmNlIHB1c2ggYSBjaGFuZ2UgaW4gYSBzaXR1YXRpb24iCisJCQkJZWNobyAibGlrZSB0aGlzOiIKKwkJCQllY2hvICIiCisJCQkJZWNobyAiICogLS0gKiAtLSBCIC0tIE8gLS0gTyAtLSBPICgkb2xkcmV2KSIKKwkJCQllY2hvICIgICAgICAgICAgICBcXCIKKwkJCQllY2hvICIgICAgICAgICAgICAgTiAtLSBOIC0tIE4gKCRuZXdyZXYpIgorCQkJCWVjaG8gIiIKKwkJCQllY2hvICJUaGVyZWZvcmUsIHdlIGFzc3VtZSB0aGF0IHlvdSd2ZSBhbHJlYWR5IGhhZCBhbGVydCBlbWFpbHMgZm9yIGFsbCBvZiB0aGUgTyIKKwkJCQllY2hvICJyZXZpc2lvbnMsIGFuZCBub3cgZ2l2ZSB5b3UgYWxsIHRoZSByZXZpc2lvbnMgaW4gdGhlIE4gYnJhbmNoIGZyb20gdGhlIGNvbW1vbiIKKwkJCQllY2hvICJiYXNlLCBCICgkYmFzZXJldiksIHVwIHRvIHRoZSBuZXcgcmV2aXNpb24uIgorCQkJZmkKKwkJCWVjaG8gIiIKKwkJCWVjaG8gJExPR0JFR0lOCisJCQlnaXQtcmV2LWxpc3QgLS1wcmV0dHkgJG5ld3JldiBeJGJhc2VyZXYKKwkJCWVjaG8gJExPR0VORAorCQkJZWNobyAiIgorCQkJZWNobyAiRGlmZnN0YXQ6IgorCQkJZ2l0LWRpZmYtdHJlZSAtLW5vLWNvbG9yIC0tc3RhdCAtTSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkbmV3cmV2IF4kYmFzZXJldgorCQlmaQorCQk7OworCSJhbm5vdGF0ZWQgdGFnIikKKwkJIyBTaG91bGQgd2UgYWxsb3cgY2hhbmdlcyB0byBhbm5vdGF0ZWQgdGFncz8KKwkJaWYgZXhwciAiJG9sZHJldiIgOiAnMCokJyA+L2Rldi9udWxsCisJCXRoZW4KKwkJCSMgSWYgdGhlIG9sZCByZWZlcmVuY2UgaXMgIjAwMDAuLjAwMDAiIHRoZW4gdGhpcyBpcyBhIG5ldyBhdGFnCisJCQkjIGFuZCBzbyBvbGRyZXYgaXMgbm90IHZhbGlkCisJCQllY2hvICIgICAgICAgIHRvICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCQllbHNlCisJCQllY2hvICIgICAgICAgIHRvICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCQkJZWNobyAiICAgICAgZnJvbSAgJG9sZHJldiIKKwkJZmkKKworCQkjIElmIHRoaXMgdGFnIHN1Y2NlZWRzIGFub3RoZXIsIHRoZW4gc2hvdyB3aGljaCB0YWcgaXQgcmVwbGFjZXMKKwkJcHJldnRhZz0kKGdpdCBkZXNjcmliZSAkbmV3cmV2XiAyPi9kZXYvbnVsbCB8IHNlZCAncy8tZy4qLy8nKQorCQlpZiBbIC1uICIkcHJldnRhZyIgXTsgdGhlbgorCQkJZWNobyAiICByZXBsYWNlcyAgJHByZXZ0YWciCisJCWZpCisKKwkJIyBSZWFkIHRoZSB0YWcgZGV0YWlscworCQlldmFsICQoZ2l0IGNhdC1maWxlIHRhZyAkbmV3cmV2IHwgXAorCQkJc2VkIC1uICc0cy90YWdnZXIgXChbXj5dKj5cKVteMC05XSpcKFswLTldKlwpLiovdGFnZ2VyPSJcMSIgdHM9IlwyIi9wJykKKwkJdGFnZ2VkPSQoZGF0ZSAtLWRhdGU9IjE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAgJHRzIHNlY29uZHMiICsiJERBVEVGT1JNQVQiKQorCisJCWVjaG8gIiB0YWdnZWQgYnkgICR0YWdnZXIiCisJCWVjaG8gIiAgICAgICAgb24gICR0YWdnZWQiCisKKwkJZWNobyAiIgorCQllY2hvICRMT0dCRUdJTgorCQllY2hvICIiCisKKwkJaWYgWyAtbiAiJHByZXZ0YWciIF07IHRoZW4KKwkJCWdpdCByZXYtbGlzdCAtLXByZXR0eT1zaG9ydCAiJHByZXZ0YWcuLiRuZXdyZXYiIHwgZ2l0IHNob3J0bG9nCisJCWVsc2UKKwkJCWdpdCByZXYtbGlzdCAtLXByZXR0eT1zaG9ydCAkbmV3cmV2IHwgZ2l0IHNob3J0bG9nCisJCWZpCisKKwkJZWNobyAkTE9HRU5ECisJCWVjaG8gIiIKKwkJOzsKKwkqKQorCQkjIEJ5IGRlZmF1bHQsIHVuYW5ub3RhdGVkIHRhZ3MgYXJlbid0IGFsbG93ZWQgaW47IGlmCisJCSMgdGhleSBhcmUgdGhvdWdoLCBpdCdzIGRlYmF0YWJsZSB3aGV0aGVyIHdlIHdvdWxkIGV2ZW4gd2FudCBhbgorCQkjIGVtYWlsIHRvIGJlIGdlbmVyYXRlZDsgaG93ZXZlciwgSSBkb24ndCB3YW50IHRvIGFkZCBhbm90aGVyIGNvbmZpZworCQkjIG9wdGlvbiBqdXN0IGZvciB0aGF0LgorCQkjCisJCSMgVW5hbm5vdGF0ZWQgdGFncyBhcmUgbW9yZSBhYm91dCBtYXJraW5nIGEgcG9pbnQgdGhhbiByZWxlYXNpbmcKKwkJIyBhIHZlcnNpb247IHRoZXJlZm9yZSB3ZSBkb24ndCBkbyB0aGUgc2hvcnRsb2cgc3VtbWFyeSB0aGF0IHdlCisJCSMgZG8gZm9yIGFubm90YXRlZCB0YWdzIGFib3ZlIC0gd2Ugc2ltcGx5IHNob3cgdGhhdCB0aGUgcG9pbnQgaGFzCisJCSMgYmVlbiBtYXJrZWQsIGFuZCBwcmludCB0aGUgbG9nIG1lc3NhZ2UgZm9yIHRoZSBtYXJrZWQgcG9pbnQgZm9yCisJCSMgcmVmZXJlbmNlIHB1cnBvc2VzCisJCSMKKwkJIyBOb3RlIHRoaXMgc2VjdGlvbiBhbHNvIGNhdGNoZXMgYW55IG90aGVyIHJlZmVyZW5jZSB0eXBlIChhbHRob3VnaAorCQkjIHRoZXJlIGFyZW4ndCBhbnkpIGFuZCBkZWFscyB3aXRoIHRoZW0gaW4gdGhlIHNhbWUgd2F5LgorCQlpZiBleHByICIkb2xkcmV2IiA6ICcwKiQnID4vZGV2L251bGwKKwkJdGhlbgorCQkJIyBJZiB0aGUgb2xkIHJlZmVyZW5jZSBpcyAiMDAwMC4uMDAwMCIgdGhlbiB0aGlzIGlzIGEgbmV3IHRhZworCQkJIyBhbmQgc28gb2xkcmV2IGlzIG5vdCB2YWxpZAorCQkJZWNobyAiICBhcyBhIG5ldyAgJHJlZm5hbWVfdHlwZSIKKwkJCWVjaG8gIiAgICAgICAgdG8gICRuZXdyZXYgKCRuZXdyZXZfdHlwZSkiCisJCWVsc2UKKwkJCWVjaG8gIiAgICAgICAgdG8gICRuZXdyZXYgKCRuZXdyZXZfdHlwZSkiCisJCQllY2hvICIgICAgICBmcm9tICAkb2xkcmV2IgorCQlmaQorCQllY2hvICIiCisJCWVjaG8gJExPR0JFR0lOCisJCWdpdC1zaG93IC0tbm8tY29sb3IgLS1yb290IC1zICRuZXdyZXYKKwkJZWNobyAkTE9HRU5ECisJCWVjaG8gIiIKKwkJOzsKK2VzYWMKKworIyBGb290ZXIKK2NhdCA8PC1FT0YKKworaG9va3MvdXBkYXRlCistLS0KK0dpdCBTb3VyY2UgQ29kZSBNYW5hZ2VtZW50IFN5c3RlbQorJDAgJDEgXFwKKyAgJDIgXFwKKyAgJDMKK0VPRgorIykgfCBjYXQgPiYyCispIHwgL3Vzci9zYmluL3NlbmRtYWlsIC10CisKKyMgLS0tIEZpbmlzaGVkCiBleGl0IDAKZGlmZiAtLWdpdCBhL3VwbG9hZC1wYWNrLmMgYi91cGxvYWQtcGFjay5jCmluZGV4IDNhNDY2YzYuLjM2NDhhYWUgMTAwNjQ0Ci0tLSBhL3VwbG9hZC1wYWNrLmMKKysrIGIvdXBsb2FkLXBhY2suYwpAQCAtNjcyLDcgKzY3Miw4IEBACiAKIAlpZiAoIWVudGVyX3JlcG8oZGlyLCBzdHJpY3QpKQogCQlkaWUoIiclcyc6IHVuYWJsZSB0byBjaGRpciBvciBub3QgYSBnaXQgYXJjaGl2ZSIsIGRpcik7Ci0KKwlpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkpCisJCWRpZSgiYXR0ZW1wdCB0byBmZXRjaC9jbG9uZSBmcm9tIGEgc2hhbGxvdyByZXBvc2l0b3J5Iik7CiAJdXBsb2FkX3BhY2soKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Zhci5jIGIvdmFyLmMKaW5kZXggMzk5NzdiOS4uZTU4NWU1OSAxMDA2NDQKLS0tIGEvdmFyLmMKKysrIGIvdmFyLmMKQEAgLTU2LDcgKzU2LDYgQEAKIAl9CiAKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7Ci0Jc2V0dXBfaWRlbnQoKTsKIAl2YWwgPSBOVUxMOwogCiAJaWYgKHN0cmNtcChhcmd2WzFdLCAiLWwiKSA9PSAwKSB7CmRpZmYgLS1naXQgYS93cml0ZV9vcl9kaWUuYyBiL3dyaXRlX29yX2RpZS5jCmluZGV4IDA0NmU3OWQuLjVjNGJjODUgMTAwNjQ0Ci0tLSBhL3dyaXRlX29yX2RpZS5jCisrKyBiL3dyaXRlX29yX2RpZS5jCkBAIC0yMyw3ICsyMyw3IEBACiAJc3NpemVfdCB0b3RhbCA9IDA7CiAKIAl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCXNpemVfdCB3cml0dGVuID0geHdyaXRlKGZkLCBwLCBjb3VudCk7CisJCXNzaXplX3Qgd3JpdHRlbiA9IHh3cml0ZShmZCwgcCwgY291bnQpOwogCQlpZiAod3JpdHRlbiA8IDApCiAJCQlyZXR1cm4gLTE7CiAJCWlmICghd3JpdHRlbikgewpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmMgYi93dC1zdGF0dXMuYwppbmRleCBiNzI1MGU0Li41NTY3ODY4IDEwMDY0NAotLS0gYS93dC1zdGF0dXMuYworKysgYi93dC1zdGF0dXMuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJCXd0X3N0YXR1c191c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChrLCB2KTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghc3RybmNtcChrLCAic3RhdHVzLmNvbG9yLiIsIDEzKSB8fCAhc3RybmNtcChrLCAiY29sb3Iuc3RhdHVzIiwgMTMpKSB7CisJaWYgKCFzdHJuY21wKGssICJzdGF0dXMuY29sb3IuIiwgMTMpIHx8ICFzdHJuY21wKGssICJjb2xvci5zdGF0dXMuIiwgMTMpKSB7CiAJCWludCBzbG90ID0gcGFyc2Vfc3RhdHVzX3Nsb3QoaywgMTMpOwogCQljb2xvcl9wYXJzZSh2LCBrLCB3dF9zdGF0dXNfY29sb3JzW3Nsb3RdKTsKIAl9Cg==