Name: series-workflowkhx2r Phase: Failed StartedAt: 2026-09-11 22:16:55 +0000 UTC FinishedAt: 2026-09-11 22:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkhx2r[0] Phase: Succeeded StartedAt: 2026-09-11 22:16:55 +0000 UTC FinishedAt: 2026-09-11 22:40:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkhx2r[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 22:16:55 +0000 UTC FinishedAt: 2026-09-11 22:40:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBBU1NFUlRfU1RBVElDX1NUT1JBR0UoKSwgd2hpY2ggaXMgYSBwdXJlbHkgY29tcGlsZS10aW1lIHN0YXRpYyBjaGVjayBlbmZvcmNpbmcgc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gb24gREVGSU5FX0lEQSBhbmQgREVGSU5FX01UUkVFIGRlY2xhcmF0aW9ucy4gSXQgZW1pdHMgbm8gcnVudGltZSBpbnN0cnVjdGlvbnMsIGRlZmVuc2l2ZSBhc3NlcnRpb25zLCBvciBjb250cm9sLWZsb3cgbW9kaWZpY2F0aW9ucy4gVGhlIGNoYW5nZXMgaW4gdG9vbHMvIGFmZmVjdCBvbmx5IHVzZXItc3BhY2UgdGVzdHMsIGFuZCB0aGUgY2hhbmdlIGluIGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYyBhZGp1c3RzIGEgc3RhbmRhbG9uZSB0ZXN0IG1vZHVsZSAoZXhlY3V0ZWQgb25seSBvbiBtb2R1bGUgaW5pdC9ib290IGFuZCBpbW1lZGlhdGVseSB1bmxvYWRlZCkgdG8gY29uZm9ybSB0byB0aGUgY29tcGlsZS10aW1lIGNoZWNrIHdpdGhvdXQgYWx0ZXJpbmcgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljLiBUaHVzLCBubyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdvcnRoIGZ1enppbmcgaXMgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjNhNDBhOGFkNDNkMWZmZjkyN2UzODhkMTdkMmFiMmQ2N2Q3YjliZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIyOjM3OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuaW5kZXggY2IyZjYwNTBiZGY3ZC4uZWY5MDM2ZmE1NDEzZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oXG5AQCAtMjc1LDYgJiM0MzsyNzUsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkICpvZmZzZXRfdG9fcHRyKGNvbnN0IGludCAqb2ZmKVxuICNkZWZpbmUgX19BRERSRVNTQUJMRShzeW0pIFxcXG4gXHRfX19BRERSRVNTQUJMRShzeW0sIF9fc2VjdGlvbihcJiMzNDsuZGlzY2FyZC5hZGRyZXNzYWJsZVwmIzM0OykpXG4gXG4mIzQzOy8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovXG4mIzQzOyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXG4mIzQzO1x0c3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcXFxuJiM0MztcdFx0bmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcdTAwMjYobmFtZSlcbiYjNDM7XG4gLypcbiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzXG4gICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZHIuaCBiL2luY2x1ZGUvbGludXgvaWRyLmhcbmluZGV4IDc4OWUyM2U2NzQ0NDEuLmUyYTRiNjI5ODUxMWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lkci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lkci5oXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgaWRyIHtcbiBcdHN0cnVjdCByYWRpeF90cmVlX3Jvb3RcdGlkcl9ydDtcbkBAIC0yNjksNyAmIzQzOzI3MCw5IEBAIHN0cnVjdCBpZGEge1xuICNkZWZpbmUgSURBX0lOSVQobmFtZSlcdHtcdFx0XHRcdFx0XHRcXFxuIFx0LnhhID0gWEFSUkFZX0lOSVQobmFtZSwgSURBX0lOSVRfRkxBR1MpXHRcdFx0XHRcXFxuIH1cbi0jZGVmaW5lIERFRklORV9JREEobmFtZSlcdHN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpXG4mIzQzOyNkZWZpbmUgREVGSU5FX0lEQShuYW1lKVx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRzdHJ1Y3QgaWRhIG5hbWUgPSBJREFfSU5JVChuYW1lKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbiBcbiBpbnQgaWRhX2FsbG9jX3JhbmdlKHN0cnVjdCBpZGEgKiwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwgZ2ZwX3QpO1xuIHZvaWQgaWRhX2ZyZWUoc3RydWN0IGlkYSAqLCB1bnNpZ25lZCBpbnQgaWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbmluZGV4IGU1OTVhZTVjZDBlZWQuLmUzMGU1N2Y1ZjNkZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbkBAIC05LDYgJiM0Mzs5LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiBcbkBAIC0yOTcsNyAmIzQzOzI5OCw4IEBAIHN0cnVjdCBtYXBsZV90cmVlIHtcbiAjZW5kaWZcbiBcbiAjZGVmaW5lIERFRklORV9NVFJFRShuYW1lKVx0XHRcdFx0XHRcdFxcXG4tXHRzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKVxuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlIG5hbWUgPSBNVFJFRV9JTklUKG5hbWUsIDApO1x0XHRcXFxuJiM0MztcdEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKVxuIFxuICNkZWZpbmUgbXRyZWVfbG9jayhtdClcdFx0c3Bpbl9sb2NrKChcdTAwMjYobXQpLVx1MDAzZW1hX2xvY2spKVxuICNkZWZpbmUgbXRyZWVfbG9ja19uZXN0ZWQobWFzLCBzdWJjbGFzcykgXFxcbmRpZmYgLS1naXQgYS9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcbmluZGV4IGIwYjA3MjcwY2U3YzMuLjA2Zjc3ZmIzMTc5ZmMgMTAwNjQ0XG4tLS0gYS9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY1xuQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgbGFzdDtcbiBcdHN0cnVjdCBpbnRlcnZhbF90cmVlX3NwYW5faXRlciBzcGFuLCBtYXNfc3BhbjtcbiBcbi1cdERFRklORV9NVFJFRSh0cmVlKTtcbiYjNDM7XHRzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlO1xuIFxuIFx0TUFfU1RBVEUobWFzLCBcdTAwMjZ0cmVlLCAwLCAwKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcbmluZGV4IGYyZjU0YjAzODE2ODAuLjAzZWNmOTA4NjY0MzYgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuQEAgLTczLDYgJiM0Mzs3MywxMSBAQFxuICMgZGVmaW5lIF9fc2FtZV90eXBlKGEsIGIpIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGEpLCB0eXBlb2YoYikpXG4gI2VuZGlmXG4gXG4mIzQzOy8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovXG4mIzQzOyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXG4mIzQzO1x0c3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcXFxuJiM0MztcdFx0bmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcdTAwMjYobmFtZSlcbiYjNDM7XG4gLypcbiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzXG4gICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL2lkci10ZXN0LmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuY1xuaW5kZXggOTQ1MTQ0ZTk4NTA3Mi4uNmZjYmE1YjU4NzBiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuY1xuQEAgLTQ2MCw5ICYjNDM7NDYwLDExIEBAIHZvaWQgaWRhX2R1bXAoc3RydWN0IGlkYSAqKTtcbiAgKi9cbiB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKVxuIHtcbi1cdERFRklORV9JREEoaWRhKTtcbiYjNDM7XHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdGludCBpZDtcbiBcbiYjNDM7XHRpZGFfaW5pdChcdTAwMjZpZGEpO1xuJiM0MztcbiBcdGlkID0gaWRhX2FsbG9jX21pbihcdTAwMjZpZGEsIDI1NiwgR0ZQX05PV0FJVCk7XG4gXHRJREFfQlVHX09OKFx1MDAyNmlkYSwgaWQgIT0gLUVOT01FTSk7XG4gXHRpZCA9IGlkYV9hbGxvY19taW4oXHUwMDI2aWRhLCAxVUwgXHUwMDNjXHUwMDNjIDMwLCBHRlBfTk9XQUlUKTtcbkBAIC00NzUsOSAmIzQzOzQ3NywxMSBAQCB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKVxuICAqL1xuIHZvaWQgaWRhX2NoZWNrX2NvbnZfdXNlcih2b2lkKVxuIHtcbi1cdERFRklORV9JREEoaWRhKTtcbiYjNDM7XHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiYjNDM7XHRpZGFfaW5pdChcdTAwMjZpZGEpO1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwMDA7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGludCBpZCA9IGlkYV9hbGxvYyhcdTAwMjZpZGEsIEdGUF9OT1dBSVQpO1xuIFx0XHRpZiAoaWQgPT0gLUVOT01FTSkge1xuQEAgLTQ5NiwxMSAmIzQzOzUwMCwxMyBAQCB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZClcbiBcbiB2b2lkIGlkYV9jaGVja19yYW5kb20odm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4mIzQzO1x0c3RydWN0IGlkYSBpZGE7XG4gXHRERUNMQVJFX0JJVE1BUChiaXRtYXAsIDIwNDgpO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXHR0aW1lX3QgcyA9IHRpbWUoTlVMTCk7XG4gXG4mIzQzO1x0aWRhX2luaXQoXHUwMDI2aWRhKTtcbiYjNDM7XG4gIHJlcGVhdDpcbiBcdG1lbXNldChiaXRtYXAsIDAsIHNpemVvZihiaXRtYXApKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwMDsgaSYjNDM7JiM0MzspIHtcbkBAIC01MjIsOSAmIzQzOzUyOCwxMSBAQCB2b2lkIGlkYV9jaGVja19yYW5kb20odm9pZClcbiBcbiB2b2lkIGlkYV9hbGxvY19mcmVlX3Rlc3Qodm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4mIzQzO1x0c3RydWN0IGlkYSBpZGE7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4mIzQzO1x0aWRhX2luaXQoXHUwMDI2aWRhKTtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwMDsgaSYjNDM7JiM0MzspXG4gXHRcdGFzc2VydChpZGFfYWxsb2NfbWF4KFx1MDAyNmlkYSwgMjAwMDAsIEdGUF9LRVJORUwpID09IGkpO1xuIFx0YXNzZXJ0KGlkYV9hbGxvY19yYW5nZShcdTAwMjZpZGEsIDUsIDMwLCBHRlBfS0VSTkVMKSBcdTAwM2MgMCk7XG5AQCAtNTc2LDEwICYjNDM7NTg0LDEyIEBAIHN0YXRpYyB2b2lkICppZGFfbGVha19mbih2b2lkICphcmcpXG4gXG4gdm9pZCBpZGFfdGhyZWFkX3Rlc3RzKHZvaWQpXG4ge1xuLVx0REVGSU5FX0lEQShpZGEpO1xuJiM0MztcdHN0cnVjdCBpZGEgaWRhO1xuIFx0cHRocmVhZF90IHRocmVhZHNbMjBdO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aWRhX2luaXQoXHUwMDI2aWRhKTtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRocmVhZHMpOyBpJiM0MzsmIzQzOylcbiBcdFx0aWYgKHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIGlkYV9yYW5kb21fZm4sIE5VTEwpKSB7XG4gXHRcdFx0cGVycm9yKFwmIzM0O2NyZWF0aW5nIGlkYSB0aHJlYWRcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbmluZGV4IGQ5NjdlNzZhM2MwNjUuLmJmZTRiODYyNmM0MjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbkBAIC0zNjAyMiwxMCAmIzQzOzM2MDIyLDEyIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19lcmFzZV9yZWJhbGFuY2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuIFxuIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19tdHJlZV9kdXAoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuIHtcbi1cdERFRklORV9NVFJFRShuZXcpO1xuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlIG5ldztcbiBcdGludCBpLCBqLCByZXQsIGNvdW50ID0gMDtcbiBcdHVuc2lnbmVkIGludCByYW5kX3NlZWQgPSAxNywgcmFuZDtcbiBcbiYjNDM7XHRtdF9pbml0KFx1MDAyNm5ldyk7XG4mIzQzO1xuIFx0Lyogc3RvcmUgYSB2YWx1ZSBhdCBbMCwgMF0gKi9cbiBcdG10X2luaXRfZmxhZ3MobXQsIDApO1xuIFx0bXRyZWVfc3RvcmVfcmFuZ2UobXQsIDAsIDAsIHhhX21rX3ZhbHVlKDApLCBHRlBfS0VSTkVMKTtcbkBAIC0zNjMxOSw3ICYjNDM7MzYzMjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja192bWFfbW9kaWZpY2F0aW9uKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiB2b2lkIGZhcm1lcl90ZXN0cyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlO1xuLVx0REVGSU5FX01UUkVFKHRyZWUpO1xuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XG4mIzQzO1xuJiM0MztcdG10X2luaXQoXHUwMDI2dHJlZSk7XG4gXG4gXHRtdF9kdW1wKFx1MDAyNnRyZWUsIG10X2R1bXBfZGVjKTtcbiBcbkBAIC0zNjQzMiw5ICYjNDM7MzY0MzYsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xhc3RfaW5kZXgoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gc3RhdGljIHZvaWQgdGVzdF9zcGFubmluZ19zdG9yZV9yZWdyZXNzaW9uKHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmcm9tID0gMCwgdG8gPSAwO1xuLVx0REVGSU5FX01UUkVFKHRyZWUpO1xuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XG4gXHRNQV9TVEFURShtYXMsIFx1MDAyNnRyZWUsIDAsIDApO1xuIFxuJiM0MztcdG10X2luaXQoXHUwMDI2dHJlZSk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEJ1aWxkIGEgMy1sZXZlbCB0cmVlLiBXZSByZXF1aXJlIGEgcGFyZW50IG5vZGUgYmVsb3cgdGhlIHJvb3Qgbm9kZVxuIFx0ICogYW5kIDIgbGVhZiBub2RlcyB1bmRlciBpdCwgc28gd2UgY2FuIHNwYW4gdGhlIGVudGlyZXR5IG9mIHRoZSByaWdodFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKCksIHdoaWNoIGlzIGEgcHVyZWx5IGNvbXBpbGUtdGltZSBzdGF0aWMgY2hlY2sgZW5mb3JjaW5nIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIG9uIERFRklORV9JREEgYW5kIERFRklORV9NVFJFRSBkZWNsYXJhdGlvbnMuIEl0IGVtaXRzIG5vIHJ1bnRpbWUgaW5zdHJ1Y3Rpb25zLCBkZWZlbnNpdmUgYXNzZXJ0aW9ucywgb3IgY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIHRvb2xzLyBhZmZlY3Qgb25seSB1c2VyLXNwYWNlIHRlc3RzLCBhbmQgdGhlIGNoYW5nZSBpbiBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYWRqdXN0cyBhIHN0YW5kYWxvbmUgdGVzdCBtb2R1bGUgKGV4ZWN1dGVkIG9ubHkgb24gbW9kdWxlIGluaXQvYm9vdCBhbmQgaW1tZWRpYXRlbHkgdW5sb2FkZWQpIHRvIGNvbmZvcm0gdG8gdGhlIGNvbXBpbGUtdGltZSBjaGVjayB3aXRob3V0IGFsdGVyaW5nIGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4gVGh1cywgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3b3J0aCBmdXp6aW5nIGlzIG1vZGlmaWVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIzYTQwYThhZDQzZDFmZmY5MjdlMzg4ZDE3ZDJhYjJkNjdkN2I5YmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAyMjozNzowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCBjYjJmNjA1MGJkZjdkLi5lZjkwMzZmYTU0MTNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0yNzUsNiAmIzQzOzI3NSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKm9mZnNldF90b19wdHIoY29uc3QgaW50ICpvZmYpCiAjZGVmaW5lIF9fQUREUkVTU0FCTEUoc3ltKSBcCiAJX19fQUREUkVTU0FCTEUoc3ltLCBfX3NlY3Rpb24oJiMzNDsuZGlzY2FyZC5hZGRyZXNzYWJsZSYjMzQ7KSkKIAomIzQzOy8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovCiYjNDM7I2RlZmluZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSkgXAomIzQzOwlzdGF0aWMgdHlwZW9mKG5hbWUpICogY29uc3QgX19hbHdheXNfdW51c2VkIFwKJiM0MzsJCW5hbWUjI19zdG9yYWdlX2NoZWNrID0gJmFtcDsobmFtZSkKJiM0MzsKIC8qCiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzCiAgKiBhIGNvbnN0YW50IGV4cHJlc3Npb24sIG1vc3QgaW1wb3J0YW50bHkgd2l0aG91dCBldmFsdWF0aW5nIHRoZSBhcmd1bWVudC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRyLmggYi9pbmNsdWRlL2xpbnV4L2lkci5oCmluZGV4IDc4OWUyM2U2NzQ0NDEuLmUyYTRiNjI5ODUxMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pZHIuaApAQCAtMTYsNiAmIzQzOzE2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJjcHUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAKIHN0cnVjdCBpZHIgewogCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QJaWRyX3J0OwpAQCAtMjY5LDcgJiM0MzsyNzAsOSBAQCBzdHJ1Y3QgaWRhIHsKICNkZWZpbmUgSURBX0lOSVQobmFtZSkJewkJCQkJCVwKIAkueGEgPSBYQVJSQVlfSU5JVChuYW1lLCBJREFfSU5JVF9GTEFHUykJCQkJXAogfQotI2RlZmluZSBERUZJTkVfSURBKG5hbWUpCXN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpCiYjNDM7I2RlZmluZSBERUZJTkVfSURBKG5hbWUpCQkJCQkJCVwKJiM0MzsJc3RydWN0IGlkYSBuYW1lID0gSURBX0lOSVQobmFtZSk7CQkJCQlcCiYjNDM7CUFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKQogCiBpbnQgaWRhX2FsbG9jX3JhbmdlKHN0cnVjdCBpZGEgKiwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwgZ2ZwX3QpOwogdm9pZCBpZGFfZnJlZShzdHJ1Y3QgaWRhICosIHVuc2lnbmVkIGludCBpZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCmluZGV4IGU1OTVhZTVjZDBlZWQuLmUzMGU1N2Y1ZjNkZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCkBAIC05LDYgJiM0Mzs5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogCkBAIC0yOTcsNyAmIzQzOzI5OCw4IEBAIHN0cnVjdCBtYXBsZV90cmVlIHsKICNlbmRpZgogCiAjZGVmaW5lIERFRklORV9NVFJFRShuYW1lKQkJCQkJCVwKLQlzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKQomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKTsJCVwKJiM0MzsJQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpCiAKICNkZWZpbmUgbXRyZWVfbG9jayhtdCkJCXNwaW5fbG9jaygoJmFtcDsobXQpLSZndDttYV9sb2NrKSkKICNkZWZpbmUgbXRyZWVfbG9ja19uZXN0ZWQobWFzLCBzdWJjbGFzcykgXApkaWZmIC0tZ2l0IGEvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGIvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jCmluZGV4IGIwYjA3MjcwY2U3YzMuLjA2Zjc3ZmIzMTc5ZmMgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMKQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKQogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGxhc3Q7CiAJc3RydWN0IGludGVydmFsX3RyZWVfc3Bhbl9pdGVyIHNwYW4sIG1hc19zcGFuOwogCi0JREVGSU5FX01UUkVFKHRyZWUpOwomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlOwogCiAJTUFfU1RBVEUobWFzLCAmYW1wO3RyZWUsIDAsIDApOwogCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggZjJmNTRiMDM4MTY4MC4uMDNlY2Y5MDg2NjQzNiAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtNzMsNiAmIzQzOzczLDExIEBACiAjIGRlZmluZSBfX3NhbWVfdHlwZShhLCBiKSBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihhKSwgdHlwZW9mKGIpKQogI2VuZGlmCiAKJiM0MzsvKiBFbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiAqLwomIzQzOyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFwKJiM0MzsJc3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcCiYjNDM7CQluYW1lIyNfc3RvcmFnZV9jaGVjayA9ICZhbXA7KG5hbWUpCiYjNDM7CiAvKgogICogVGhpcyByZXR1cm5zIGEgY29uc3RhbnQgZXhwcmVzc2lvbiB3aGlsZSBkZXRlcm1pbmluZyBpZiBhbiBhcmd1bWVudCBpcwogICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jCmluZGV4IDk0NTE0NGU5ODUwNzIuLjZmY2JhNWI1ODcwYjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jCkBAIC00NjAsOSAmIzQzOzQ2MCwxMSBAQCB2b2lkIGlkYV9kdW1wKHN0cnVjdCBpZGEgKik7CiAgKi8KIHZvaWQgaWRhX2NoZWNrX25vbWVtKHZvaWQpCiB7Ci0JREVGSU5FX0lEQShpZGEpOwomIzQzOwlzdHJ1Y3QgaWRhIGlkYTsKIAlpbnQgaWQ7CiAKJiM0MzsJaWRhX2luaXQoJmFtcDtpZGEpOwomIzQzOwogCWlkID0gaWRhX2FsbG9jX21pbigmYW1wO2lkYSwgMjU2LCBHRlBfTk9XQUlUKTsKIAlJREFfQlVHX09OKCZhbXA7aWRhLCBpZCAhPSAtRU5PTUVNKTsKIAlpZCA9IGlkYV9hbGxvY19taW4oJmFtcDtpZGEsIDFVTCAmbHQ7Jmx0OyAzMCwgR0ZQX05PV0FJVCk7CkBAIC00NzUsOSAmIzQzOzQ3NywxMSBAQCB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKQogICovCiB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZCkKIHsKLQlERUZJTkVfSURBKGlkYSk7CiYjNDM7CXN0cnVjdCBpZGEgaWRhOwogCXVuc2lnbmVkIGxvbmcgaTsKIAomIzQzOwlpZGFfaW5pdCgmYW1wO2lkYSk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IDEwMDAwMDA7IGkmIzQzOyYjNDM7KSB7CiAJCWludCBpZCA9IGlkYV9hbGxvYygmYW1wO2lkYSwgR0ZQX05PV0FJVCk7CiAJCWlmIChpZCA9PSAtRU5PTUVNKSB7CkBAIC00OTYsMTEgJiM0Mzs1MDAsMTMgQEAgdm9pZCBpZGFfY2hlY2tfY29udl91c2VyKHZvaWQpCiAKIHZvaWQgaWRhX2NoZWNrX3JhbmRvbSh2b2lkKQogewotCURFRklORV9JREEoaWRhKTsKJiM0MzsJc3RydWN0IGlkYSBpZGE7CiAJREVDTEFSRV9CSVRNQVAoYml0bWFwLCAyMDQ4KTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl0aW1lX3QgcyA9IHRpbWUoTlVMTCk7CiAKJiM0MzsJaWRhX2luaXQoJmFtcDtpZGEpOwomIzQzOwogIHJlcGVhdDoKIAltZW1zZXQoYml0bWFwLCAwLCBzaXplb2YoYml0bWFwKSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IDEwMDAwMDsgaSYjNDM7JiM0MzspIHsKQEAgLTUyMiw5ICYjNDM7NTI4LDExIEBAIHZvaWQgaWRhX2NoZWNrX3JhbmRvbSh2b2lkKQogCiB2b2lkIGlkYV9hbGxvY19mcmVlX3Rlc3Qodm9pZCkKIHsKLQlERUZJTkVfSURBKGlkYSk7CiYjNDM7CXN0cnVjdCBpZGEgaWRhOwogCXVuc2lnbmVkIGxvbmcgaTsKIAomIzQzOwlpZGFfaW5pdCgmYW1wO2lkYSk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IDEwMDAwOyBpJiM0MzsmIzQzOykKIAkJYXNzZXJ0KGlkYV9hbGxvY19tYXgoJmFtcDtpZGEsIDIwMDAwLCBHRlBfS0VSTkVMKSA9PSBpKTsKIAlhc3NlcnQoaWRhX2FsbG9jX3JhbmdlKCZhbXA7aWRhLCA1LCAzMCwgR0ZQX0tFUk5FTCkgJmx0OyAwKTsKQEAgLTU3NiwxMCAmIzQzOzU4NCwxMiBAQCBzdGF0aWMgdm9pZCAqaWRhX2xlYWtfZm4odm9pZCAqYXJnKQogCiB2b2lkIGlkYV90aHJlYWRfdGVzdHModm9pZCkKIHsKLQlERUZJTkVfSURBKGlkYSk7CiYjNDM7CXN0cnVjdCBpZGEgaWRhOwogCXB0aHJlYWRfdCB0aHJlYWRzWzIwXTsKIAlpbnQgaTsKIAomIzQzOwlpZGFfaW5pdCgmYW1wO2lkYSk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KQogCQlpZiAocHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzW2ldLCBOVUxMLCBpZGFfcmFuZG9tX2ZuLCBOVUxMKSkgewogCQkJcGVycm9yKCYjMzQ7Y3JlYXRpbmcgaWRhIHRocmVhZCYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKaW5kZXggZDk2N2U3NmEzYzA2NS4uYmZlNGI4NjI2YzQyOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKQEAgLTM2MDIyLDEwICYjNDM7MzYwMjIsMTIgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX2VyYXNlX3JlYmFsYW5jZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpCiAKIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19tdHJlZV9kdXAoc3RydWN0IG1hcGxlX3RyZWUgKm10KQogewotCURFRklORV9NVFJFRShuZXcpOwomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSBuZXc7CiAJaW50IGksIGosIHJldCwgY291bnQgPSAwOwogCXVuc2lnbmVkIGludCByYW5kX3NlZWQgPSAxNywgcmFuZDsKIAomIzQzOwltdF9pbml0KCZhbXA7bmV3KTsKJiM0MzsKIAkvKiBzdG9yZSBhIHZhbHVlIGF0IFswLCAwXSAqLwogCW10X2luaXRfZmxhZ3MobXQsIDApOwogCW10cmVlX3N0b3JlX3JhbmdlKG10LCAwLCAwLCB4YV9ta192YWx1ZSgwKSwgR0ZQX0tFUk5FTCk7CkBAIC0zNjMxOSw3ICYjNDM7MzYzMjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja192bWFfbW9kaWZpY2F0aW9uKHN0cnVjdCBtYXBsZV90cmVlICptdCkKIHZvaWQgZmFybWVyX3Rlc3RzKHZvaWQpCiB7CiAJc3RydWN0IG1hcGxlX25vZGUgKm5vZGU7Ci0JREVGSU5FX01UUkVFKHRyZWUpOwomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlOwomIzQzOwomIzQzOwltdF9pbml0KCZhbXA7dHJlZSk7CiAKIAltdF9kdW1wKCZhbXA7dHJlZSwgbXRfZHVtcF9kZWMpOwogCkBAIC0zNjQzMiw5ICYjNDM7MzY0MzYsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xhc3RfaW5kZXgoc3RydWN0IG1hX3N0YXRlICptYXMpCiBzdGF0aWMgdm9pZCB0ZXN0X3NwYW5uaW5nX3N0b3JlX3JlZ3Jlc3Npb24odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZyb20gPSAwLCB0byA9IDA7Ci0JREVGSU5FX01UUkVFKHRyZWUpOwomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlOwogCU1BX1NUQVRFKG1hcywgJmFtcDt0cmVlLCAwLCAwKTsKIAomIzQzOwltdF9pbml0KCZhbXA7dHJlZSk7CiYjNDM7CiAJLyoKIAkgKiBCdWlsZCBhIDMtbGV2ZWwgdHJlZS4gV2UgcmVxdWlyZSBhIHBhcmVudCBub2RlIGJlbG93IHRoZSByb290IG5vZGUKIAkgKiBhbmQgMiBsZWFmIG5vZGVzIHVuZGVyIGl0LCBzbyB3ZSBjYW4gc3BhbiB0aGUgZW50aXJldHkgb2YgdGhlIHJpZ2h0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUcmlhZ2U6IFBhdGNoIFNlcmllcyBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSB0YXNrIGl0c2VsZiBpcyBiZW5pZ24sIGZvY3VzaW5nIG9uIGtlcm5lbCBwYXRjaCByZXZpZXcgZm9yIGZ1enppbmcgdHJpYWdlLCBzbyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRpZmYgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4KClRoZSBidWxrIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYC4gVGhpcyBtYWNybyBlbmZvcmNlcyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBmb3IgY2VydGFpbiBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSBgaWRhYCBhbmQgYG1hcGxlX3RyZWVgLCBhcyBzZWVuIGluIGBpbmNsdWRlL2xpbnV4L2lkci5oYCBhbmQgYGluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oYC4gSXQgbG9va3MgbGlrZSBpdCBpcyB0byBjaGVjayBmb3IgYWNjaWRlbnRhbCB1c2Ugb2YgdGhlc2Ugc3RydWN0dXJlcyBpbiBmdW5jdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGV4cGVjdGVkIHRvIHVzZSBzdGF0aWMgc3RvcmFnZS4KCk5vdywgdGhlIGludGVyZXN0aW5nIGJpdCwgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AsIEkgc2VlIGEgKmNoYW5nZSogcmVsYXRlZCB0byBgREVGSU5FX01UUkVFKHRyZWUpYC4gSXQmIzM5O3MgYmVlbiBhbHRlcmVkIHRvIGBzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlO2AuIEltbWVkaWF0ZWx5LCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNoYW5nZSBpcyBqdXN0IGEgZGlyZWN0IHJlcGxhY2VtZW50LCBvciBpZiBzb21ldGhpbmcgZWxzZSBpcyBnb2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB0cmVlYCBpcyAqaW5pdGlhbGl6ZWQqIGxhdGVyIGluIHRoZSBmaWxlIGlmIGl0JiMzOTtzIG5vIGxvbmdlciBiZWluZyBpbml0aWFsaXplZCBieSB0aGUgYERFRklORV9NVFJFRWAgbWFjcm8uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCB0byBsb29rIGZvciB0aGF0IGluaXRpYWxpemF0aW9uLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGJlIHF1aWNrIGFib3V0IGl0LgoKRmluYWxseSwgdGhlcmUgYXJlIHNvbWUgdG9vbC1yZWxhdGVkIGNoYW5nZXMgaW4gYHRvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaGAsIGB0b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNgLiBUaGV5JiMzOTtyZSBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBtYWNybyBpdHNlbGYsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlbSBzZXBhcmF0ZWx5IGlmIHRoZXkgYXJlIG5lY2Vzc2FyeSBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL2ludGVydmFsX3RyZWVfdGVzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHRcbiAyNDE6XHRzdGF0aWMgaW50IHNwYW5faXRlcmF0aW9uX2NoZWNrKHZvaWQpXG4gMjQyOlx0e1xuIDI0MzpcdFx0aW50IGksIGosIGs7XG4gMjQ0Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBsYXN0O1xuIDI0NTpcdFx0c3RydWN0IGludGVydmFsX3RyZWVfc3Bhbl9pdGVyIHNwYW4sIG1hc19zcGFuO1xuIDI0NjpcdFxuIDI0NzpcdFx0c3RydWN0IG1hcGxlX3RyZWUgdHJlZTtcbiAyNDg6XHRcbiAyNDk6XHRcdE1BX1NUQVRFKG1hcywgXHUwMDI2dHJlZSwgMCwgMCk7XG4gMjUwOlx0XG4gMjUxOlx0XHRwcmludGsoS0VSTl9BTEVSVCBcJiMzNDtpbnRlcnZhbCB0cmVlIHNwYW4gaXRlcmF0aW9uXFxuXCYjMzQ7KTtcbiAyNTI6XHRcbiAyNTM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNlYXJjaF9sb29wczsgaSYjNDM7JiM0MzspIHtcbiAyNTQ6XHRcdFx0LyogSW5pdGlhbGl6ZSBpbnRlcnZhbCB0cmVlIGZvciBlYWNoIHJvdW5kICovXG4gMjU1Olx0XHRcdGluaXQoKTtcbiAyNTY6XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2Mgbm5vZGVzOyBqJiM0MzsmIzQzOylcbiAyNTc6XHRcdFx0XHRpbnRlcnZhbF90cmVlX2luc2VydChub2RlcyAmIzQzOyBqLCBcdTAwMjZyb290KTtcbiAyNTg6XHRcbiAyNTk6XHRcdFx0LyogUHV0IGFsbCB0aGUgcmFuZ2UgaW50byBtYXBsZSB0cmVlICovXG4gMjYwOlx0XHRcdG10X2luaXRfZmxhZ3MoXHUwMDI2dHJlZSwgTVRfRkxBR1NfQUxMT0NfUkFOR0UpO1xuIDI2MTpcdFx0XHRtdF9zZXRfaW5fcmN1KFx1MDAyNnRyZWUpO1xuIDI2MjpcdFxuIDI2MzpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBubm9kZXM7IGomIzQzOyYjNDM7KVxuIDI2NDpcdFx0XHRcdFdBUk5fT05fT05DRShtdHJlZV9zdG9yZV9yYW5nZShcdTAwMjZ0cmVlLCBub2Rlc1tqXS5zdGFydCxcbiAyNjU6XHRcdFx0XHRcdFx0bm9kZXNbal0ubGFzdCwgbm9kZXMgJiM0MzsgaiwgR0ZQX0tFUk5FTCkpO1xuIDI2NjpcdFxuIDI2NzpcdFx0XHQvKiBMZXQmIzM5O3MgdHJ5IG5zZWFyY2hlcyBkaWZmZXJlbnQgcmFuZ2VzICovXG4gMjY4Olx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG5zZWFyY2hlczsgayYjNDM7JiM0MzspIHtcbiAyNjk6XHRcdFx0XHQvKiBUcnkgd2hvbGUgcmFuZ2Ugb25jZSAqL1xuIDI3MDpcdFx0XHRcdGlmICghaykge1xuIDI3MTpcdFx0XHRcdFx0c3RhcnQgPSAwVUw7XG4gMjcyOlx0XHRcdFx0XHRsYXN0ID0gVUxPTkdfTUFYO1xuIDI3MzpcdFx0XHRcdH0gZWxzZSB7XG4gMjc0Olx0XHRcdFx0XHRsYXN0ID0gKHByYW5kb21fdTMyX3N0YXRlKFx1MDAyNnJuZCkgXHUwMDNlXHUwMDNlIDQpICUgbWF4X2VuZHBvaW50O1xuIDI3NTpcdFx0XHRcdFx0c3RhcnQgPSAocHJhbmRvbV91MzJfc3RhdGUoXHUwMDI2cm5kKSBcdTAwM2VcdTAwM2UgNCkgJSBsYXN0O1xuIDI3NjpcdFx0XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdFx0XHRtYXNfc3Bhbi5maXJzdF9pbmRleCA9IHN0YXJ0O1xuIDI3OTpcdFx0XHRcdG1hc19zcGFuLmxhc3RfaW5kZXggPSBsYXN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgSW50ZXJ2YWwgVHJlZSBUZXN0IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHNwYW5faXRlcmF0aW9uX2NoZWNrYCBmdW5jdGlvbiB3aXRoaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBpbml0aWFsaXphdGlvbiBvZiBgdHJlZWAgd2l0aGluIHRoZSBsb29wOiBgbXRfaW5pdF9mbGFncygmYW1wO3RyZWUsIE1UX0ZMQUdTX0FMTE9DX1JBTkdFKWAgb24gbGluZSAyNjAuICpIb2xkIG9uIGEgc2Vjb25kKiwgaXNuJiMzOTt0IGB0cmVlYCBhbHJlYWR5IGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyB2YXJpYWJsZS4KCkZpcnN0LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHRoaXMgZmlsZSBtb3JlIHRob3JvdWdobHkuIFdoYXQgZXhhY3RseSAqaXMqIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgPyBBIHF1aWNrIHJlZnJlc2hlciB3b3VsZCBiZSBoZWxwZnVsIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgY29kZSwgYW5kIGhvdyBpdOKAmXMgYmVpbmcgYnVpbHQgYW5kIHVzZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIGhvdyBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBwdWxsIHVwIHRoZSBNYWtlZmlsZSBhbmQgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBob3cgYGludGVydmFsX3RyZWVfdGVzdGAgaXMgYnVpbHQgYW5kIHVzZWQgd2l0aGluIHRoZSBwcm9qZWN0LiBUaGF0IHNob3VsZCBjbGFyaWZ5IHRoZSBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZXJ2YWxfdHJlZV90ZXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9NYWtlZmlsZT0yOTI9b2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSAmIzQzOz0gcmJ0cmVlX3Rlc3Qub1xubGliL01ha2VmaWxlOjI5MzpvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSAmIzQzOz0gaW50ZXJ2YWxfdHJlZV90ZXN0Lm9cbmxpYi9NYWtlZmlsZS0yOTQtXG4tLVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jPTMxMD1zdGF0aWMgaW5saW5lIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKSB7cmV0dXJuIDA7IH1cbi0tXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMzEyLVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jOjMxMzpzdGF0aWMgaW50IGludGVydmFsX3RyZWVfdGVzdF9pbml0KHZvaWQpXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMzE0LXtcbi0tXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMzU4LVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jOjM1OTpzdGF0aWMgdm9pZCBpbnRlcnZhbF90cmVlX3Rlc3RfZXhpdCh2b2lkKVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2MC17XG4tLVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2My1cbmxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYzozNjQ6bW9kdWxlX2luaXQoaW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQpXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmM6MzY1Om1vZHVsZV9leGl0KGludGVydmFsX3RyZWVfdGVzdF9leGl0KVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2Ni1cbi0tXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZS00LVxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGU6NTpUQVJHRVRTID0gcmJ0cmVlX3Rlc3QgaW50ZXJ2YWxfdHJlZV90ZXN0XG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZS02LU9GSUxFUyA9ICQoU0hBUkVEX09GSUxFUykgcmJ0cmVlLXNoaW0ubyBpbnRlcnZhbF90cmVlLXNoaW0ubyBtYXBsZS1zaGltLm9cbi0tXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZT0yOD1pbnRlcnZhbF90cmVlLXNoaW0ubzogQ0ZMQUdTICYjNDM7PSAtRENPTkZJR19JTlRFUlZBTF9UUkVFX1NQQU5fSVRFUlxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGU6Mjk6aW50ZXJ2YWxfdHJlZV90ZXN0Lm86IFx0Li4vLi4vLi4vbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZTozMDppbnRlcnZhbF90cmVlX3Rlc3QubzogQ0ZMQUdTICYjNDM7PSAtRENPTkZJR19JTlRFUlZBTF9UUkVFX1NQQU5fSVRFUlxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGUtMzEtXG4tLVxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMTAtXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYzoxMTojaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcJiMzNDtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTEyLVxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmM9MTM9aW50IHVzYWdlKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMjUtXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYzoyNjp2b2lkIGludGVydmFsX3RyZWVfdGVzdHModm9pZClcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTI3LXtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjI4Olx0aW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQoKTtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjI5Olx0aW50ZXJ2YWxfdHJlZV90ZXN0X2V4aXQoKTtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTMwLX1cbi0tXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYz0zMj1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4tLVxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtNTUtXHRtYXBsZV90cmVlX2luaXQoKTtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjU2Olx0aW50ZXJ2YWxfdHJlZV90ZXN0cygpO1xudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtNTctXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3JidHJlZS90ZXN0Lmg9Mz12b2lkIHJidHJlZV90ZXN0cyh2b2lkKTtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL3Rlc3QuaDo0OnZvaWQgaW50ZXJ2YWxfdHJlZV90ZXN0cyh2b2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTIyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhpcyBDb21taXQ6IERpdmluZyBpbnRvIHRoZSBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB1bmRlcnN0YW5kIHRoZSAqd2h5Ki4gRm9yZ2V0IGp1bXBpbmcgc3RyYWlnaHQgaW50byB0aGUgZGlmZjsgSSBuZWVkIHRoZSBjb250ZXh0LiBMZXQgbWUgY2hlY2sgdGhlIGNvbW1pdCBkZXNjcmlwdGlvbi4gV2hhdCB3YXMgdGhlIHRoaW5raW5nIGJlaGluZCB0aGlzPyBXaGF0IHByb2JsZW0gd2FzIGl0IHRyeWluZyB0byBzb2x2ZT8gT3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBnb29kIEdpdCBsb2cgbWVzc2FnZSBJIGNhbiBwZXJ1c2UuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RyYXRlZ3kgaGVyZSB3aWxsIGhlbHAgbWUgdG8gcXVpY2tseSBncmFzcCB3aGF0IHRoZSBkZXZlbG9wZXIgd2FzIGdvaW5nIGZvciwgYW5kIHRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcy4gV2l0aG91dCB0aGF0IGNydWNpYWwgaW5mb3JtYXRpb24sIEkgYW0ganVzdCBndWVzc2luZyBhYm91dCB0aGUgbW90aXZhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBU1NFUlRfU1RBVElDX1NUT1JBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb21waWxlci5oPTI1OD1zdGF0aWMgaW5saW5lIHZvaWQgKm9mZnNldF90b19wdHIoY29uc3QgaW50ICpvZmYpXG4tLVxuaW5jbHVkZS9saW51eC9jb21waWxlci5oLTI3OC0vKiBFbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiAqL1xuaW5jbHVkZS9saW51eC9jb21waWxlci5oOjI3OTojZGVmaW5lIEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKSBcXFxuaW5jbHVkZS9saW51eC9jb21waWxlci5oLTI4MC1cdHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L2lkci5oPTI2ND1zdHJ1Y3QgaWRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lkci5oLTI3NC1cdHN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpO1x0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9pZHIuaDoyNzU6XHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbmluY2x1ZGUvbGludXgvaWRyLmgtMjc2LVxuLS1cbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oPTI2MT1zdHJ1Y3QgbWFwbGVfdHJlZSB7XG4tLVxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtMzAxLVx0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7XHRcdFxcXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaDozMDI6XHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oLTMwMy1cbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgtNzYtLyogRW5mb3JjZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gKi9cbnRvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaDo3NzojZGVmaW5lIEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKSBcXFxudG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oLTc4LVx0c3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UgTWFjcm8gYW5kIFBhdGNoIEltcGFjdCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpYCBtYWNyby4uLiBpdCYjMzk7cyBhIGNsZXZlciB0cmljay4gRXNzZW50aWFsbHksIGl0IGZvcmNlcyBhIGNvbXBpbGUtdGltZSBjaGVjayB0byBlbnN1cmUgYSB2YXJpYWJsZSBgbmFtZWAgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiBUaGUgbWFjcm8gY3JlYXRlcyBhIGBzdGF0aWNgIHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlLiBJbiBDLCB5b3UgKmNhbiYjMzk7dCogaW5pdGlhbGl6ZSBhIGBzdGF0aWNgIHBvaW50ZXIgd2l0aCB0aGUgYWRkcmVzcyBvZiBhbiBhdXRvbWF0aWMgKHN0YWNrKSB2YXJpYWJsZTsgdGhhdCYjMzk7cyBhIGNvbnN0YW50IGluaXRpYWxpemVyIHJlcXVpcmVtZW50LiBTbywgaWYgYG5hbWVgIGlzIGEgc3RhY2sgdmFyaWFibGUgd2l0aGluIGEgZnVuY3Rpb24sIHRoZSBjb21waWxlciB3aWxsIHJpZ2h0ZnVsbHkgYmFyZiB3aXRoIGEgY29tcGxhaW50IGFib3V0IGFuICYjMzQ7aW5pdGlhbGl6ZXIgZWxlbWVudCBpcyBub3QgY29uc3RhbnQmIzM0Oy4gQnJpbGxpYW50LiBJZiBgbmFtZWAgaXMgZGVjbGFyZWQgc3RhdGljLCBvciBhdCBmaWxlIHNjb3BlLCB0aGVuIGl0IGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LCBhbmQgdGhlIGNoZWNrIHBhc3Nlcy4KClNvLCB0aGlzIG1hY3JvIGlzIGEgc3RhdGljIGFzc2VydGlvbiwgYSBjb21waWxlLXRpbWUgY2hlY2suIEl0IGRvZXNuJiMzOTt0IGdlbmVyYXRlIGFueSBydW50aW1lIGNvZGUsIGFzIGBfX2Fsd2F5c191bnVzZWRgIHdvdWxkIGVuc3VyZSB0aGUgY29tcGlsZXIgb3B0aW1pemVzIGl0IG91dC4gVGhlIHByaW1hcnkgaW1wYWN0IGlzIHRvIGVuZm9yY2UgcHJvcGVyIHN0b3JhZ2UgZHVyYXRpb24gZm9yIHZhcmlhYmxlcyBkZWNsYXJlZCB3aXRoIGBERUZJTkVfSURBYCBhbmQgYERFRklORV9NVFJFRWAuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIHdlJiMzOTt2ZSBnb3QgYSBuZXcgbWFjcm8sIGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgLCBpbiBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIHRoZW4gYWRkZWQgdG8gdGhlIGRlZmluaXRpb24gbWFjcm9zIGBERUZJTkVfSURBYCBpbiBgaW5jbHVkZS9saW51eC9pZHIuaGAgYW5kIGBERUZJTkVfTVRSRUVgIGluIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGAuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AuIFRoZSB0ZXN0IGNhc2UgcHJldmlvdXNseSBkZWNsYXJlZCBgREVGSU5FX01UUkVFKHRyZWUpYCBhcyBhIGxvY2FsIHZhcmlhYmxlLiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgdG8gYERFRklORV9NVFJFRWAgbm93ICpmb3JjZXMqIHRoaXMgdG8gYmUgYSBjb21waWxlLXRpbWUgZXJyb3IhIFRoZSB0ZXN0IGNhc2UgKmhhZCogdG8gYmUgY2hhbmdlZCB0byB1c2UgYSBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZWAgdmFyaWFibGUsIGluaXRpYWxpemVkIHdpdGggYG10X2luaXRfZmxhZ3NgLiBUaGlzIGlzIGJ5IGRlc2lnbiwgYW5kIGNvcnJlY3RseSBlbmZvcmNlcyB0aGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgbWFjcm8uCgpBZGRpdGlvbmFsbHksIHVuZGVyIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHRoZSBzYW1lIGlzc3VlIHdpdGggYXV0b21hdGljIHN0b3JhZ2UgdmFyaWFibGVzIGluIHRoZSBgREVGSU5FX0lEQWAgbWFjcm8gY2F1c2VkIHNpbWlsYXIgY2hhbmdlcy4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGluc3RydWN0aW9ucywgdGhlIGNvcmUgcXVlc3Rpb24gaXMsICYjMzQ7SXMgdGhpcyBhIGNoYW5nZSB0byBleGVjdXRhYmxlIGtlcm5lbCBjb2RlLCBhbmQgZG9lcyBpdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFzc2VydGlvbnM/JiMzNDsgV2VsbCwgaXQgKmRvZXMqIG1vZGlmeSBleGVjdXRhYmxlIGNvZGUgKHRoZSB0ZXN0IGNhc2VzKSBieSBmb3JjaW5nIGNoYW5nZXMgdG8gdGhlIGRlZmluaXRpb24gb2Ygc3RvcmFnZS4gVGhlIGFzc2VydGlvbiBpc24mIzM5O3QgYSBydW50aW1lIGNoZWNrLCBidXQgYSBjb21waWxlLXRpbWUgYXNzZXJ0aW9uLiBJdCBzdGlsbCBmb3JjZXMgdGhlIGF1dGhvciB0byBjaG9vc2UgdGhlIGNvcnJlY3Qgc3RvcmFnZSBkdXJhdGlvbiwgd2hpY2ggbWF5IGV4cG9zZSBkZXNpZ24gY2hvaWNlcyB0aGF0IGFyZSBub3Qgb2J2aW91cyBhdCBhIGdsYW5jZS4KClRoZSBwYXRjaCAqZG9lcyogbW9kaWZ5IGNvZGUsIHNwZWNpZmljYWxseSB0ZXN0IGNvZGUgYW5kIHNvbWUgb2YgdGhlIGNvZGUgZGVmaW5pdGlvbnMuIFdlJiMzOTt2ZSBnb3QgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBpbmNsdWRlIGZpbGVzIHRoYXQgaW50cm9kdWNlIHRoZSBjaGVjay4gVGhlIGNoYW5nZXMgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSBhbmQgdGhlIHRlc3QgY2FzZSBhcmUgKmRpcmVjdGx5KiBhIHJlc3VsdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gV2hpbGUgaXQgaXMgbm90IGEgcnVudGltZSBjaGVjaywgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBpbnZhcmlhbnQgKGNvcnJlY3Qgc3RvcmFnZSBkdXJhdGlvbiksIGFuZCBieSB0aGUgaW5zdHJ1Y3Rpb25zLCBldmVuICpjb21waWxlLXRpbWUqIGFzc2VydGlvbnMgaW4gKnJlYWNoYWJsZSogY29kZSB3YXJyYW50IGZ1enppbmcuIFRoZSB1cGRhdGVkIGRlZmluaXRpb25zIGFyZSByZWFjaGFibGUsIGFuZCB0aGUgdGVzdCBjYXNlIGNoYW5nZXMgc2hvdyBpdCBpcyByZWFjaGFibGUuCgpTbywgeWVzLCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucywgdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdGhyb3VnaCBmdXp6aW5nLCBiZWNhdXNlIGl0IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBieSBlbmZvcmNpbmcgbmV3IGludmFyaWFudHMgYW5kIHRoZSBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBjYXVzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIHRob3NlIGFyZSB2aW9sYXRlZCwgdGhlcmVmb3JlIGl0IGNvdWxkIGV4cG9zZSBkZXNpZ24gaXNzdWVzIG9yIGxhdGVudCBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZXBhcmFtLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnZhbF90cmVlLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmFuZG9tLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2FzbS90aW1leC5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXBsZV90cmVlLmhcdTAwM2VcbiAgMTE6XHRcbiAgMTI6XHQjZGVmaW5lIF9fcGFyYW0odHlwZSwgbmFtZSwgaW5pdCwgbXNnKVx0XHRcXFxuICAxMzpcdFx0c3RhdGljIHR5cGUgbmFtZSA9IGluaXQ7XHRcdFxcXG4gIDE0Olx0XHRtb2R1bGVfcGFyYW0obmFtZSwgdHlwZSwgMDQ0NCk7XHRcdFxcXG4gIDE1Olx0XHRNT0RVTEVfUEFSTV9ERVNDKG5hbWUsIG1zZyk7XG4gIDE2Olx0XG4gIDE3Olx0X19wYXJhbShpbnQsIG5ub2RlcywgMTAwLCBcJiMzNDtOdW1iZXIgb2Ygbm9kZXMgaW4gdGhlIGludGVydmFsIHRyZWVcJiMzNDspO1xuICAxODpcdF9fcGFyYW0oaW50LCBwZXJmX2xvb3BzLCAxMDAwLCBcJiMzNDtOdW1iZXIgb2YgaXRlcmF0aW9ucyBtb2RpZnlpbmcgdGhlIHRyZWVcJiMzNDspO1xuICAxOTpcdFxuICAyMDpcdF9fcGFyYW0oaW50LCBuc2VhcmNoZXMsIDEwMCwgXCYjMzQ7TnVtYmVyIG9mIHNlYXJjaGVzIHRvIHRoZSBpbnRlcnZhbCB0cmVlXCYjMzQ7KTtcbiAgMjE6XHRfX3BhcmFtKGludCwgc2VhcmNoX2xvb3BzLCAxMDAwLCBcJiMzNDtOdW1iZXIgb2YgaXRlcmF0aW9ucyBzZWFyY2hpbmcgdGhlIHRyZWVcJiMzNDspO1xuICAyMjpcdF9fcGFyYW0oYm9vbCwgc2VhcmNoX2FsbCwgZmFsc2UsIFwmIzM0O1NlYXJjaGVzIHdpbGwgaXRlcmF0ZSBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcJiMzNDspO1xuICAyMzpcdFxuICAyNDpcdF9fcGFyYW0odWludCwgbWF4X2VuZHBvaW50LCB+MCwgXCYjMzQ7TGFyZ2VzdCB2YWx1ZSBmb3IgdGhlIGludGVydmFsJiMzOTtzIGVuZHBvaW50XCYjMzQ7KTtcbiAgMjU6XHRfX3BhcmFtKHVsbG9uZywgc2VlZCwgMzE0MTU5MjY1MzU4OTc5MzIzOFVMTCwgXCYjMzQ7UmFuZG9tIHNlZWRcJiMzNDspO1xuICAyNjpcdFxuICAyNzpcdHN0YXRpYyBzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcm9vdCA9IFJCX1JPT1RfQ0FDSEVEO1xuICAyODpcdHN0YXRpYyBzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpub2RlcyA9IE5VTEw7XG4gIDI5Olx0c3RhdGljIHUzMiAqcXVlcmllcyA9IE5VTEw7XG4gIDMwOlx0XG4gIDMxOlx0c3RhdGljIHN0cnVjdCBybmRfc3RhdGUgcm5kO1xuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuICAzNDpcdHNlYXJjaChzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgKnJvb3QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGFzdClcbiAgMzU6XHR7XG4gIDM2Olx0XHRzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpub2RlO1xuICAzNzpcdFx0dW5zaWduZWQgbG9uZyByZXN1bHRzID0gMDtcbiAgMzg6XHRcbiAgMzk6XHRcdGZvciAobm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9maXJzdChyb290LCBzdGFydCwgbGFzdCk7IG5vZGU7XG4gIDQwOlx0XHQgICAgIG5vZGUgPSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4dChub2RlLCBzdGFydCwgbGFzdCkpXG4gIDQxOlx0XHRcdHJlc3VsdHMmIzQzOyYjNDM7O1xuICA0MjpcdFx0cmV0dXJuIHJlc3VsdHM7XG4gIDQzOlx0fVxuICA0NDpcdFxuICA0NTpcdHN0YXRpYyB2b2lkIGluaXQodm9pZClcbiAgNDY6XHR7XG4gIDQ3Olx0XHRpbnQgaTtcbiAgNDg6XHRcbiAgNDk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ub2RlczsgaSYjNDM7JiM0MzspIHtcbiAgNTA6XHRcdFx0dTMyIGIgPSAocHJhbmRvbV91MzJfc3RhdGUoXHUwMDI2cm5kKSBcdTAwM2VcdTAwM2UgNCkgJSBtYXhfZW5kcG9pbnQ7XG4gIDUxOlx0XHRcdHUzMiBhID0gKHByYW5kb21fdTMyX3N0YXRlKFx1MDAyNnJuZCkgXHUwMDNlXHUwMDNlIDQpICUgYjtcbiAgNTI6XHRcbiAgNTM6XHRcdFx0bm9kZXNbaV0uc3RhcnQgPSBhO1xuICA1NDpcdFx0XHRub2Rlc1tpXS5sYXN0ID0gYjtcbiAgNTU6XHRcdH1cbiAgNTY6XHRcbiAgNTc6XHRcdC8qXG4gIDU4Olx0XHQgKiBMaW1pdCB0aGUgc2VhcmNoIHNjb3BlIHRvIHdoYXQgdGhlIHVzZXIgZGVmaW5lZC5cbiAgNTk6XHRcdCAqIE90aGVyd2lzZSB3ZSBhcmUgbWVyZWx5IG1lYXN1cmluZyBlbXB0eSB3YWxrcyxcbiAgNjA6XHRcdCAqIHdoaWNoIGlzIHBvaW50bGVzcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIgb2YgYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIHJlc3Qgb2YgYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AuIEkmIzM5O3ZlIGFscmVhZHkgZXhhbWluZWQgc29tZSBvZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBhbmQgSSYjMzk7bSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHRlc3Qgc3VpdGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBlZGdlIGNhc2VzLCBib3VuZGFyeSBjb25kaXRpb25zLCBhbmQgcG90ZW50aWFsIGVycm9yIHNjZW5hcmlvcy4gQXJlIHRoZXkgdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBpbnNlcnRpb24sIGRlbGV0aW9uLCBzZWFyY2hpbmcsIGFuZCBvdmVybGFwcGluZyBpbnRlcnZhbCBmdW5jdGlvbmFsaXRpZXM/IEkgd2FudCB0byBzZWUgaWYgdGhlIHRlc3RzIGNvdmVyIGEgd2lkZSByYW5nZSBvZiBpbnRlcnZhbCBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nIGVtcHR5IGludGVydmFscywgc2luZ2xlLXBvaW50IGludGVydmFscywgYW5kIGhlYXZpbHkgb3ZlcmxhcHBpbmcgaW50ZXJ2YWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcm9idXN0bHkgdGhlIHRlc3RzIHZhbGlkYXRlIHRoZSB0cmVlJiMzOTtzIGludGVybmFsIGNvbnNpc3RlbmN5IGFmdGVyIGVhY2ggb3BlcmF0aW9uLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0ZWNobmlxdWVzIHRoZXkmIzM5O3JlIHVzaW5nIHRvIHNpbXBsaWZ5IHRoZSB0ZXN0IGNvZGUsIHBlcmhhcHMgdGhyb3VnaCBtYWNybyB1c2FnZSBvciBoZWxwZXIgZnVuY3Rpb25zPyBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBhc3Nlc3MgdGhlIGNvbXBsZXRlbmVzcyBhbmQgcXVhbGl0eSBvZiB0aGVzZSB0ZXN0cy4gVGhpcyBleGFtaW5hdGlvbiB3aWxsIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZGVuY2UgbGV2ZWwgdGhpcyBwcm9qZWN0IGhhcyBpbiBpdHMgaW50ZXJ2YWwgdHJlZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBrZWVuIHRvIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZW5lc3Mgb2YgdGhpcyB0ZXN0aW5nIGFwcHJvYWNoLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IG9yLCBjb252ZXJzZWx5LCBzb2xpZCBkZXNpZ24gY2hvaWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFxuIDMwMTpcdFx0XHQvKiBDbGVhbnVwIG1hcGxlIHRyZWUgZm9yIGVhY2ggcm91bmQgKi9cbiAzMDI6XHRcdFx0bXRyZWVfZGVzdHJveShcdTAwMjZ0cmVlKTtcbiAzMDM6XHRcdFx0LyogQ2xlYW51cCBpbnRlcnZhbCB0cmVlIGZvciBlYWNoIHJvdW5kICovXG4gMzA0Olx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ub2RlczsgaiYjNDM7JiM0MzspXG4gMzA1Olx0XHRcdFx0aW50ZXJ2YWxfdHJlZV9yZW1vdmUobm9kZXMgJiM0MzsgaiwgXHUwMDI2cm9vdCk7XG4gMzA2Olx0XHR9XG4gMzA3Olx0XHRyZXR1cm4gMDtcbiAzMDg6XHR9XG4gMzA5Olx0I2Vsc2VcbiAzMTA6XHRzdGF0aWMgaW5saW5lIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKSB7cmV0dXJuIDA7IH1cbiAzMTE6XHQjZW5kaWZcbiAzMTI6XHRcbiAzMTM6XHRzdGF0aWMgaW50IGludGVydmFsX3RyZWVfdGVzdF9pbml0KHZvaWQpXG4gMzE0Olx0e1xuIDMxNTpcdFx0aWYgKG5ub2RlcyBcdTAwM2M9IDApIHtcbiAzMTY6XHRcdFx0cHJfd2FybihcJiMzNDtubm9kZXMgbXVzdCBiZSBwb3NpdGl2ZVxcblwmIzM0Oyk7XG4gMzE3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMxODpcdFx0fVxuIDMxOTpcdFx0aWYgKG5zZWFyY2hlcyBcdTAwM2M9IDApIHtcbiAzMjA6XHRcdFx0cHJfd2FybihcJiMzNDtuc2VhcmNoZXMgbXVzdCBiZSBwb3NpdGl2ZVxcblwmIzM0Oyk7XG4gMzIxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMyMjpcdFx0fVxuIDMyMzpcdFx0aWYgKHBlcmZfbG9vcHMgXHUwMDNjPSAwKSB7XG4gMzI0Olx0XHRcdHByX3dhcm4oXCYjMzQ7cGVyZl9sb29wcyBtdXN0IGJlIHBvc2l0aXZlXFxuXCYjMzQ7KTtcbiAzMjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzI2Olx0XHR9XG4gMzI3Olx0XHRpZiAoc2VhcmNoX2xvb3BzIFx1MDAzYz0gMCkge1xuIDMyODpcdFx0XHRwcl93YXJuKFwmIzM0O3NlYXJjaF9sb29wcyBtdXN0IGJlIHBvc2l0aXZlXFxuXCYjMzQ7KTtcbiAzMjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMwOlx0XHR9XG4gMzMxOlx0XHRpZiAobWF4X2VuZHBvaW50IFx1MDAzYyAyKSB7XG4gMzMyOlx0XHRcdHByX3dhcm4oXCYjMzQ7bWF4X2VuZHBvaW50IG11c3QgYmUgYXQgbGVhc3QgMlxcblwmIzM0Oyk7XG4gMzMzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMzNDpcdFx0fVxuIDMzNTpcdFxuIDMzNjpcdFx0bm9kZXMgPSBrbWFsbG9jX29ianMoc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSwgbm5vZGVzKTtcbiAzMzc6XHRcdGlmICghbm9kZXMpXG4gMzM4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMzOTpcdFxuIDM0MDpcdFx0cXVlcmllcyA9IGttYWxsb2NfYXJyYXkobnNlYXJjaGVzLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7XG4gMzQxOlx0XHRpZiAoIXF1ZXJpZXMpIHtcbiAzNDI6XHRcdFx0a2ZyZWUobm9kZXMpO1xuIDM0MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdHByYW5kb21fc2VlZF9zdGF0ZShcdTAwMjZybmQsIHNlZWQpO1xuIDM0NzpcdFxuIDM0ODpcdFx0YmFzaWNfY2hlY2soKTtcbiAzNDk6XHRcdHNlYXJjaF9jaGVjaygpO1xuIDM1MDpcdFx0aW50ZXJzZWN0aW9uX3JhbmdlX2NoZWNrKCk7XG4gMzUxOlx0XHRzcGFuX2l0ZXJhdGlvbl9jaGVjaygpO1xuIDM1MjpcdFxuIDM1MzpcdFx0a2ZyZWUocXVlcmllcyk7XG4gMzU0Olx0XHRrZnJlZShub2Rlcyk7XG4gMzU1Olx0XG4gMzU2Olx0XHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4gMzU3Olx0fVxuIDM1ODpcdFxuIDM1OTpcdHN0YXRpYyB2b2lkIGludGVydmFsX3RyZWVfdGVzdF9leGl0KHZvaWQpXG4gMzYwOlx0e1xuIDM2MTpcdFx0cHJpbnRrKEtFUk5fQUxFUlQgXCYjMzQ7dGVzdCBleGl0XFxuXCYjMzQ7KTtcbiAzNjI6XHR9XG4gMzYzOlx0XG4gMzY0Olx0bW9kdWxlX2luaXQoaW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQpXG4gMzY1Olx0bW9kdWxlX2V4aXQoaW50ZXJ2YWxfdHJlZV90ZXN0X2V4aXQpXG4gMzY2Olx0XG4gMzY3Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAzNjg6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O01pY2hlbCBMZXNwaW5hc3NlXCYjMzQ7KTtcbiAzNjk6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7SW50ZXJ2YWwgVHJlZSB0ZXN0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGludGVydmFsX3RyZWVfdGVzdC5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGBpbnRlcnZhbF90cmVlX3Rlc3QuY2AuIEl0JiMzOTtzIGEgc3RhbmRhbG9uZSB0ZXN0IG1vZHVsZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGZhY3QgdGhhdCBgaW50ZXJ2YWxfdHJlZV90ZXN0X2luaXRgIHJldHVybnMgYC1FQUdBSU5gIGFuZCBpcyBkZXNpZ25lZCB0byB1bmxvYWQgdGhlIG1vZHVsZSBpZiBpdCBmYWlscyBpcyBpbnRlcmVzdGluZy4gQnV0LCBpcyB0aGlzIGV2ZW4gYSBmdXp6aW5nIHRhcmdldD8gSXMgaXQgKm1lYW50KiB0byBiZSBoaXQgYnkgc3l6a2FsbGVyPyBTb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdmVyaWZ5IGlmIGludGVuZGVkLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhpcyBgREVGSU5FX01UUkVFKHRyZWUpYCBtYWNyby4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggY2hhbmdlZCBpdCBmcm9tIGBERUZJTkVfTVRSRUUodHJlZSlgIHRvIGRlY2xhcmluZyBpdCBhcyBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZTtgLiBBaGEhIFRoZSBgREVGSU5FX01UUkVFYCB3YXMgdXNlZCBsb2NhbGx5LCBpbiBgc3Bhbl9pdGVyYXRpb25fY2hlY2soKWAuIFNvIHRoaXMgaXMgYWJvdXQgaG93IHRoZSBgdHJlZWAgdmFyaWFibGUgaXMgZGVmaW5lZC4gVGhlIG1hY3JvIG5vdyBsb29rcyBsaWtlIHRoaXM6CgpgYGBjCiNkZWZpbmUgREVGSU5FX01UUkVFKG5hbWUpCQkJCQkJXAoJc3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7CQlcCglBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSkKYGBgCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2ssIGFuZCAqcmVhbGx5KiB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHBhdGNoLiBJIG5lZWQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8ga25vdyB3aHkgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgd2FzIGFkZGVkLiBMZXQmIzM5O3MgbGlzdCB0aGUgKmVudGlyZSogc2V0IG9mIGZpbGVzIHRoaXMgcGF0Y2ggdG91Y2hlcywgYmVjYXVzZSB0aGF0JiMzOTtzIGFsd2F5cyBjcnVjaWFsOgoKMS4gIGBpbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhgCjIuICBgaW5jbHVkZS9saW51eC9pZHIuaGAKMy4gIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGAKNC4gIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgCjUuICBgdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oYAo2LiAgYHRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jYAo3LiAgYHRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jYAoKT2theSwgdGhpcyB0b3VjaGVzIGNvbXBpbGVyIGhlYWRlcnMsIElEUiwgTWFwbGUgVHJlZSwgdGhlIHRlc3QgZmlsZSwgYW5kIHNvbWUgdG9vbHMuIFRoZSBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBhZGRpdGlvbiBpcyBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoYXQmIzM5O3MgdGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSwgaGlzdG9yeSwgYW5kIHNpbWlsYXIgb2NjdXJyZW5jZXMgb2YgdGhhdCBtYWNyby4gSWYgSSBjb3VsZCwgSSYjMzk7ZCBydW4gYSBgZ2l0IGxvZyAtbiA1YCBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0LCBzaW5jZSBJIGNhbiYjMzk7dCBkbyB0aGF0IGRpcmVjdGx5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIHNpbWlsYXIgY29tcGlsZS10aW1lIGNoZWNrcyB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4YCBkaXJlY3RvcnkgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uLCBob3BlZnVsbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVGSU5FXy4qU1RBVElDX1NUT1JBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgwOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEltcGxlbWVudGF0aW9uIG9mIGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyBiZWluZyB1dGlsaXplZCBhbmQgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIGp1bXAgc3RyYWlnaHQgaW50byBzZWFyY2hpbmcgdGhlIGdpdCBsb2cgYW5kIGNvbW1lbnRzIGZvciB0aGF0IHNwZWNpZmljIHRlcm0sIGJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHRoYXQgbWlnaHQgYmUgdG9vIGRpcmVjdC4gTGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNlYXJjaCBhIGJpdC4gUGVyaGFwcyBgREVGSU5FX0lEQWAgaXMgcmVsYXRlZCwgZ2l2ZW4gaXRzIG5hbWluZyBjb252ZW50aW9uLiBJdCYjMzk7cyBvZnRlbiBoZWxwZnVsIHRvIGNoZWNrIHdoZXJlIGEgbWFjcm8gaXMgKnVzZWQqIHJhdGhlciB0aGFuIGp1c3Qgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gVGhlcmVmb3JlLCBJIHdpbGwgY2hlY2sgd2hlcmUgYERFRklORV9JREFgIGlzIGJlaW5nIGNhbGxlZCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZDsgdGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWRlciBjb250ZXh0IHRoYXQgSSBtYXkgYmUgbWlzc2luZyBpZiBJIGp1c3Qgc2VhcmNoIGZvciB0aGUgc3BlY2lmaWMgdGVybS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgaG93IGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyB0eXBlb2YuKl9zdG9yYWdlX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNjcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA5MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UgTWFjcm8gYW5kIGl0cyBJbXBhY3QqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpYCBtYWNyby4uLiBJIHNlZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBlbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIGZvciBjZXJ0YWluIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgZGVmaW5lZCB3aXRoIGBERUZJTkVfSURBYCBvciBgREVGSU5FX01UUkVFYC4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCB0aGVzZSBmcm9tIGJlaW5nIGRlY2xhcmVkIGFzIGF1dG9tYXRpYyAoc3RhY2spIHZhcmlhYmxlcywgd2hpY2ggaXMgZ2VuZXJhbGx5IGluY29ycmVjdCB1c2FnZSBmb3IgdGhlc2UgbWFjcm9zIGluIHRoZSBMaW51eCBrZXJuZWwgY29udmVudGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgbWFjcm8gaXMgdGhpczogYHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgbmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSAmYW1wOyhuYW1lKTtgLiBJdCYjMzk7cyBhIGNvbXBpbGUtdGltZSBjaGVjaywgcHVyZWx5LiBJdCBkb2VzICpub3QqIGdlbmVyYXRlIGFueSBydW50aW1lIGluc3RydWN0aW9ucy4gSXQgZGVjbGFyZXMgYSBzdGF0aWMgcG9pbnRlciBuYW1lZCBgbmFtZSMjX3N0b3JhZ2VfY2hlY2tgIGluaXRpYWxpemVkIHRvIHRoZSBhZGRyZXNzIG9mIGBuYW1lYC4gVGhlIGBfX2Fsd2F5c191bnVzZWRgIGF0dHJpYnV0ZSB0ZWxscyB0aGUgY29tcGlsZXIgdG8gbm90IHdhcm4gaWYgdGhpcyBzdGF0aWMgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZCAod2hpY2ggaXQgaXNuJiMzOTt0LCBhcyB0aGUgY2hlY2sgaGFwcGVucyBhdCBjb21waWxlIHRpbWUpLiBJZiBzb21lb25lIHRyaWVzIHRvIHVzZSBgREVGSU5FX0lEQWAgb3IgYERFRklORV9NVFJFRWAgb24gdGhlIHN0YWNrLCB0aGlzIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbCwgdHJpZ2dlcmluZyBhbiAmIzM0O2luaXRpYWxpemVyIGVsZW1lbnQgaXMgbm90IGEgY29uc3RhbnQmIzM0OyBlcnJvci4KCk5vdywgdGhhdCBicmluZ3MgbWUgdG8gdGhlIHJlY2VudCBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AuIFRoZSB0ZXN0IHVzZWQgdG8gaW5pdGlhbGl6ZSBhIGBtYXBsZV90cmVlIHRyZWVgIHdpdGggYE1UUkVFX0lOSVQodHJlZSwgMClgLCB3aGljaCBleHBhbmRlZCB0byBzb21ldGhpbmcgbGlrZSBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZSA9IE1UUkVFX0lOSVQodHJlZSwgMCk7YC4gVGhhdCYjMzk7cyBiZWVuIHJlbW92ZWQgaW4gdGhlIHJlZmFjdG9yLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gSXQgdHVybnMgb3V0IHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtYXBsZV90cmVlYCBpcyAqcmVkdW5kYW50KiwgYmVjYXVzZSBpbnNpZGUgdGhlIGxvb3AgaW4gYHNwYW5faXRlcmF0aW9uX2NoZWNrYCwgZm9yIGV2ZXJ5IHJvdW5kLCBgbXRfaW5pdF9mbGFncygmYW1wO3RyZWUsIE1UX0ZMQUdTX0FMTE9DX1JBTkdFKWAgaXMgY2FsbGVkIGFueXdheSAqYmVmb3JlKiBgdHJlZWAgaXMgYWNjZXNzZWQgZm9yIHRoZSBmaXJzdCB0aW1lLiBUaGUgYG10cmVlX2Rlc3Ryb3lgIGlzIGNhbGxlZCBhZnRlciB0aGUgbG9vcCB0byBjbGVhbiBpdCB1cC4KClNvLCB0aGUgb3JpZ2luYWwgYD0gTVRSRUVfSU5JVCh0cmVlLCAwKWAgd2FzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnksIGFuZCByZW1vdmluZyBpdCBtYWtlcyBubyBkaWZmZXJlbmNlIGF0IHJ1bnRpbWUuIFRoaXMgd2hvbGUgZmlsZSBpcyBhICp0ZXN0IG1vZHVsZSosIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lOVEVSVkFMX1RSRUVfVEVTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0yMzk4PWNvbmZpZyBSRUVEX1NPTE9NT05fVEVTVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTI0MDktXG5saWIvS2NvbmZpZy5kZWJ1ZzoyNDEwOmNvbmZpZyBJTlRFUlZBTF9UUkVFX1RFU1RcbmxpYi9LY29uZmlnLmRlYnVnLTI0MTEtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlcnZhbCB0cmVlIHRlc3RcJiMzNDtcbi0tXG5saWIvTWFrZWZpbGU9MjkyPW9iai0kKENPTkZJR19SQlRSRUVfVEVTVCkgJiM0Mzs9IHJidHJlZV90ZXN0Lm9cbmxpYi9NYWtlZmlsZToyOTM6b2JqLSQoQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCkgJiM0Mzs9IGludGVydmFsX3RyZWVfdGVzdC5vXG5saWIvTWFrZWZpbGUtMjk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcyBkZWJ1Z2dpbmcgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI0MTAuIFRoYXQgbG9jYXRpb24gdHlwaWNhbGx5IGhvdXNlcyBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgdmFyaW91cyBkZWJ1Zy1yZWxhdGVkIGZlYXR1cmVzIHdpdGhpbiB0aGUga2VybmVsLCBzbyBpdCYjMzk7cyBhIHByaW1lIHN1c3BlY3QgZm9yIGZpbmRpbmcgdGhlIHJlbGV2YW50IG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGJlaGF2aW9yLiBJdCYjMzk7cyBhIHN5c3RlbWF0aWMgYXBwcm9hY2g6IHN0YXJ0IHdpdGggdGhlIGxpa2VseSBjYW5kaWRhdGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCB0aGUgYXJlYSB0aGF0IEkgYW50aWNpcGF0ZSB3b3VsZCBiZSBtb3N0IHJlbGV2YW50LiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHNldCB1cCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQwNTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzZWxmLXRlc3QgZnVuY3Rpb24gb2YgcnNsaWIgYXQgYm9vdCxcbjI0MDY6XHRcdCAgb3IgYXQgbW9kdWxlIGxvYWQgdGltZS5cbjI0MDc6XHRcbjI0MDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjI0MDk6XHRcbjI0MTA6XHRjb25maWcgSU5URVJWQUxfVFJFRV9URVNUXG4yNDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlcnZhbCB0cmVlIHRlc3RcJiMzNDtcbjI0MTI6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG4yNDEzOlx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuMjQxNDpcdFx0aGVscFxuMjQxNTpcdFx0ICBBIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnRlcnZhbCB0cmVlIGxpYnJhcnlcbjI0MTY6XHRcbjI0MTc6XHRjb25maWcgUEVSQ1BVX1RFU1RcbjI0MTg6XHRcdHRyaXN0YXRlIFwmIzM0O1BlciBjcHUgb3BlcmF0aW9ucyB0ZXN0XCYjMzQ7XG4yNDE5Olx0XHRkZXBlbmRzIG9uIG0gXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTFxuMjQyMDpcdFx0aGVscFxuMjQyMTpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gYnVpbGQgdGVzdCBtb2R1bGUgd2hpY2ggdmFsaWRhdGVzIHBlci1jcHVcbjI0MjI6XHRcdCAgb3BlcmF0aW9ucy5cbjI0MjM6XHRcbjI0MjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjI0MjU6XHRcbjI0MjY6XHRjb25maWcgQVRPTUlDNjRfU0VMRlRFU1RcbjI0Mjc6XHRcdHRyaXN0YXRlIFwmIzM0O1BlcmZvcm0gYW4gYXRvbWljNjRfdCBzZWxmLXRlc3RcJiMzNDtcbjI0Mjg6XHRcdGhlbHBcbjI0Mjk6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgdGhlIGF0b21pYzY0X3QgZnVuY3Rpb25zIGF0IGJvb3Qgb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyNjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBJbnRlcnZhbCBUcmVlIFRlc3QgYW5kIFdvcnRoRnV6emluZyBEZXRlcm1pbmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0JiMzOTtzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuIEZpcnN0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYElOVEVSVkFMX1RSRUVfVEVTVGAuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiZW5jaG1hcmssIGJ1aWx0IGVpdGhlciBhcyBhIG1vZHVsZSBvciBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBgV29ydGhGdXp6aW5nYCBiZWNhdXNlIHRoaXMgdGVzdCBpcyBpbiBgbGliL2AuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc2F5cyB0aGUgZm9sbG93aW5nOiBgVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5gCgpTbywgaXMgaXQ/CgpPa2F5LCBzbyBsZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGU6IGBtb2R1bGVfaW5pdChpbnRlcnZhbF90cmVlX3Rlc3RfaW5pdClgIHNheXMgdGhhdCBpdCYjMzk7cyBhIG1vZHVsZS4gQnV0IGV2ZW4gYmV0dGVyIHRoYW4gdGhhdCwgaXQgaXMgaW4gYGxpYi9gIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIG5vdCB1c2VyLXNwYWNlLgoKQWgsIHRoZSB0ZXN0IGltbWVkaWF0ZWx5IHVubG9hZHMgaXRzZWxmIHdpdGggYC1FQUdBSU5gLiBObyBzeXNjYWxscywgbm90aGluZyBleHBvc2VkLiBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYERFRklORV9NVFJFRSh0cmVlKWAgd2l0aCBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZTtgLiBOb3csIHRoaXMgY2hhbmdlIHdhcyBkb25lIHRvIG1ha2UgdGhpcyB0ZXN0IGNvbXBpbGUgd2hlbiBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCB3YXMgYWRkZWQgdG8gYERFRklORV9NVFJFRWAuCgpPa2F5LCBzbyBsb29raW5nIHRocm91Z2ggdGhlIGNoYW5nZSwgYE1BX1NUQVRFKG1hcywgJmFtcDt0cmVlLCAwLCAwKWAgc2V0cyB0aGUgbWFwbGUgdHJlZSBzdGF0ZSB0byBwb2ludCB0byB0aGUgYWRkcmVzcyBvZiBgdHJlZWAsIGJ1dCBkb2VzbiYjMzk7dCBkZXJlZmVyZW5jZSBpdC4gU28sIHRoZXJlIGlzIG5vIGlzc3VlIG9mIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgdW5pbml0aWFsaXplZC4KClRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IGlzOiBXYXMgdGhlIGNoYW5nZSBtYWRlIG9uIGV4ZWN1dGFibGUgY29kZT8KCkkgbmVlZCB0byByZWZlciB0byBzZWN0aW9uIDMgbm93LiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBydW50aW1lIGFzc2VydGlvbnMsIHN1Y2ggYXMgYFdBUk5fT04qYCBvciBgQlVHX09OKmAsIHdhcnJhbnQgZnV6emluZy4gQnV0IHRoZSBrZXkgdGhpbmcgaXMgdGhhdCBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyBOT1QgYSBydW50aW1lIGFzc2VydGlvbi4gSXQmIzM5O3MgYSAqY29tcGlsZS10aW1lKiBhc3NlcnRpb24uIEl0IHByb2R1Y2VzIG5vIGFjdHVhbCBleGVjdXRhYmxlIGNvZGUuIEl0JiMzOTtzIGEgY29tcGlsZS10aW1lIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGUgdmFyaWFibGUgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiBUaGUgY2hhbmdlIGFmZmVjdHMgaW5jbHVkZSBmaWxlcyAoYGNvbXBpbGVyLmhgLCBgaWRyLmhgLCBhbmQgYG1hcGxlX3RyZWUuaGApLCBhbmQgdXNlci1zcGFjZSB0ZXN0cywgYnV0IHdoYXQgYWJvdXQgdGhlIGtlcm5lbD8KCkxvb2tpbmcgYmFjayBhdCB0aGUgc2VjdGlvbnMsIEkgbmVlZCB0byBzZWUgaWYgdGhlIGNoYW5nZXMgYXJlICpyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlKi4gSXMgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbW9kaWZ5aW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGU/IEkgbmVlZCB0byBjaGVjazogd2hhdCBjb2RlIGlzIGdlbmVyYXRlZD8gU2luY2UgdGhpcyBpcyBhIGNoZWNrIGF0IGNvbXBpbGUgdGltZSB1c2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgaXQgd2lsbCBub3QgcHJvZHVjZSBhbnkgZXhlY3V0YWJsZSBjb2RlLiBTbyBpdCYjMzk7cyBub3QgYSBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQuCgpBbmQgdGhlbiBJIGxvb2sgYXQgdGhlIHdvcmRpbmcgZnJvbSB0aGUgcHJvbXB0LiBJdCBzYXlzOiAmIzM0O05vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6IFsuLi5dIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OyBTbywgYmVjYXVzZSB0aGUgY2hhbmdlIGlzIG5vdCBpbiBleGVjdXRhYmxlIGNvZGUgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMsIGl0IGlzIHNhZmUgdG8gYXNzdW1lIHRoaXMgaXMgbm90IHNvbWV0aGluZyBJIG5lZWQgdG8gZXZhbHVhdGUuIEZpbmFsbHksIGl0IG1ha2VzIHN1cmUgdG8gYXNrIGFib3V0IGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgOiBEb2VzIHN5emthbGxlciBmdXp6IGBDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUYD8gR2l2ZW4gd2hhdCBJIGhhdmUgZGVzY3JpYmVkIEkgd291bGQgYXNzdW1lIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVGSU5FX0lEQVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEzMSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jPTgzPXN0YXRpYyBlbnVtIGNwdWhwX3N0YXRlIGNwdWhwX21tZGNfc3RhdGU7XG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6ODQ6c3RhdGljIERFRklORV9JREEobW1kY19pZGEpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTg1LVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIzODg9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI1ODEtXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoyNTgyOnN0YXRpYyBERUZJTkVfSURBKGxwaWRfaW51c2UpO1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjU4My1zdGF0aWMgdW5zaWduZWQgbG9uZyBucl9scGlkcztcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0yNi1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjI3OnN0YXRpYyBERUZJTkVfSURBKG1tdV9jb250ZXh0X2lkYSk7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0yOC1cbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NTg9c3RhdGljIHUzMiB0ZHhfbnJfZ3Vlc3Rfa2V5aWRzIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01OS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo2MDpzdGF0aWMgREVGSU5FX0lEQSh0ZHhfZ3Vlc3Rfa2V5aWRfcG9vbCk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNjEtXG4tLVxuYmxvY2svYmxrLWNvcmUuYz02Mj1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGJsb2NrX3JxX2luc2VydCk7XG5ibG9jay9ibGstY29yZS5jLTYzLVxuYmxvY2svYmxrLWNvcmUuYzo2NDpzdGF0aWMgREVGSU5FX0lEQShibGtfcXVldWVfaWRhKTtcbmJsb2NrL2Jsay1jb3JlLmMtNjUtXG4tLVxuYmxvY2svYnNnLmM9MzU9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnNnX2RldmljZSAqdG9fYnNnX2RldmljZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmJsb2NrL2JzZy5jLTQyLVxuYmxvY2svYnNnLmM6NDM6c3RhdGljIERFRklORV9JREEoYnNnX21pbm9yX2lkYSk7XG5ibG9jay9ic2cuYy00NC1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGJzZ19jbGFzcztcbi0tXG5ibG9jay9nZW5oZC5jPTUzPXN0YXRpYyBhdG9taWM2NF90IGRpc2tzZXE7XG4tLVxuYmxvY2svZ2VuaGQuYy01Ni0jZGVmaW5lIE5SX0VYVF9ERVZUXHRcdCgxIFx1MDAzY1x1MDAzYyBNSU5PUkJJVFMpXG5ibG9jay9nZW5oZC5jOjU3OnN0YXRpYyBERUZJTkVfSURBKGV4dF9kZXZ0X2lkYSk7XG5ibG9jay9nZW5oZC5jLTU4LVxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jPTgzPXN0YXRpYyBib29sIGxpbmtfdXA7XG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYzo4NDpzdGF0aWMgREVGSU5FX0lEQShxYWljX3VzcnMpO1xuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtODUtXG4tLVxuZHJpdmVycy9hY3BpL3Bmcl90ZWxlbWV0cnkuYz02OD1zdGF0aWMgY29uc3QgZ3VpZF90IHBmcnRfbG9nX2d1aWQgPVxuLS1cbmRyaXZlcnMvYWNwaS9wZnJfdGVsZW1ldHJ5LmMtNzEtXG5kcml2ZXJzL2FjcGkvcGZyX3RlbGVtZXRyeS5jOjcyOnN0YXRpYyBERUZJTkVfSURBKHBmcnRfbG9nX2lkYSk7XG5kcml2ZXJzL2FjcGkvcGZyX3RlbGVtZXRyeS5jLTczLVxuLS1cbmRyaXZlcnMvYWNwaS9wZnJfdXBkYXRlLmM9ODE9c3RydWN0IHBmcnVfZGV2aWNlIHtcbi0tXG5kcml2ZXJzL2FjcGkvcGZyX3VwZGF0ZS5jLTg2LVxuZHJpdmVycy9hY3BpL3Bmcl91cGRhdGUuYzo4NzpzdGF0aWMgREVGSU5FX0lEQShwZnJ1X2lkYSk7XG5kcml2ZXJzL2FjcGkvcGZyX3VwZGF0ZS5jLTg4LVxuLS1cbmRyaXZlcnMvYWNwaS9wbGF0Zm9ybV9wcm9maWxlLmM9NDM9c3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKHByb2ZpbGVfbmFtZXMpID09IFBMQVRGT1JNX1BST0ZJTEVfTEFTVCk7XG5kcml2ZXJzL2FjcGkvcGxhdGZvcm1fcHJvZmlsZS5jLTQ0LVxuZHJpdmVycy9hY3BpL3BsYXRmb3JtX3Byb2ZpbGUuYzo0NTpzdGF0aWMgREVGSU5FX0lEQShwbGF0Zm9ybV9wcm9maWxlX2lkYSk7XG5kcml2ZXJzL2FjcGkvcGxhdGZvcm1fcHJvZmlsZS5jLTQ2LVxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJmcy5jPTU4PXN0YXRpYyBERUZJTkVfTVVURVgoYmluZGVyZnNfbWlub3JzX211dGV4KTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJmcy5jOjU5OnN0YXRpYyBERUZJTkVfSURBKGJpbmRlcmZzX21pbm9ycyk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyZnMuYy02MC1cbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyZnMuYz00NT1zdGF0aWMgREVGSU5FX01VVEVYKGJpbmRlcmZzX21pbm9yc19tdXRleCk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyZnMuYzo0NjpzdGF0aWMgREVGSU5FX0lEQShiaW5kZXJmc19taW5vcnMpO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlcmZzLmMtNDctXG4tLVxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYz04MD1zdGF0aWMgdTY0IGF0YV9kZXZfZ2V0X3F1aXJrX3ZhbHVlKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHU2NCBxdWlyayk7XG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jLTgxLVxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYzo4MjpzdGF0aWMgREVGSU5FX0lEQShhdGFfaWRhKTtcbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMtODMtXG4tLVxuZHJpdmVycy9hdGEvcGF0YV9wYXJwb3J0L3BhdGFfcGFycG9ydC5jPTE0PXN0YXRpYyBERUZJTkVfSURSKHByb3RvY29scyk7XG5kcml2ZXJzL2F0YS9wYXRhX3BhcnBvcnQvcGF0YV9wYXJwb3J0LmM6MTU6c3RhdGljIERFRklORV9JREEocGF0YV9wYXJwb3J0X2J1c19kZXZfaWRzKTtcbmRyaXZlcnMvYXRhL3BhdGFfcGFycG9ydC9wYXRhX3BhcnBvcnQuYy0xNi1zdGF0aWMgREVGSU5FX01VVEVYKHBpX211dGV4KTtcbi0tXG5kcml2ZXJzL2F1eGRpc3BsYXkvbGluZS1kaXNwbGF5LmM9MzYyPV9fQVRUUklCVVRFX0dST1VQUyhsaW5lZGlzcCk7XG5kcml2ZXJzL2F1eGRpc3BsYXkvbGluZS1kaXNwbGF5LmMtMzYzLVxuZHJpdmVycy9hdXhkaXNwbGF5L2xpbmUtZGlzcGxheS5jOjM2NDpzdGF0aWMgREVGSU5FX0lEQShsaW5lZGlzcF9pZCk7XG5kcml2ZXJzL2F1eGRpc3BsYXkvbGluZS1kaXNwbGF5LmMtMzY1LVxuLS1cbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jLTM5LS8qIEZvciBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2UgSURzICovXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYzo0MDpzdGF0aWMgREVGSU5FX0lEQShwbGF0Zm9ybV9kZXZpZF9pZGEpO1xuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMtNDEtXG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jPTY5PXN0YXRpYyBzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSBkZWxldGVkX3dzID0ge1xuLS1cbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy03My1cbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYzo3NDpzdGF0aWMgREVGSU5FX0lEQSh3YWtldXBfaWRhKTtcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy03NS1cbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1kZWJ1Z2ZzLmM9MTk9c3RydWN0IHJlZ21hcF9kZWJ1Z2ZzX25vZGUge1xuLS1cbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWRlYnVnZnMuYy0yMy1cbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWRlYnVnZnMuYzoyNDpzdGF0aWMgREVGSU5FX0lEQShkdW1teV9pZGEpO1xuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtZGVidWdmcy5jLTI1LXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpyZWdtYXBfZGVidWdmc19yb290O1xuLS1cbmRyaXZlcnMvYmFzZS9zb2MuYy0xOC1cbmRyaXZlcnMvYmFzZS9zb2MuYzoxOTpzdGF0aWMgREVGSU5FX0lEQShzb2NfaWRhKTtcbmRyaXZlcnMvYmFzZS9zb2MuYy0yMC1cbi0tXG5kcml2ZXJzL2Jhc2Uvc3dub2RlLmM9Mjc9c3RydWN0IHN3bm9kZSB7XG4tLVxuZHJpdmVycy9iYXNlL3N3bm9kZS5jLTQyLVxuZHJpdmVycy9iYXNlL3N3bm9kZS5jOjQzOnN0YXRpYyBERUZJTkVfSURBKHN3bm9kZV9yb290X2lkcyk7XG5kcml2ZXJzL2Jhc2Uvc3dub2RlLmMtNDQtc3RhdGljIHN0cnVjdCBrc2V0ICpzd25vZGVfa3NldDtcbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM9MTA0PXN0YXRpYyB1MzIgY3B1X3VzZVtOUl9DUFVTXTtcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0xMDUtXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM6MTA2OnN0YXRpYyBERUZJTkVfSURBKHJzc2RfaW5kZXhfaWRhKTtcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0xMDctXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NzA9c3RhdGljIGludCBudWxsX21ham9yO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NzE6c3RhdGljIERFRklORV9JREEobnVsbGJfaW5kZXhlcyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03Mi1zdGF0aWMgc3RydWN0IGJsa19tcV90YWdfc2V0IHRhZ19zZXQ7XG4tLVxuZHJpdmVycy9ibG9jay9yYmQuYz00Nzg9c3RhdGljIGludCByYmRfbWFqb3I7XG5kcml2ZXJzL2Jsb2NrL3JiZC5jOjQ3OTpzdGF0aWMgREVGSU5FX0lEQShyYmRfZGV2X2lkX2lkYSk7XG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTQ4MC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYz0yND1zdGF0aWMgaW50IHJuYmRfY2xpZW50X21ham9yO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtY2x0LmM6MjU6c3RhdGljIERFRklORV9JREEoaW5kZXhfaWRhKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jLTI2LXN0YXRpYyBERUZJTkVfTVVURVgoc2Vzc19sb2NrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz00ND1zdGF0aWMgaW50IG1ham9yO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6NDU6c3RhdGljIERFRklORV9JREEodmRfaW5kZXhfaWRhKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTQ2LVxuLS1cbmRyaXZlcnMvYnVzL21oaS9lcC9tYWluLmMtMjEtXG5kcml2ZXJzL2J1cy9taGkvZXAvbWFpbi5jOjIyOnN0YXRpYyBERUZJTkVfSURBKG1oaV9lcF9jbnRybF9pZGEpO1xuZHJpdmVycy9idXMvbWhpL2VwL21haW4uYy0yMy1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMjQtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MjU6c3RhdGljIERFRklORV9JREEobWhpX2NvbnRyb2xsZXJfaWRhKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0yNi1cbi0tXG5kcml2ZXJzL2NkeC9jZHguYy03OC0vKiBJREEgZm9yIENEWCBjb250cm9sbGVycyByZWdpc3RlcmVkIHdpdGggdGhlIENEWCBidXMgKi9cbmRyaXZlcnMvY2R4L2NkeC5jOjc5OnN0YXRpYyBERUZJTkVfSURBKGNkeF9jb250cm9sbGVyX2lkYSk7XG5kcml2ZXJzL2NkeC9jZHguYy04MC0vKiBMb2NrIHRvIHByb3RlY3QgY29udHJvbGxlciBvcHMgKi9cbi0tXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYy0xOC1cbmRyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jOjE5OnN0YXRpYyBERUZJTkVfSURBKHJuZ19pbmRleF9pZGEpO1xuZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aXJ0aW8tcm5nLmMtMjAtXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM9MzA2Nj1zdGF0aWMgc3RydWN0IGJtY19kZXZpY2UgKmlwbWlfZmluZF9ibWNfcHJvZF9kZXZfaWQoXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtMzA4NC1cbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jOjMwODU6c3RhdGljIERFRklORV9JREEoaXBtaV9ibWNfaWRhKTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTMwODYtXG4tLVxuZHJpdmVycy9jaGFyL21pc2MuYz01OD1zdGF0aWMgREVGSU5FX01VVEVYKG1pc2NfbXR4KTtcbi0tXG5kcml2ZXJzL2NoYXIvbWlzYy5jLTYyLSAqL1xuZHJpdmVycy9jaGFyL21pc2MuYzo2MzpzdGF0aWMgREVGSU5FX0lEQShtaXNjX21pbm9yc19pZGEpO1xuZHJpdmVycy9jaGFyL21pc2MuYy02NC1cbi0tXG5kcml2ZXJzL2NoYXIvcHBkZXYuYz04Nz1zdGF0aWMgc3RydWN0IGRldmljZSAqZGV2aWNlc1tQQVJQT1JUX01BWF07XG5kcml2ZXJzL2NoYXIvcHBkZXYuYy04OC1cbmRyaXZlcnMvY2hhci9wcGRldi5jOjg5OnN0YXRpYyBERUZJTkVfSURBKGlkYV9pbmRleCk7XG5kcml2ZXJzL2NoYXIvcHBkZXYuYy05MC1cbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz02ND1zdHJ1Y3QgY29uc29sZSB7XG4tLVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtODMtXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYzo4NDpzdGF0aWMgREVGSU5FX0lEQSh2dGVybW5vX2lkYSk7XG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy04NS1cbi0tXG5kcml2ZXJzL2Nsay9zcGFjZW1pdC9jY3VfY29tbW9uLmMtMTItXG5kcml2ZXJzL2Nsay9zcGFjZW1pdC9jY3VfY29tbW9uLmM6MTM6c3RhdGljIERFRklORV9JREEoYXV4aWxpYXJ5X2lkcyk7XG5kcml2ZXJzL2Nsay9zcGFjZW1pdC9jY3VfY29tbW9uLmMtMTQtc3RhdGljIGludCBzcGFjZW1pdF9jY3VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY291bnRlci9jb3VudGVyLWNvcmUuYy0yNy0vKiBQcm92aWRlcyBhIHVuaXF1ZSBJRCBmb3IgZWFjaCBjb3VudGVyIGRldmljZSAqL1xuZHJpdmVycy9jb3VudGVyL2NvdW50ZXItY29yZS5jOjI4OnN0YXRpYyBERUZJTkVfSURBKGNvdW50ZXJfaWRhKTtcbmRyaXZlcnMvY291bnRlci9jb3VudGVyLWNvcmUuYy0yOS1cbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jPTIyPXN0YXRpYyBpbnQgY3hsX21lbV9tYWpvcjtcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6MjM6c3RhdGljIERFRklORV9JREEoY3hsX21lbWRldl9pZGEpO1xuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy0yNC1cbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BtZW0uYy0yMy1cbmRyaXZlcnMvY3hsL2NvcmUvcG1lbS5jOjI0OnN0YXRpYyBERUZJTkVfSURBKGN4bF9udmRpbW1fYnJpZGdlX2lkYSk7XG5kcml2ZXJzL2N4bC9jb3JlL3BtZW0uYy0yNS1cbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0zMy1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jOjM0OnN0YXRpYyBERUZJTkVfSURBKGN4bF9wb3J0X2lkYSk7XG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0zNS1zdGF0aWMgREVGSU5FX1hBUlJBWShjeGxfcm9vdF9idXNlcyk7XG4tLVxuZHJpdmVycy9kYXgvc3VwZXIuYz00MT1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpkYXhfbW50O1xuZHJpdmVycy9kYXgvc3VwZXIuYzo0MjpzdGF0aWMgREVGSU5FX0lEQShkYXhfbWlub3JfaWRhKTtcbmRyaXZlcnMvZGF4L3N1cGVyLmMtNDMtc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkYXhfY2FjaGUgX19yZWFkX21vc3RseTtcbi0tXG5kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYz02MD1zdGF0aWMgREVGSU5FX01VVEVYKGRtYV9saXN0X211dGV4KTtcbmRyaXZlcnMvZG1hL2RtYWVuZ2luZS5jOjYxOnN0YXRpYyBERUZJTkVfSURBKGRtYV9pZGEpO1xuZHJpdmVycy9kbWEvZG1hZW5naW5lLmMtNjItc3RhdGljIExJU1RfSEVBRChkbWFfZGV2aWNlX2xpc3QpO1xuLS1cbmRyaXZlcnMvZG1hL2lkeGQvY2Rldi5jPTIwPXN0cnVjdCBpZHhkX2NkZXZfY29udGV4dCB7XG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9jZGV2LmMtMjktICovXG5kcml2ZXJzL2RtYS9pZHhkL2NkZXYuYzozMDpzdGF0aWMgREVGSU5FX0lEQShmaWxlX2lkYSk7XG5kcml2ZXJzL2RtYS9pZHhkL2NkZXYuYy0zMS1cbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYz00MD1ib29sIHN1cHBvcnRfZW5xY21kO1xuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM6NDE6REVGSU5FX0lEQShpZHhkX2lkYSk7XG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy00Mi1cbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9Mjg9c3RhdGljIFJBV19OT1RJRklFUl9IRUFEKGRwbGxfbm90aWZpZXJfY2hhaW4pO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI5OnN0YXRpYyBERUZJTkVfSURBKGRwbGxfcGluX2lkeF9pZGEpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMwLVxuLS1cbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi5jPTI0MD1zdGF0aWMgc3RydWN0IGNsYXNzICpleHRjb25fY2xhc3M7XG5kcml2ZXJzL2V4dGNvbi9leHRjb24uYy0yNDEtXG5kcml2ZXJzL2V4dGNvbi9leHRjb24uYzoyNDI6c3RhdGljIERFRklORV9JREEoZXh0Y29uX2Rldl9pZHMpO1xuZHJpdmVycy9leHRjb24vZXh0Y29uLmMtMjQzLXN0YXRpYyBMSVNUX0hFQUQoZXh0Y29uX2Rldl9saXN0KTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvYnVzLmMtMTktXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvYnVzLmM6MjA6c3RhdGljIERFRklORV9JREEoZmZhX2J1c19pZCk7XG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvYnVzLmMtMjEtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9idXMuYz0yMj1FWFBPUlRfU1lNQk9MX0dQTChzY21pX3JlcXVlc3RlZF9kZXZpY2VzX25oKTtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvYnVzLmMtMjMtXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2J1cy5jOjI0OnN0YXRpYyBERUZJTkVfSURBKHNjbWlfYnVzX2lkKTtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvYnVzLmMtMjUtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9kcml2ZXIuYy01MS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvZHJpdmVyLmM6NTI6c3RhdGljIERFRklORV9JREEoc2NtaV9pZCk7XG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2RyaXZlci5jLTUzLVxuLS1cbmRyaXZlcnMvZnBnYS9kZmwuYz0yMzU9RVhQT1JUX1NZTUJPTF9HUEwoZGZsX2ZwZ2FfY2hlY2tfcG9ydF9pZCk7XG5kcml2ZXJzL2ZwZ2EvZGZsLmMtMjM2LVxuZHJpdmVycy9mcGdhL2RmbC5jOjIzNzpzdGF0aWMgREVGSU5FX0lEQShkZmxfZGV2aWNlX2lkYSk7XG5kcml2ZXJzL2ZwZ2EvZGZsLmMtMjM4LVxuLS1cbmRyaXZlcnMvZnBnYS9mcGdhLWJyaWRnZS5jLTE1LVxuZHJpdmVycy9mcGdhL2ZwZ2EtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZnBnYV9icmlkZ2VfaWRhKTtcbmRyaXZlcnMvZnBnYS9mcGdhLWJyaWRnZS5jLTE3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgZnBnYV9icmlkZ2VfY2xhc3M7XG4tLVxuZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMtMjAtXG5kcml2ZXJzL2ZwZ2EvZnBnYS1tZ3IuYzoyMTpzdGF0aWMgREVGSU5FX0lEQShmcGdhX21ncl9pZGEpO1xuZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMtMjItc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBmcGdhX21ncl9jbGFzcztcbi0tXG5kcml2ZXJzL2ZwZ2EvZnBnYS1yZWdpb24uYy0xNy1cbmRyaXZlcnMvZnBnYS9mcGdhLXJlZ2lvbi5jOjE4OnN0YXRpYyBERUZJTkVfSURBKGZwZ2FfcmVnaW9uX2lkYSk7XG5kcml2ZXJzL2ZwZ2EvZnBnYS1yZWdpb24uYy0xOS1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGZwZ2FfcmVnaW9uX2NsYXNzO1xuLS1cbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM9NDY9c3RhdGljIGNvbnN0IGludCBlbmdpbmVfcGFnZV9zaXplID0gMHg0MDA7XG4tLVxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYy04NC1cbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM6ODU6c3RhdGljIERFRklORV9JREEobWFzdGVyX2lkYSk7XG5kcml2ZXJzL2ZzaS9mc2ktY29yZS5jLTg2LVxuLS1cbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM9OTA9c3RhdGljIGRldl90IGZzaV9iYXNlX2RldjtcbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM6OTE6c3RhdGljIERFRklORV9JREEoZnNpX21pbm9yX2lkYSk7XG5kcml2ZXJzL2ZzaS9mc2ktY29yZS5jLTkyLSNkZWZpbmUgRlNJX0NIQVJfTUFYX0RFVklDRVNcdDB4MTAwMFxuLS1cbmRyaXZlcnMvZnNpL2ZzaS1vY2MuYz02OD1zdHJ1Y3Qgb2NjX2NsaWVudCB7XG4tLVxuZHJpdmVycy9mc2kvZnNpLW9jYy5jLTc3LVxuZHJpdmVycy9mc2kvZnNpLW9jYy5jOjc4OnN0YXRpYyBERUZJTkVfSURBKG9jY19pZGEpO1xuZHJpdmVycy9mc2kvZnNpLW9jYy5jLTc5LVxuLS1cbmRyaXZlcnMvZndjdGwvbWFpbi5jPTIyPXN0YXRpYyBkZXZfdCBmd2N0bF9kZXY7XG5kcml2ZXJzL2Z3Y3RsL21haW4uYzoyMzpzdGF0aWMgREVGSU5FX0lEQShmd2N0bF9pZGEpO1xuZHJpdmVycy9md2N0bC9tYWluLmMtMjQtc3RhdGljIHVuc2lnbmVkIGxvbmcgZndjdGxfdGFpbnRlZDtcbi0tXG5kcml2ZXJzL2duc3MvY29yZS5jLTI2LVxuZHJpdmVycy9nbnNzL2NvcmUuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShnbnNzX21pbm9ycyk7XG5kcml2ZXJzL2duc3MvY29yZS5jLTI4LXN0YXRpYyBkZXZfdCBnbnNzX2ZpcnN0O1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWV4YXIuYy0zMS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWV4YXIuYzozMjpzdGF0aWMgREVGSU5FX0lEQShpZGFfaW5kZXgpO1xuZHJpdmVycy9ncGlvL2dwaW8tZXhhci5jLTMzLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1wc3NlLmM9ODQ9TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdwaW9fbXBzc2VfdGFibGUpO1xuZHJpdmVycy9ncGlvL2dwaW8tbXBzc2UuYy04NS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1wc3NlLmM6ODY6c3RhdGljIERFRklORV9JREEoZ3Bpb19tcHNzZV9pZGEpO1xuZHJpdmVycy9ncGlvL2dwaW8tbXBzc2UuYy04Ny1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1zaW0uYy00Mi1cbmRyaXZlcnMvZ3Bpby9ncGlvLXNpbS5jOjQzOnN0YXRpYyBERUZJTkVfSURBKGdwaW9fc2ltX2lkYSk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1zaW0uYy00NC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby12aXJ0dXNlci5jLTM5LVxuZHJpdmVycy9ncGlvL2dwaW8tdmlydHVzZXIuYzo0MDpzdGF0aWMgREVGSU5FX0lEQShncGlvX3ZpcnR1c2VyX2lkYSk7XG5kcml2ZXJzL2dwaW8vZ3Bpby12aXJ0dXNlci5jLTQxLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpncGlvX3ZpcnR1c2VyX2RiZ19yb290O1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvbGliLXNoYXJlZC5jPTYzPXN0YXRpYyBMSVNUX0hFQUQoZ3Bpb19zaGFyZWRfbGlzdCk7XG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zaGFyZWQuYzo2NDpzdGF0aWMgREVGSU5FX0lEQShncGlvX3NoYXJlZF9pZGEpO1xuZHJpdmVycy9ncGlvL2dwaW9saWItc2hhcmVkLmMtNjUtXG4tLVxuZHJpdmVycy9ncGlvL2dwaW9saWIuYy01Ni0vKiBEZXZpY2UgYW5kIGNoYXIgZGV2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gKi9cbmRyaXZlcnMvZ3Bpby9ncGlvbGliLmM6NTc6c3RhdGljIERFRklORV9JREEoZ3Bpb19pZGEpO1xuZHJpdmVycy9ncGlvL2dwaW9saWIuYy01OC1zdGF0aWMgZGV2X3QgZ3Bpb19kZXZ0IF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1icmlkZ2UuYy0xNS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYXV4LWJyaWRnZS5jOjE2OnN0YXRpYyBERUZJTkVfSURBKGRybV9hdXhfYnJpZGdlX2lkYSk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1icmlkZ2UuYy0xNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1ocGQtYnJpZGdlLmMtMTUtXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1ocGQtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZHJtX2F1eF9ocGRfYnJpZGdlX2lkYSk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1ocGQtYnJpZGdlLmMtMTctXG4tLVxuZHJpdmVycy9oaWQvYW1kLXNmaC1oaWQvYW1kX3NmaF9wY2llLmM9MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphbWRfc2ZoX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvaGlkL2FtZC1zZmgtaGlkL2FtZF9zZmhfcGNpZS5jLTM4NC1cbmRyaXZlcnMvaGlkL2FtZC1zZmgtaGlkL2FtZF9zZmhfcGNpZS5jOjM4NTpzdGF0aWMgREVGSU5FX0lEQShzZmhfdG1faWRhKTtcbmRyaXZlcnMvaGlkL2FtZC1zZmgtaGlkL2FtZF9zZmhfcGNpZS5jLTM4Ni1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtbmludGVuZG8uYz0yMjc3PXN0YXRpYyBpbnQgam95Y29uX2hvbWVfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtbmludGVuZG8uYy0yMjk1LVxuZHJpdmVycy9oaWQvaGlkLW5pbnRlbmRvLmM6MjI5NjpzdGF0aWMgREVGSU5FX0lEQShuaW50ZW5kb19wbGF5ZXJfaWRfYWxsb2NhdG9yKTtcbmRyaXZlcnMvaGlkL2hpZC1uaW50ZW5kby5jLTIyOTctXG4tLVxuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYz0xODc9c3RydWN0IHNoaWVsZF9kZXZpY2Uge1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1udmlkaWEtc2hpZWxkLmMtMjAzLSAqL1xuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYzoyMDQ6c3RhdGljIERFRklORV9JREEodGh1bmRlcnN0cmlrZV9pZGEpO1xuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYy0yMDUtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXBsYXlzdGF0aW9uLmM9MjY9c3RhdGljIExJU1RfSEVBRChwc19kZXZpY2VzX2xpc3QpO1xuZHJpdmVycy9oaWQvaGlkLXBsYXlzdGF0aW9uLmMtMjctXG5kcml2ZXJzL2hpZC9oaWQtcGxheXN0YXRpb24uYzoyODpzdGF0aWMgREVGSU5FX0lEQShwc19wbGF5ZXJfaWRfYWxsb2NhdG9yKTtcbmRyaXZlcnMvaGlkL2hpZC1wbGF5c3RhdGlvbi5jLTI5LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1zb255LmM9NTIzPXN0YXRpYyBMSVNUX0hFQUQoc29ueV9kZXZpY2VfbGlzdCk7XG5kcml2ZXJzL2hpZC9oaWQtc29ueS5jOjUyNDpzdGF0aWMgREVGSU5FX0lEQShzb255X2RldmljZV9pZF9hbGxvY2F0b3IpO1xuZHJpdmVycy9oaWQvaGlkLXNvbnkuYy01MjUtXG4tLVxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfY29yZS5jLTM2LS8qIEZvciBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2UgSURzICovXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9jb3JlLmM6Mzc6c3RhdGljIERFRklORV9JREEocGxhdGZvcm1fb21hcF9zc2lfaWRhKTtcbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX2NvcmUuYy0zOC1cbi0tXG5kcml2ZXJzL2h3bW9uL2h3bW9uLmM9MTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgaHdtb25fY2xhc3MgPSB7XG4tLVxuZHJpdmVycy9od21vbi9od21vbi5jLTE0Ny1cbmRyaXZlcnMvaHdtb24vaHdtb24uYzoxNDg6c3RhdGljIERFRklORV9JREEoaHdtb25faWRhKTtcbmRyaXZlcnMvaHdtb24vaHdtb24uYy0xNDktXG4tLVxuZHJpdmVycy9od21vbi9pYm1hZW0uYy03OC1cbmRyaXZlcnMvaHdtb24vaWJtYWVtLmM6Nzk6c3RhdGljIERFRklORV9JREEoYWVtX2lkYSk7XG5kcml2ZXJzL2h3bW9uL2libWFlbS5jLTgwLVxuLS1cbmRyaXZlcnMvaHd0cmFjaW5nL2ludGVsX3RoL2NvcmUuYz0yNT1tb2R1bGVfcGFyYW0oaG9zdF9tb2RlLCBib29sLCAwNDQ0KTtcbmRyaXZlcnMvaHd0cmFjaW5nL2ludGVsX3RoL2NvcmUuYy0yNi1cbmRyaXZlcnMvaHd0cmFjaW5nL2ludGVsX3RoL2NvcmUuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShpbnRlbF90aF9pZGEpO1xuZHJpdmVycy9od3RyYWNpbmcvaW50ZWxfdGgvY29yZS5jLTI4LVxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMtNDEtLyogSURBIHRvIGFzc2lnbiBlYWNoIHJlZ2lzdGVyZWQgZGV2aWNlIGEgdW5pcXVlIGlkICovXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jOjQyOnN0YXRpYyBERUZJTkVfSURBKGlpb19pZGEpO1xuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYy00My1cbi0tXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jLTMzLVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYzozNDpzdGF0aWMgREVGSU5FX0lEQShpaW9fdHJpZ2dlcl9pZGEpO1xuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYy0zNS1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jPTE0OT1zdGF0aWMgZGV2X3QgZHluYW1pY19pc3NtX2RldjtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMtMTUwLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYzoxNTE6c3RhdGljIERFRklORV9JREEodW1hZF9pZGEpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYy0xNTItXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYz03Nj1zdGF0aWMgZGV2X3QgZHluYW1pY191dmVyYnNfZGV2O1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYy03Ny1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmM6Nzg6c3RhdGljIERFRklORV9JREEodXZlcmJzX2lkYSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jLTc5LXN0YXRpYyBpbnQgaWJfdXZlcmJzX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTtcbi0tXG5kcml2ZXJzL2lucHV0L2lucHV0LmM9MzU9TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2lucHV0L2lucHV0LmMtMzgtI2RlZmluZSBJTlBVVF9GSVJTVF9EWU5BTUlDX0RFVlx0XHQyNTZcbmRyaXZlcnMvaW5wdXQvaW5wdXQuYzozOTpzdGF0aWMgREVGSU5FX0lEQShpbnB1dF9pZGEpO1xuZHJpdmVycy9pbnB1dC9pbnB1dC5jLTQwLVxuLS1cbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jPTE2MjY9c3RhdGljIGludCB4cGFkX2luaXRfZmYoc3RydWN0IHVzYl94cGFkICp4cGFkKSB7IHJldHVybiAwOyB9XG4tLVxuZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMtMTYzMi1cbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jOjE2MzM6c3RhdGljIERFRklORV9JREEoeHBhZF9wYWRfc2VxKTtcbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jLTE2MzQtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYz02ND1pbnQgYW1kX2lvbW11X21heF9nbHhfdmFsID0gLTE7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy02OS0gKi9cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NzA6REVGSU5FX0lEQShwZG9tX2lkcyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTcxLVxuLS1cbmRyaXZlcnMvaW9tbXUvaW50ZWwvZG1hci5jPTY0PXN0YXRpYyBpbnQgZG1hcl9kZXZfc2NvcGVfc3RhdHVzID0gMTtcbmRyaXZlcnMvaW9tbXUvaW50ZWwvZG1hci5jOjY1OnN0YXRpYyBERUZJTkVfSURBKGRtYXJfc2VxX2lkcyk7XG5kcml2ZXJzL2lvbW11L2ludGVsL2RtYXIuYy02Ni1cbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11LmM9NDI9c3RhdGljIHN0cnVjdCBrc2V0ICppb21tdV9ncm91cF9rc2V0O1xuZHJpdmVycy9pb21tdS9pb21tdS5jOjQzOnN0YXRpYyBERUZJTkVfSURBKGlvbW11X2dyb3VwX2lkYSk7XG5kcml2ZXJzL2lvbW11L2lvbW11LmM6NDQ6c3RhdGljIERFRklORV9JREEoaW9tbXVfZ2xvYmFsX3Bhc2lkX2lkYSk7XG5kcml2ZXJzL2lvbW11L2lvbW11LmMtNDUtXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM9Mzk9c3RhdGljIHN0cnVjdCBtb2NrX2J1c190eXBlIGlvbW11ZmRfbW9ja19idXNfdHlwZSA9IHtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy00NC1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjQ1OnN0YXRpYyBERUZJTkVfSURBKG1vY2tfZGV2X2lkYSk7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy00Ni1cbi0tXG5kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMtNDctLyogSU9NTVUgUFNDSUQgYWxsb2NhdGlvbiBuYW1lc3BhY2UuICovXG5kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmM6NDg6c3RhdGljIERFRklORV9JREEocmlzY3ZfaW9tbXVfcHNjaWRzKTtcbmRyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuYy00OS0jZGVmaW5lIFJJU0NWX0lPTU1VX01BWF9QU0NJRFx0XHQoQklUKDIwKSAtIDEpXG4tLVxuZHJpdmVycy9pcGFjay9pcGFjay5jLTE3LVxuZHJpdmVycy9pcGFjay9pcGFjay5jOjE4OnN0YXRpYyBERUZJTkVfSURBKGlwYWNrX2lkYSk7XG5kcml2ZXJzL2lwYWNrL2lwYWNrLmMtMTktXG4tLVxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmM9MjAyPXN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHZtb3ZwX2xvY2spO1xuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMtMjAzLVxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmM6MjA0OnN0YXRpYyBERUZJTkVfSURBKGl0c192cGVpZF9pZGEpO1xuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMtMjA1LVxuLS1cbmRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXY1LmM9MzQ9c3RydWN0IGdpY3Y1X2NoaXBfZGF0YSBnaWN2NV9nbG9iYWxfZGF0YSBfX3JlYWRfbW9zdGx5O1xuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjUuYy0zNS1cbmRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXY1LmM6MzY6c3RhdGljIERFRklORV9JREEobHBpX2lkYSk7XG5kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy12NS5jLTM3LXN0YXRpYyB1MzIgbnVtX2xwaXMgX19yb19hZnRlcl9pbml0O1xuLS1cbmRyaXZlcnMvbWNiL21jYi1jb3JlLmMtMTQtXG5kcml2ZXJzL21jYi9tY2ItY29yZS5jOjE1OnN0YXRpYyBERUZJTkVfSURBKG1jYl9pZGEpO1xuZHJpdmVycy9tY2IvbWNiLWNvcmUuYy0xNi1cbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jPTQ4PXN0YXRpYyBpbnQgYmNhY2hlX21ham9yO1xuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzo0OTpzdGF0aWMgREVGSU5FX0lEQShiY2FjaGVfZGV2aWNlX2lkeCk7XG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTUwLXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB1bnJlZ2lzdGVyX3dhaXQ7XG4tLVxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTUzLVxuZHJpdmVycy9tZC9kbS1jcnlwdC5jOjU0OnN0YXRpYyBERUZJTkVfSURBKHdvcmtxdWV1ZV9pZGEpO1xuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTU1LVxuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kdmItcGxsLmM9MjE9c3RydWN0IGR2Yl9wbGxfcHJpdiB7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2R2Yi1wbGwuYy0zNy0jZGVmaW5lIERWQl9QTExfTUFYIDY0XG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZHZiLXBsbC5jOjM4OnN0YXRpYyBERUZJTkVfSURBKHBsbF9pZGEpO1xuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2R2Yi1wbGwuYy0zOS1cbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JlbmVzYXMvcmNhci12aW4vcmNhci1jb3JlLmMtNTctXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JlbmVzYXMvcmNhci12aW4vcmNhci1jb3JlLmM6NTg6c3RhdGljIERFRklORV9JREEocnZpbl9pZGEpO1xuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yZW5lc2FzL3JjYXItdmluL3JjYXItY29yZS5jLTU5LXN0YXRpYyBERUZJTkVfTVVURVgocnZpbl9ncm91cF9sb2NrKTtcbi0tXG5kcml2ZXJzL21lZGlhL3JjL2xpcmNfZGV2LmM9MjQ9c3RhdGljIGRldl90IGxpcmNfYmFzZV9kZXY7XG4tLVxuZHJpdmVycy9tZWRpYS9yYy9saXJjX2Rldi5jLTI2LS8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBhbGxvY2F0ZWQgbGlyYyBkZXZpY2VzICovXG5kcml2ZXJzL21lZGlhL3JjL2xpcmNfZGV2LmM6Mjc6c3RhdGljIERFRklORV9JREEobGlyY19pZGEpO1xuZHJpdmVycy9tZWRpYS9yYy9saXJjX2Rldi5jLTI4LVxuLS1cbmRyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jPTg1PXN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgKmxlZF9mZWVkYmFjaztcbi0tXG5kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYy04Ny0vKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgcmMgZGV2aWNlcyAqL1xuZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmM6ODg6c3RhdGljIERFRklORV9JREEocmNfaWRhKTtcbmRyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jLTg5LVxuLS1cbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYz0xMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBpbnRlbF9scHNzX3NwaV9jZWxsID0ge1xuLS1cbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYy0xMzUtXG5kcml2ZXJzL21mZC9pbnRlbC1scHNzLmM6MTM2OnN0YXRpYyBERUZJTkVfSURBKGludGVsX2xwc3NfZGV2aWRfaWRhKTtcbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYy0xMzctc3RhdGljIHN0cnVjdCBkZW50cnkgKmludGVsX2xwc3NfZGVidWdmcztcbi0tXG5kcml2ZXJzL21pc2MvYmNtLXZrL2JjbV92a19kZXYuYy0yNC1cbmRyaXZlcnMvbWlzYy9iY20tdmsvYmNtX3ZrX2Rldi5jOjI1OnN0YXRpYyBERUZJTkVfSURBKGJjbV92a19pZGEpO1xuZHJpdmVycy9taXNjL2JjbS12ay9iY21fdmtfZGV2LmMtMjYtXG4tLVxuZHJpdmVycy9taXNjL2NhcmRyZWFkZXIvYWxjb3JfcGNpLmMtMTktXG5kcml2ZXJzL21pc2MvY2FyZHJlYWRlci9hbGNvcl9wY2kuYzoyMDpzdGF0aWMgREVGSU5FX0lEQShhbGNvcl9wY2lfaWRyKTtcbmRyaXZlcnMvbWlzYy9jYXJkcmVhZGVyL2FsY29yX3BjaS5jLTIxLVxuLS1cbmRyaXZlcnMvbWlzYy9jYjcxMC9jb3JlLmMtMTQtXG5kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jOjE1OnN0YXRpYyBERUZJTkVfSURBKGNiNzEwX2lkYSk7XG5kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jLTE2LVxuLS1cbmRyaXZlcnMvbWlzYy9kdy14ZGF0YS1wY2llLmMtMjQtXG5kcml2ZXJzL21pc2MvZHcteGRhdGEtcGNpZS5jOjI1OnN0YXRpYyBERUZJTkVfSURBKHhkYXRhX2lkYSk7XG5kcml2ZXJzL21pc2MvZHcteGRhdGEtcGNpZS5jLTI2LVxuLS1cbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYz0xND1zdHJ1Y3QgYXV4X2J1c19kZXZpY2Uge1xuLS1cbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYy0xNy1cbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYzoxODpzdGF0aWMgREVGSU5FX0lEQShncF9jbGllbnRfaWRhKTtcbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYy0xOS1zdGF0aWMgY29uc3QgY2hhciBhdXhfZGV2X290cF9lMnBfbmFtZVsxNV0gPSBcJiMzNDtncF9vdHBfZTJwXCYjMzQ7O1xuLS1cbmRyaXZlcnMvbWlzYy9wY2lfZW5kcG9pbnRfdGVzdC5jLTEyMi1cbmRyaXZlcnMvbWlzYy9wY2lfZW5kcG9pbnRfdGVzdC5jOjEyMzpzdGF0aWMgREVGSU5FX0lEQShwY2lfZW5kcG9pbnRfdGVzdF9pZGEpO1xuZHJpdmVycy9taXNjL3BjaV9lbmRwb2ludF90ZXN0LmMtMTI0LVxuLS1cbmRyaXZlcnMvbWlzYy9ycG1iLWNvcmUuYy0xNC1cbmRyaXZlcnMvbWlzYy9ycG1iLWNvcmUuYzoxNTpzdGF0aWMgREVGSU5FX0lEQShycG1iX2lkYSk7XG5kcml2ZXJzL21pc2MvcnBtYi1jb3JlLmMtMTYtXG4tLVxuZHJpdmVycy9taXNjL3hpbGlueF9zZGZlYy5jLTI5LVxuZHJpdmVycy9taXNjL3hpbGlueF9zZGZlYy5jOjMwOnN0YXRpYyBERUZJTkVfSURBKGRldl9ucnMpO1xuZHJpdmVycy9taXNjL3hpbGlueF9zZGZlYy5jLTMxLVxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYz05OT1zdGF0aWMgaW50IG1heF9kZXZpY2VzO1xuLS1cbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYy0xMDItXG5kcml2ZXJzL21tYy9jb3JlL2Jsb2NrLmM6MTAzOnN0YXRpYyBERUZJTkVfSURBKG1tY19ibGtfaWRhKTtcbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYzoxMDQ6c3RhdGljIERFRklORV9JREEobW1jX3JwbWJfaWRhKTtcbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYy0xMDUtXG4tLVxuZHJpdmVycy9tbWMvY29yZS9ob3N0LmMtMzMtXG5kcml2ZXJzL21tYy9jb3JlL2hvc3QuYzozNDpzdGF0aWMgREVGSU5FX0lEQShtbWNfaG9zdF9pZGEpO1xuZHJpdmVycy9tbWMvY29yZS9ob3N0LmMtMzUtXG4tLVxuZHJpdmVycy9tdXgvY29yZS5jPTU0PXN0cnVjdCBkZXZtX211eF9zdGF0ZV9zdGF0ZSB7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MDgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSURBIEluc3RhbmNlcyBpbiB0aGUgQ29kZWJhc2UqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nOiBhbGwgdGhlc2UgaW5zdGFuY2VzIG9mIGBERUZJTkVfSURBKC4uLilgIOKAkyBhbmQgdGhlcmUgYXJlIHF1aXRlIGEgZmV3IG9mIHRoZW0g4oCTIGFyZSBkZWNsYXJlZCBhdCBmaWxlIHNjb3BlLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYSBwYXJ0aWN1bGFyIGRlc2lnbiBwYXR0ZXJuIG9yIGFwcHJvYWNoIHRvIHJlc291cmNlIG1hbmFnZW1lbnQuIFdoZXRoZXIgdGhleSYjMzk7cmUgYHN0YXRpY2Agb3IgdG9wLWxldmVsIGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgc2NvcGUsIHdoaWNoIHJlbWFpbnMgdGhlIGZpbGUuIEl0JiMzOTtzIGEgcG90ZW50aWFsIGZsYWcgZm9yIGhvdyB0aGVzZSBJREFzIGFyZSBiZWluZyB1c2VkLiBOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gaG93IGBERUZJTkVfTVRSRUVgIGlzIGJlaW5nIHVzZWQsIGFzIGl0JiMzOTtzIGxpa2VseSByZWxhdGVkLCBhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byB3aWxsIHByb3ZpZGUgdGhlIGFuc3dlciBJJiMzOTttIGxvb2tpbmcgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUZJTkVfTVRSRUVcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdD01Nz1Ob3JtYWwgQVBJXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC01OS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q6NjA6U3RhcnQgYnkgaW5pdGlhbGlzaW5nIGEgbWFwbGUgdHJlZSwgZWl0aGVyIHdpdGggREVGSU5FX01UUkVFKCkgZm9yIHN0YXRpY2FsbHlcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QtNjEtYWxsb2NhdGVkIG1hcGxlIHRyZWVzIG9yIG10X2luaXQoKSBmb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG9uZXMuICBBXG4tLVxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg9MjYxPXN0cnVjdCBtYXBsZV90cmVlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaC0yOTktXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaDozMDA6I2RlZmluZSBERUZJTkVfTVRSRUUobmFtZSlcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtMzAxLVx0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7XHRcdFxcXG4tLVxubGliL3Rlc3RfbWFwbGVfdHJlZS5jPTM2NDY9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGFsbG9jX2N5Y2xpY190ZXN0aW5nKHN0cnVjdCBtYXBsZV90cmVlICptdClcbi0tXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzcxMi1cbmxpYi90ZXN0X21hcGxlX3RyZWUuYzozNzEzOnN0YXRpYyBERUZJTkVfTVRSRUUodHJlZSk7XG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzcxNC1zdGF0aWMgaW50IF9faW5pdCBtYXBsZV90cmVlX3NlZWQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyNjEKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMzY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZyA9IGZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSB0aGUgY29kZSBhbmQgc2VlIHdoYXQgY2hhbmdlZCwgc3RhcnRpbmcgd2l0aCB0aGUgYERvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3RgIGZpbGUuIEkgdGhlbiBsb29rZWQgYXQgYGxpYi90ZXN0X21hcGxlX3RyZWUuY2AgYW5kIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgbWFjcm9zIGFyZSB1c2VkLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBERUZJTkVfTVRSRUVgIGFuZCBgREVGSU5FX0lEQWAgYXJlIG5vdyBlbmZvcmNpbmcgc3RhdGljIHN0b3JhZ2UsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHByZXZpb3VzIHZlcnNpb25zLiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgaXMgdGhlIGtleSBoZXJlOyBpdCYjMzk7cyBhIGNvbXBpbGUtdGltZSBjaGVjayB1c2luZyBhIHN0YXRpYyB2YXJpYWJsZS4gVGhlIGVycm9yIGluIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIHdhcyB0aGF0IGl0IHVzZWQgYERFRklORV9NVFJFRWAgbG9jYWxseSwgd2hpY2ggaXMgbm93IGludmFsaWQsIGFuZCBpdCB3YXMgY29ycmVjdGVkIGJ5IGluaXRpYWxpemluZyB0aGUgYG1hcGxlX3RyZWVgIHN0cnVjdHVyZSBkaXJlY3RseS4KCkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciB0byBzZWUgaWYgYW55IGNvbXBpbGVkIGNvZGUgY2hhbmdlZCBhbmQgY2hlY2tlZCB0aGUgZGlmZiB0byBjb25maXJtLiBUaGlzIGxlZCBtZSB0byBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYCwgYGluY2x1ZGUvbGludXgvaWRyLmhgLCBhbmQgYGluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oYCwgd2hpY2ggc2hvd2VkIHRoZSBuZXcgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbWFjcm8uIFRoaXMgbWFjcm8sIGhvd2V2ZXIsIG9ubHkgZ2VuZXJhdGVzIGEgY29tcGlsZS10aW1lIGNoZWNrLCBtYWtpbmcgc3VyZSB0aGF0IHZhcmlhYmxlcyBkZWZpbmVkIHdpdGggYERFRklORV9JREFgIG9yIGBERUZJTkVfTVRSRUVgIGhhdmUgc3RhdGljIHN0b3JhZ2UuIFRoaXMgbWVhbnMgaXQgZW5mb3JjZXMgYSBjb2Rpbmcgc3R5bGUgcmF0aGVyIHRoYW4gY2hhbmdpbmcgcnVudGltZSBiZWhhdmlvci4KClRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AgaXMganVzdCByZW1vdmluZyB0aGUgdW5uZWVkZWQgaW5pdGlhbCB6ZXJvaW5nIG9mIGB0cmVlYCBvbiB0aGUgc3RhY2ssIHdoaWNoIHdhcyBpbW1lZGlhdGVseSBvdmVyd3JpdHRlbiBieSBgbXRfaW5pdF9mbGFnc2AgYmVmb3JlIHVzZS4gVGhlIGtleSBxdWVzdGlvbiBJIGFza2VkIG15c2VsZiB3YXMgd2hldGhlciB0aGUgYGludGVydmFsX3RyZWVfdGVzdC5jYCBtb2R1bGUgaXMgZXZlciBhY3R1YWxseSB1c2VkIGJ5IHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4gRnJvbSBsb29raW5nIGF0IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBidWlsZCBjb25maWcgaXQgbG9va3MgbGlrZSBuby4gRXZlbiBpZiBpdCB3YXMgbG9hZGVkLCB0aGUgY2hhbmdlIG1hZGUgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGluIHRoZSB0ZXN0IG1vZHVsZSBhcyB0aGUgc3RhY2sgdmFyaWFibGUgYHRyZWVgIHdhcyBpbml0aWFsaXplZCByZWR1bmRhbnRseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc3Bhbl9pdGVyYXRpb25fY2hlY2tgIGZ1bmN0aW9uLiBUaGUgY29kZSBwYXRocyBhcmVuJiMzOTt0IHJlYWNoYWJsZSBmb3IgZnV6emluZywgd2hpY2ggbWVhbnMgdGhlIGNoYW5nZXMgd29uJiMzOTt0IGJlIGV4cG9zZWQgYnkgYSBmdXp6ZXIuIEFsbCB0aGUgY2hhbmdlcyB1bmRlciBgdG9vbHMvYCBhcmUgdXNlci1zcGFjZSB0ZXN0cywgd2hpY2ggYXJlIGlycmVsZXZhbnQgaGVyZS4KCkkgdGhlbiByZXZpc2l0ZWQgdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBpZiBzb21ldGhpbmcgc2hvdWxkIGJlIGZ1enplZCwgYXMgZGVmaW5lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlIHNlY3Rpb24gb24gd2hlbiB0byAqbm90KiByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIG1vZGlmaWNhdGlvbnMgZmFsbCBzcXVhcmVseSBpbnRvIG5vbi1rZXJuZWwgY2hhbmdlcywgYW5kIGNoYW5nZXMgaW4gdXNlci1zcGFjZSBjb2RlLiBUaGUgY29tcGlsZS10aW1lIGNoZWNrcyBhbHNvIGFyZSBhbHNvIGNhdGVnb3JpemVkIGFzIG5vdCB3b3J0aCBmdXp6aW5nLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byByZWFjaCB0aGUgY29tcGlsZS10aW1lIGNoZWNrcyB1c2luZyBhIHJ1bnRpbWUgZnV6emVyLgoKSW4gbGlnaHQgb2YgZXZlcnl0aGluZywgSSBzZWUgdGhhdCB0aGUgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbWFjcm8gaXMgYSBjb21waWxlLXRpbWUgY2hlY2s7IGl0IGRvZXNuJiMzOTt0IGVtaXQgYW55IGV4ZWN1dGFibGUgaW5zdHJ1Y3Rpb25zLCBkb2VzbiYjMzk7dCBhZmZlY3QgcnVudGltZSBjb250cm9sIGZsb3csIGRvZXNuJiMzOTt0IG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMsIGFuZCBkb2VzbiYjMzk7dCBleGVjdXRlIGF0IHJ1bnRpbWUuIFRoZSBjaGFuZ2VzIGluIGB0b29scy9gIGFyZSBpcnJlbGV2YW50IGJlY2F1c2UgdGhleSBleGlzdCB3aXRoaW4gdGhlIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AgaXMgYSBub24tZnVuY3Rpb25hbCByZWZhY3RvcmluZyBpbnNpZGUgYSB0ZXN0IG1vZHVsZSB0aGF0IGlzIG5vdCBhY2Nlc3NpYmxlIGFuZCB1bnJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgcnVudGltZSBzZXR1cC4KVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZXJlIGFyZSBubyBydW50aW1lIGNoYW5nZXMsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEFTU0VSVF9TVEFUSUNfU1RPUkFHRSgpLCB3aGljaCBpcyBhIHB1cmVseSBjb21waWxlLXRpbWUgc3RhdGljIGNoZWNrIGVuZm9yY2luZyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBvbiBERUZJTkVfSURBIGFuZCBERUZJTkVfTVRSRUUgZGVjbGFyYXRpb25zLiBJdCBlbWl0cyBubyBydW50aW1lIGluc3RydWN0aW9ucywgZGVmZW5zaXZlIGFzc2VydGlvbnMsIG9yIGNvbnRyb2wtZmxvdyBtb2RpZmljYXRpb25zLiBUaGUgY2hhbmdlcyBpbiB0b29scy8gYWZmZWN0IG9ubHkgdXNlci1zcGFjZSB0ZXN0cywgYW5kIHRoZSBjaGFuZ2UgaW4gbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGFkanVzdHMgYSBzdGFuZGFsb25lIHRlc3QgbW9kdWxlIChleGVjdXRlZCBvbmx5IG9uIG1vZHVsZSBpbml0L2Jvb3QgYW5kIGltbWVkaWF0ZWx5IHVubG9hZGVkKSB0byBjb25mb3JtIHRvIHRoZSBjb21waWxlLXRpbWUgY2hlY2sgd2l0aG91dCBhbHRlcmluZyBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuIFRodXMsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd29ydGggZnV6emluZyBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKCksIHdoaWNoIGlzIGEgcHVyZWx5IGNvbXBpbGUtdGltZSBzdGF0aWMgY2hlY2sgZW5mb3JjaW5nIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIG9uIERFRklORV9JREEgYW5kIERFRklORV9NVFJFRSBkZWNsYXJhdGlvbnMuIEl0IGVtaXRzIG5vIHJ1bnRpbWUgaW5zdHJ1Y3Rpb25zLCBkZWZlbnNpdmUgYXNzZXJ0aW9ucywgb3IgY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIHRvb2xzLyBhZmZlY3Qgb25seSB1c2VyLXNwYWNlIHRlc3RzLCBhbmQgdGhlIGNoYW5nZSBpbiBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYWRqdXN0cyBhIHN0YW5kYWxvbmUgdGVzdCBtb2R1bGUgKGV4ZWN1dGVkIG9ubHkgb24gbW9kdWxlIGluaXQvYm9vdCBhbmQgaW1tZWRpYXRlbHkgdW5sb2FkZWQpIHRvIGNvbmZvcm0gdG8gdGhlIGNvbXBpbGUtdGltZSBjaGVjayB3aXRob3V0IGFsdGVyaW5nIGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4gVGh1cywgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3b3J0aCBmdXp6aW5nIGlzIG1vZGlmaWVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjEwLjI5Njg4ODIzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzc1NDE4MjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKCksIHdoaWNoIGlzIGEgcHVyZWx5IGNvbXBpbGUtdGltZSBzdGF0aWMgY2hlY2sgZW5mb3JjaW5nIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIG9uIERFRklORV9JREEgYW5kIERFRklORV9NVFJFRSBkZWNsYXJhdGlvbnMuIEl0IGVtaXRzIG5vIHJ1bnRpbWUgaW5zdHJ1Y3Rpb25zLCBkZWZlbnNpdmUgYXNzZXJ0aW9ucywgb3IgY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIHRvb2xzLyBhZmZlY3Qgb25seSB1c2VyLXNwYWNlIHRlc3RzLCBhbmQgdGhlIGNoYW5nZSBpbiBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYWRqdXN0cyBhIHN0YW5kYWxvbmUgdGVzdCBtb2R1bGUgKGV4ZWN1dGVkIG9ubHkgb24gbW9kdWxlIGluaXQvYm9vdCBhbmQgaW1tZWRpYXRlbHkgdW5sb2FkZWQpIHRvIGNvbmZvcm0gdG8gdGhlIGNvbXBpbGUtdGltZSBjaGVjayB3aXRob3V0IGFsdGVyaW5nIGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4gVGh1cywgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3b3J0aCBmdXp6aW5nIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6MTAuMjk2ODkzODM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU2MjUzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyM2E0MGE4YWQ0M2QxZmZmOTI3ZTM4OGQxN2QyYWIyZDY3ZDdiOWJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDIyOjM3OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxcbmluZGV4IGNiMmY2MDUwYmRmN2QuLmVmOTAzNmZhNTQxM2QgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oXFxuQEAgLTI3NSw2ICsyNzUsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkICpvZmZzZXRfdG9fcHRyKGNvbnN0IGludCAqb2ZmKVxcbiAjZGVmaW5lIF9fQUREUkVTU0FCTEUoc3ltKSBcXFxcXFxuIFxcdF9fX0FERFJFU1NBQkxFKHN5bSwgX19zZWN0aW9uKFxcXCIuZGlzY2FyZC5hZGRyZXNzYWJsZVxcXCIpKVxcbiBcXG4rLyogRW5mb3JjZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gKi9cXG4rI2RlZmluZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSkgXFxcXFxcbitcXHRzdGF0aWMgdHlwZW9mKG5hbWUpICogY29uc3QgX19hbHdheXNfdW51c2VkIFxcXFxcXG4rXFx0XFx0bmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcXHUwMDI2KG5hbWUpXFxuK1xcbiAvKlxcbiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzXFxuICAqIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgbW9zdCBpbXBvcnRhbnRseSB3aXRob3V0IGV2YWx1YXRpbmcgdGhlIGFyZ3VtZW50LlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkci5oIGIvaW5jbHVkZS9saW51eC9pZHIuaFxcbmluZGV4IDc4OWUyM2U2NzQ0NDEuLmUyYTRiNjI5ODUxMWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZHIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaWRyLmhcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgaWRyIHtcXG4gXFx0c3RydWN0IHJhZGl4X3RyZWVfcm9vdFxcdGlkcl9ydDtcXG5AQCAtMjY5LDcgKzI3MCw5IEBAIHN0cnVjdCBpZGEge1xcbiAjZGVmaW5lIElEQV9JTklUKG5hbWUpXFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LnhhID0gWEFSUkFZX0lOSVQobmFtZSwgSURBX0lOSVRfRkxBR1MpXFx0XFx0XFx0XFx0XFxcXFxcbiB9XFxuLSNkZWZpbmUgREVGSU5FX0lEQShuYW1lKVxcdHN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpXFxuKyNkZWZpbmUgREVGSU5FX0lEQShuYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0c3RydWN0IGlkYSBuYW1lID0gSURBX0lOSVQobmFtZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcXG4gXFxuIGludCBpZGFfYWxsb2NfcmFuZ2Uoc3RydWN0IGlkYSAqLCB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4LCBnZnBfdCk7XFxuIHZvaWQgaWRhX2ZyZWUoc3RydWN0IGlkYSAqLCB1bnNpZ25lZCBpbnQgaWQpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXFxuaW5kZXggZTU5NWFlNWNkMGVlZC4uZTMwZTU3ZjVmM2RmOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXFxuQEAgLTksNiArOSw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbiBcXG5AQCAtMjk3LDcgKzI5OCw4IEBAIHN0cnVjdCBtYXBsZV90cmVlIHtcXG4gI2VuZGlmXFxuIFxcbiAjZGVmaW5lIERFRklORV9NVFJFRShuYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMClcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7XFx0XFx0XFxcXFxcbitcXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcXG4gXFxuICNkZWZpbmUgbXRyZWVfbG9jayhtdClcXHRcXHRzcGluX2xvY2soKFxcdTAwMjYobXQpLVxcdTAwM2VtYV9sb2NrKSlcXG4gI2RlZmluZSBtdHJlZV9sb2NrX25lc3RlZChtYXMsIHN1YmNsYXNzKSBcXFxcXFxuZGlmZiAtLWdpdCBhL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYyBiL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY1xcbmluZGV4IGIwYjA3MjcwY2U3YzMuLjA2Zjc3ZmIzMTc5ZmMgMTAwNjQ0XFxuLS0tIGEvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXFxuKysrIGIvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXFxuQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgaW50IHNwYW5faXRlcmF0aW9uX2NoZWNrKHZvaWQpXFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGxhc3Q7XFxuIFxcdHN0cnVjdCBpbnRlcnZhbF90cmVlX3NwYW5faXRlciBzcGFuLCBtYXNfc3BhbjtcXG4gXFxuLVxcdERFRklORV9NVFJFRSh0cmVlKTtcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgdHJlZTtcXG4gXFxuIFxcdE1BX1NUQVRFKG1hcywgXFx1MDAyNnRyZWUsIDAsIDApO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oXFxuaW5kZXggZjJmNTRiMDM4MTY4MC4uMDNlY2Y5MDg2NjQzNiAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcXG5AQCAtNzMsNiArNzMsMTEgQEBcXG4gIyBkZWZpbmUgX19zYW1lX3R5cGUoYSwgYikgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoYSksIHR5cGVvZihiKSlcXG4gI2VuZGlmXFxuIFxcbisvKiBFbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiAqL1xcbisjZGVmaW5lIEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKSBcXFxcXFxuK1xcdHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgXFxcXFxcbitcXHRcXHRuYW1lIyNfc3RvcmFnZV9jaGVjayA9IFxcdTAwMjYobmFtZSlcXG4rXFxuIC8qXFxuICAqIFRoaXMgcmV0dXJucyBhIGNvbnN0YW50IGV4cHJlc3Npb24gd2hpbGUgZGV0ZXJtaW5pbmcgaWYgYW4gYXJndW1lbnQgaXNcXG4gICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL2lkci10ZXN0LmNcXG5pbmRleCA5NDUxNDRlOTg1MDcyLi42ZmNiYTViNTg3MGI0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL2lkci10ZXN0LmNcXG5AQCAtNDYwLDkgKzQ2MCwxMSBAQCB2b2lkIGlkYV9kdW1wKHN0cnVjdCBpZGEgKik7XFxuICAqL1xcbiB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKVxcbiB7XFxuLVxcdERFRklORV9JREEoaWRhKTtcXG4rXFx0c3RydWN0IGlkYSBpZGE7XFxuIFxcdGludCBpZDtcXG4gXFxuK1xcdGlkYV9pbml0KFxcdTAwMjZpZGEpO1xcbitcXG4gXFx0aWQgPSBpZGFfYWxsb2NfbWluKFxcdTAwMjZpZGEsIDI1NiwgR0ZQX05PV0FJVCk7XFxuIFxcdElEQV9CVUdfT04oXFx1MDAyNmlkYSwgaWQgIT0gLUVOT01FTSk7XFxuIFxcdGlkID0gaWRhX2FsbG9jX21pbihcXHUwMDI2aWRhLCAxVUwgXFx1MDAzY1xcdTAwM2MgMzAsIEdGUF9OT1dBSVQpO1xcbkBAIC00NzUsOSArNDc3LDExIEBAIHZvaWQgaWRhX2NoZWNrX25vbWVtKHZvaWQpXFxuICAqL1xcbiB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZClcXG4ge1xcbi1cXHRERUZJTkVfSURBKGlkYSk7XFxuK1xcdHN0cnVjdCBpZGEgaWRhO1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbitcXHRpZGFfaW5pdChcXHUwMDI2aWRhKTtcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwMDAwOyBpKyspIHtcXG4gXFx0XFx0aW50IGlkID0gaWRhX2FsbG9jKFxcdTAwMjZpZGEsIEdGUF9OT1dBSVQpO1xcbiBcXHRcXHRpZiAoaWQgPT0gLUVOT01FTSkge1xcbkBAIC00OTYsMTEgKzUwMCwxMyBAQCB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZClcXG4gXFxuIHZvaWQgaWRhX2NoZWNrX3JhbmRvbSh2b2lkKVxcbiB7XFxuLVxcdERFRklORV9JREEoaWRhKTtcXG4rXFx0c3RydWN0IGlkYSBpZGE7XFxuIFxcdERFQ0xBUkVfQklUTUFQKGJpdG1hcCwgMjA0OCk7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXHR0aW1lX3QgcyA9IHRpbWUoTlVMTCk7XFxuIFxcbitcXHRpZGFfaW5pdChcXHUwMDI2aWRhKTtcXG4rXFxuICByZXBlYXQ6XFxuIFxcdG1lbXNldChiaXRtYXAsIDAsIHNpemVvZihiaXRtYXApKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDAwMDsgaSsrKSB7XFxuQEAgLTUyMiw5ICs1MjgsMTEgQEAgdm9pZCBpZGFfY2hlY2tfcmFuZG9tKHZvaWQpXFxuIFxcbiB2b2lkIGlkYV9hbGxvY19mcmVlX3Rlc3Qodm9pZClcXG4ge1xcbi1cXHRERUZJTkVfSURBKGlkYSk7XFxuK1xcdHN0cnVjdCBpZGEgaWRhO1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbitcXHRpZGFfaW5pdChcXHUwMDI2aWRhKTtcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwMDsgaSsrKVxcbiBcXHRcXHRhc3NlcnQoaWRhX2FsbG9jX21heChcXHUwMDI2aWRhLCAyMDAwMCwgR0ZQX0tFUk5FTCkgPT0gaSk7XFxuIFxcdGFzc2VydChpZGFfYWxsb2NfcmFuZ2UoXFx1MDAyNmlkYSwgNSwgMzAsIEdGUF9LRVJORUwpIFxcdTAwM2MgMCk7XFxuQEAgLTU3NiwxMCArNTg0LDEyIEBAIHN0YXRpYyB2b2lkICppZGFfbGVha19mbih2b2lkICphcmcpXFxuIFxcbiB2b2lkIGlkYV90aHJlYWRfdGVzdHModm9pZClcXG4ge1xcbi1cXHRERUZJTkVfSURBKGlkYSk7XFxuK1xcdHN0cnVjdCBpZGEgaWRhO1xcbiBcXHRwdGhyZWFkX3QgdGhyZWFkc1syMF07XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0aWRhX2luaXQoXFx1MDAyNmlkYSk7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0aHJlYWRzKTsgaSsrKVxcbiBcXHRcXHRpZiAocHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIGlkYV9yYW5kb21fZm4sIE5VTEwpKSB7XFxuIFxcdFxcdFxcdHBlcnJvcihcXFwiY3JlYXRpbmcgaWRhIHRocmVhZFxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXFxuaW5kZXggZDk2N2U3NmEzYzA2NS4uYmZlNGI4NjI2YzQyOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXFxuQEAgLTM2MDIyLDEwICszNjAyMiwxMiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfZXJhc2VfcmViYWxhbmNlKHN0cnVjdCBtYXBsZV90cmVlICptdClcXG4gXFxuIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19tdHJlZV9kdXAoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbiB7XFxuLVxcdERFRklORV9NVFJFRShuZXcpO1xcbitcXHRzdHJ1Y3QgbWFwbGVfdHJlZSBuZXc7XFxuIFxcdGludCBpLCBqLCByZXQsIGNvdW50ID0gMDtcXG4gXFx0dW5zaWduZWQgaW50IHJhbmRfc2VlZCA9IDE3LCByYW5kO1xcbiBcXG4rXFx0bXRfaW5pdChcXHUwMDI2bmV3KTtcXG4rXFxuIFxcdC8qIHN0b3JlIGEgdmFsdWUgYXQgWzAsIDBdICovXFxuIFxcdG10X2luaXRfZmxhZ3MobXQsIDApO1xcbiBcXHRtdHJlZV9zdG9yZV9yYW5nZShtdCwgMCwgMCwgeGFfbWtfdmFsdWUoMCksIEdGUF9LRVJORUwpO1xcbkBAIC0zNjMxOSw3ICszNjMyMSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3ZtYV9tb2RpZmljYXRpb24oc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbiB2b2lkIGZhcm1lcl90ZXN0cyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlO1xcbi1cXHRERUZJTkVfTVRSRUUodHJlZSk7XFxuK1xcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XFxuK1xcbitcXHRtdF9pbml0KFxcdTAwMjZ0cmVlKTtcXG4gXFxuIFxcdG10X2R1bXAoXFx1MDAyNnRyZWUsIG10X2R1bXBfZGVjKTtcXG4gXFxuQEAgLTM2NDMyLDkgKzM2NDM2LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9sYXN0X2luZGV4KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBzdGF0aWMgdm9pZCB0ZXN0X3NwYW5uaW5nX3N0b3JlX3JlZ3Jlc3Npb24odm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZyb20gPSAwLCB0byA9IDA7XFxuLVxcdERFRklORV9NVFJFRSh0cmVlKTtcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgdHJlZTtcXG4gXFx0TUFfU1RBVEUobWFzLCBcXHUwMDI2dHJlZSwgMCwgMCk7XFxuIFxcbitcXHRtdF9pbml0KFxcdTAwMjZ0cmVlKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEJ1aWxkIGEgMy1sZXZlbCB0cmVlLiBXZSByZXF1aXJlIGEgcGFyZW50IG5vZGUgYmVsb3cgdGhlIHJvb3Qgbm9kZVxcbiBcXHQgKiBhbmQgMiBsZWFmIG5vZGVzIHVuZGVyIGl0LCBzbyB3ZSBjYW4gc3BhbiB0aGUgZW50aXJldHkgb2YgdGhlIHJpZ2h0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjExLjA5MzQ3OTI2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTYyOTU3NTc2ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEFTU0VSVF9TVEFUSUNfU1RPUkFHRSgpLCB3aGljaCBpcyBhIHB1cmVseSBjb21waWxlLXRpbWUgc3RhdGljIGNoZWNrIGVuZm9yY2luZyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBvbiBERUZJTkVfSURBIGFuZCBERUZJTkVfTVRSRUUgZGVjbGFyYXRpb25zLiBJdCBlbWl0cyBubyBydW50aW1lIGluc3RydWN0aW9ucywgZGVmZW5zaXZlIGFzc2VydGlvbnMsIG9yIGNvbnRyb2wtZmxvdyBtb2RpZmljYXRpb25zLiBUaGUgY2hhbmdlcyBpbiB0b29scy8gYWZmZWN0IG9ubHkgdXNlci1zcGFjZSB0ZXN0cywgYW5kIHRoZSBjaGFuZ2UgaW4gbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGFkanVzdHMgYSBzdGFuZGFsb25lIHRlc3QgbW9kdWxlIChleGVjdXRlZCBvbmx5IG9uIG1vZHVsZSBpbml0L2Jvb3QgYW5kIGltbWVkaWF0ZWx5IHVubG9hZGVkKSB0byBjb25mb3JtIHRvIHRoZSBjb21waWxlLXRpbWUgY2hlY2sgd2l0aG91dCBhbHRlcmluZyBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuIFRodXMsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd29ydGggZnV6emluZyBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjNhNDBhOGFkNDNkMWZmZjkyN2UzODhkMTdkMmFiMmQ2N2Q3YjliZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIyOjM3OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oXG5pbmRleCBjYjJmNjA1MGJkZjdkLi5lZjkwMzZmYTU0MTNkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcbkBAIC0yNzUsNiArMjc1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqb2Zmc2V0X3RvX3B0cihjb25zdCBpbnQgKm9mZilcbiAjZGVmaW5lIF9fQUREUkVTU0FCTEUoc3ltKSBcXFxuIFx0X19fQUREUkVTU0FCTEUoc3ltLCBfX3NlY3Rpb24oXCIuZGlzY2FyZC5hZGRyZXNzYWJsZVwiKSlcbiBcbisvKiBFbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiAqL1xuKyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXG4rXHRzdGF0aWMgdHlwZW9mKG5hbWUpICogY29uc3QgX19hbHdheXNfdW51c2VkIFxcXG4rXHRcdG5hbWUjI19zdG9yYWdlX2NoZWNrID0gXHUwMDI2KG5hbWUpXG4rXG4gLypcbiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzXG4gICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZHIuaCBiL2luY2x1ZGUvbGludXgvaWRyLmhcbmluZGV4IDc4OWUyM2U2NzQ0NDEuLmUyYTRiNjI5ODUxMWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lkci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lkci5oXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gXG4gc3RydWN0IGlkciB7XG4gXHRzdHJ1Y3QgcmFkaXhfdHJlZV9yb290XHRpZHJfcnQ7XG5AQCAtMjY5LDcgKzI3MCw5IEBAIHN0cnVjdCBpZGEge1xuICNkZWZpbmUgSURBX0lOSVQobmFtZSlcdHtcdFx0XHRcdFx0XHRcXFxuIFx0LnhhID0gWEFSUkFZX0lOSVQobmFtZSwgSURBX0lOSVRfRkxBR1MpXHRcdFx0XHRcXFxuIH1cbi0jZGVmaW5lIERFRklORV9JREEobmFtZSlcdHN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpXG4rI2RlZmluZSBERUZJTkVfSURBKG5hbWUpXHRcdFx0XHRcdFx0XHRcXFxuK1x0c3RydWN0IGlkYSBuYW1lID0gSURBX0lOSVQobmFtZSk7XHRcdFx0XHRcdFxcXG4rXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbiBcbiBpbnQgaWRhX2FsbG9jX3JhbmdlKHN0cnVjdCBpZGEgKiwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwgZ2ZwX3QpO1xuIHZvaWQgaWRhX2ZyZWUoc3RydWN0IGlkYSAqLCB1bnNpZ25lZCBpbnQgaWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbmluZGV4IGU1OTVhZTVjZDBlZWQuLmUzMGU1N2Y1ZjNkZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbkBAIC05LDYgKzksNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gXG5AQCAtMjk3LDcgKzI5OCw4IEBAIHN0cnVjdCBtYXBsZV90cmVlIHtcbiAjZW5kaWZcbiBcbiAjZGVmaW5lIERFRklORV9NVFJFRShuYW1lKVx0XHRcdFx0XHRcdFxcXG4tXHRzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKVxuK1x0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7XHRcdFxcXG4rXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbiBcbiAjZGVmaW5lIG10cmVlX2xvY2sobXQpXHRcdHNwaW5fbG9jaygoXHUwMDI2KG10KS1cdTAwM2VtYV9sb2NrKSlcbiAjZGVmaW5lIG10cmVlX2xvY2tfbmVzdGVkKG1hcywgc3ViY2xhc3MpIFxcXG5kaWZmIC0tZ2l0IGEvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGIvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXG5pbmRleCBiMGIwNzI3MGNlN2MzLi4wNmY3N2ZiMzE3OWZjIDEwMDY0NFxuLS0tIGEvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXG4rKysgYi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcbkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgbGFzdDtcbiBcdHN0cnVjdCBpbnRlcnZhbF90cmVlX3NwYW5faXRlciBzcGFuLCBtYXNfc3BhbjtcbiBcbi1cdERFRklORV9NVFJFRSh0cmVlKTtcbitcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XG4gXG4gXHRNQV9TVEFURShtYXMsIFx1MDAyNnRyZWUsIDAsIDApO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuaW5kZXggZjJmNTRiMDM4MTY4MC4uMDNlY2Y5MDg2NjQzNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oXG5AQCAtNzMsNiArNzMsMTEgQEBcbiAjIGRlZmluZSBfX3NhbWVfdHlwZShhLCBiKSBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihhKSwgdHlwZW9mKGIpKVxuICNlbmRpZlxuIFxuKy8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovXG4rI2RlZmluZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSkgXFxcbitcdHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgXFxcbitcdFx0bmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcdTAwMjYobmFtZSlcbitcbiAvKlxuICAqIFRoaXMgcmV0dXJucyBhIGNvbnN0YW50IGV4cHJlc3Npb24gd2hpbGUgZGV0ZXJtaW5pbmcgaWYgYW4gYXJndW1lbnQgaXNcbiAgKiBhIGNvbnN0YW50IGV4cHJlc3Npb24sIG1vc3QgaW1wb3J0YW50bHkgd2l0aG91dCBldmFsdWF0aW5nIHRoZSBhcmd1bWVudC5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jXG5pbmRleCA5NDUxNDRlOTg1MDcyLi42ZmNiYTViNTg3MGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL2lkci10ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jXG5AQCAtNDYwLDkgKzQ2MCwxMSBAQCB2b2lkIGlkYV9kdW1wKHN0cnVjdCBpZGEgKik7XG4gICovXG4gdm9pZCBpZGFfY2hlY2tfbm9tZW0odm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4rXHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdGludCBpZDtcbiBcbitcdGlkYV9pbml0KFx1MDAyNmlkYSk7XG4rXG4gXHRpZCA9IGlkYV9hbGxvY19taW4oXHUwMDI2aWRhLCAyNTYsIEdGUF9OT1dBSVQpO1xuIFx0SURBX0JVR19PTihcdTAwMjZpZGEsIGlkICE9IC1FTk9NRU0pO1xuIFx0aWQgPSBpZGFfYWxsb2NfbWluKFx1MDAyNmlkYSwgMVVMIFx1MDAzY1x1MDAzYyAzMCwgR0ZQX05PV0FJVCk7XG5AQCAtNDc1LDkgKzQ3NywxMSBAQCB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKVxuICAqL1xuIHZvaWQgaWRhX2NoZWNrX2NvbnZfdXNlcih2b2lkKVxuIHtcbi1cdERFRklORV9JREEoaWRhKTtcbitcdHN0cnVjdCBpZGEgaWRhO1xuIFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuK1x0aWRhX2luaXQoXHUwMDI2aWRhKTtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwMDA7IGkrKykge1xuIFx0XHRpbnQgaWQgPSBpZGFfYWxsb2MoXHUwMDI2aWRhLCBHRlBfTk9XQUlUKTtcbiBcdFx0aWYgKGlkID09IC1FTk9NRU0pIHtcbkBAIC00OTYsMTEgKzUwMCwxMyBAQCB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZClcbiBcbiB2b2lkIGlkYV9jaGVja19yYW5kb20odm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4rXHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdERFQ0xBUkVfQklUTUFQKGJpdG1hcCwgMjA0OCk7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdHRpbWVfdCBzID0gdGltZShOVUxMKTtcbiBcbitcdGlkYV9pbml0KFx1MDAyNmlkYSk7XG4rXG4gIHJlcGVhdDpcbiBcdG1lbXNldChiaXRtYXAsIDAsIHNpemVvZihiaXRtYXApKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwMDsgaSsrKSB7XG5AQCAtNTIyLDkgKzUyOCwxMSBAQCB2b2lkIGlkYV9jaGVja19yYW5kb20odm9pZClcbiBcbiB2b2lkIGlkYV9hbGxvY19mcmVlX3Rlc3Qodm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4rXHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbitcdGlkYV9pbml0KFx1MDAyNmlkYSk7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwMDsgaSsrKVxuIFx0XHRhc3NlcnQoaWRhX2FsbG9jX21heChcdTAwMjZpZGEsIDIwMDAwLCBHRlBfS0VSTkVMKSA9PSBpKTtcbiBcdGFzc2VydChpZGFfYWxsb2NfcmFuZ2UoXHUwMDI2aWRhLCA1LCAzMCwgR0ZQX0tFUk5FTCkgXHUwMDNjIDApO1xuQEAgLTU3NiwxMCArNTg0LDEyIEBAIHN0YXRpYyB2b2lkICppZGFfbGVha19mbih2b2lkICphcmcpXG4gXG4gdm9pZCBpZGFfdGhyZWFkX3Rlc3RzKHZvaWQpXG4ge1xuLVx0REVGSU5FX0lEQShpZGEpO1xuK1x0c3RydWN0IGlkYSBpZGE7XG4gXHRwdGhyZWFkX3QgdGhyZWFkc1syMF07XG4gXHRpbnQgaTtcbiBcbitcdGlkYV9pbml0KFx1MDAyNmlkYSk7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRocmVhZHMpOyBpKyspXG4gXHRcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCBpZGFfcmFuZG9tX2ZuLCBOVUxMKSkge1xuIFx0XHRcdHBlcnJvcihcImNyZWF0aW5nIGlkYSB0aHJlYWRcIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggZDk2N2U3NmEzYzA2NS4uYmZlNGI4NjI2YzQyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuQEAgLTM2MDIyLDEwICszNjAyMiwxMiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfZXJhc2VfcmViYWxhbmNlKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiBcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfbXRyZWVfZHVwKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiB7XG4tXHRERUZJTkVfTVRSRUUobmV3KTtcbitcdHN0cnVjdCBtYXBsZV90cmVlIG5ldztcbiBcdGludCBpLCBqLCByZXQsIGNvdW50ID0gMDtcbiBcdHVuc2lnbmVkIGludCByYW5kX3NlZWQgPSAxNywgcmFuZDtcbiBcbitcdG10X2luaXQoXHUwMDI2bmV3KTtcbitcbiBcdC8qIHN0b3JlIGEgdmFsdWUgYXQgWzAsIDBdICovXG4gXHRtdF9pbml0X2ZsYWdzKG10LCAwKTtcbiBcdG10cmVlX3N0b3JlX3JhbmdlKG10LCAwLCAwLCB4YV9ta192YWx1ZSgwKSwgR0ZQX0tFUk5FTCk7XG5AQCAtMzYzMTksNyArMzYzMjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja192bWFfbW9kaWZpY2F0aW9uKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiB2b2lkIGZhcm1lcl90ZXN0cyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlO1xuLVx0REVGSU5FX01UUkVFKHRyZWUpO1xuK1x0c3RydWN0IG1hcGxlX3RyZWUgdHJlZTtcbitcbitcdG10X2luaXQoXHUwMDI2dHJlZSk7XG4gXG4gXHRtdF9kdW1wKFx1MDAyNnRyZWUsIG10X2R1bXBfZGVjKTtcbiBcbkBAIC0zNjQzMiw5ICszNjQzNiwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfbGFzdF9pbmRleChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBzdGF0aWMgdm9pZCB0ZXN0X3NwYW5uaW5nX3N0b3JlX3JlZ3Jlc3Npb24odm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZyb20gPSAwLCB0byA9IDA7XG4tXHRERUZJTkVfTVRSRUUodHJlZSk7XG4rXHRzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlO1xuIFx0TUFfU1RBVEUobWFzLCBcdTAwMjZ0cmVlLCAwLCAwKTtcbiBcbitcdG10X2luaXQoXHUwMDI2dHJlZSk7XG4rXG4gXHQvKlxuIFx0ICogQnVpbGQgYSAzLWxldmVsIHRyZWUuIFdlIHJlcXVpcmUgYSBwYXJlbnQgbm9kZSBiZWxvdyB0aGUgcm9vdCBub2RlXG4gXHQgKiBhbmQgMiBsZWFmIG5vZGVzIHVuZGVyIGl0LCBzbyB3ZSBjYW4gc3BhbiB0aGUgZW50aXJldHkgb2YgdGhlIHJpZ2h0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozNzoxMS4wOTM0ODExOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTM3NDM0MDIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRyaWFnZTogUGF0Y2ggU2VyaWVzIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSB0YXNrIGl0c2VsZiBpcyBiZW5pZ24sIGZvY3VzaW5nIG9uIGtlcm5lbCBwYXRjaCByZXZpZXcgZm9yIGZ1enppbmcgdHJpYWdlLCBzbyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLiBMZXQncyBkaWcgaW50byB0aGUgZGlmZiB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLlxuXG5UaGUgYnVsayBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAuIFRoaXMgbWFjcm8gZW5mb3JjZXMgc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gZm9yIGNlcnRhaW4gZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpY2FsbHkgYGlkYWAgYW5kIGBtYXBsZV90cmVlYCwgYXMgc2VlbiBpbiBgaW5jbHVkZS9saW51eC9pZHIuaGAgYW5kIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGAuIEl0IGxvb2tzIGxpa2UgaXQgaXMgdG8gY2hlY2sgZm9yIGFjY2lkZW50YWwgdXNlIG9mIHRoZXNlIHN0cnVjdHVyZXMgaW4gZnVuY3Rpb25zIHRoYXQgYXJlbid0IGV4cGVjdGVkIHRvIHVzZSBzdGF0aWMgc3RvcmFnZS5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0LCBpbiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCwgSSBzZWUgYSAqY2hhbmdlKiByZWxhdGVkIHRvIGBERUZJTkVfTVRSRUUodHJlZSlgLiBJdCdzIGJlZW4gYWx0ZXJlZCB0byBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZTtgLiBJbW1lZGlhdGVseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBjaGFuZ2UgaXMganVzdCBhIGRpcmVjdCByZXBsYWNlbWVudCwgb3IgaWYgc29tZXRoaW5nIGVsc2UgaXMgZ29pbmcgb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgdHJlZWAgaXMgKmluaXRpYWxpemVkKiBsYXRlciBpbiB0aGUgZmlsZSBpZiBpdCdzIG5vIGxvbmdlciBiZWluZyBpbml0aWFsaXplZCBieSB0aGUgYERFRklORV9NVFJFRWAgbWFjcm8uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIHRvIGxvb2sgZm9yIHRoYXQgaW5pdGlhbGl6YXRpb24uIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBiZSBxdWljayBhYm91dCBpdC5cblxuRmluYWxseSwgdGhlcmUgYXJlIHNvbWUgdG9vbC1yZWxhdGVkIGNoYW5nZXMgaW4gYHRvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaGAsIGB0b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNgLiBUaGV5J3JlIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG1hY3JvIGl0c2VsZiwgYnV0IEknbGwgbmVlZCB0byBsb29rIGF0IHRoZW0gc2VwYXJhdGVseSBpZiB0aGV5IGFyZSBuZWNlc3NhcnkgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjI2LjQ2NzgyNDk1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0XFxuIDI0MTpcXHRzdGF0aWMgaW50IHNwYW5faXRlcmF0aW9uX2NoZWNrKHZvaWQpXFxuIDI0MjpcXHR7XFxuIDI0MzpcXHRcXHRpbnQgaSwgaiwgaztcXG4gMjQ0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGxhc3Q7XFxuIDI0NTpcXHRcXHRzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9zcGFuX2l0ZXIgc3BhbiwgbWFzX3NwYW47XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdFxcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XFxuIDI0ODpcXHRcXG4gMjQ5OlxcdFxcdE1BX1NUQVRFKG1hcywgXFx1MDAyNnRyZWUsIDAsIDApO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRwcmludGsoS0VSTl9BTEVSVCBcXFwiaW50ZXJ2YWwgdHJlZSBzcGFuIGl0ZXJhdGlvblxcXFxuXFxcIik7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzZWFyY2hfbG9vcHM7IGkrKykge1xcbiAyNTQ6XFx0XFx0XFx0LyogSW5pdGlhbGl6ZSBpbnRlcnZhbCB0cmVlIGZvciBlYWNoIHJvdW5kICovXFxuIDI1NTpcXHRcXHRcXHRpbml0KCk7XFxuIDI1NjpcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2Mgbm5vZGVzOyBqKyspXFxuIDI1NzpcXHRcXHRcXHRcXHRpbnRlcnZhbF90cmVlX2luc2VydChub2RlcyArIGosIFxcdTAwMjZyb290KTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0XFx0LyogUHV0IGFsbCB0aGUgcmFuZ2UgaW50byBtYXBsZSB0cmVlICovXFxuIDI2MDpcXHRcXHRcXHRtdF9pbml0X2ZsYWdzKFxcdTAwMjZ0cmVlLCBNVF9GTEFHU19BTExPQ19SQU5HRSk7XFxuIDI2MTpcXHRcXHRcXHRtdF9zZXRfaW5fcmN1KFxcdTAwMjZ0cmVlKTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ub2RlczsgaisrKVxcbiAyNjQ6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKG10cmVlX3N0b3JlX3JhbmdlKFxcdTAwMjZ0cmVlLCBub2Rlc1tqXS5zdGFydCxcXG4gMjY1OlxcdFxcdFxcdFxcdFxcdFxcdG5vZGVzW2pdLmxhc3QsIG5vZGVzICsgaiwgR0ZQX0tFUk5FTCkpO1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRcXHQvKiBMZXQncyB0cnkgbnNlYXJjaGVzIGRpZmZlcmVudCByYW5nZXMgKi9cXG4gMjY4OlxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBuc2VhcmNoZXM7IGsrKykge1xcbiAyNjk6XFx0XFx0XFx0XFx0LyogVHJ5IHdob2xlIHJhbmdlIG9uY2UgKi9cXG4gMjcwOlxcdFxcdFxcdFxcdGlmICghaykge1xcbiAyNzE6XFx0XFx0XFx0XFx0XFx0c3RhcnQgPSAwVUw7XFxuIDI3MjpcXHRcXHRcXHRcXHRcXHRsYXN0ID0gVUxPTkdfTUFYO1xcbiAyNzM6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjc0OlxcdFxcdFxcdFxcdFxcdGxhc3QgPSAocHJhbmRvbV91MzJfc3RhdGUoXFx1MDAyNnJuZCkgXFx1MDAzZVxcdTAwM2UgNCkgJSBtYXhfZW5kcG9pbnQ7XFxuIDI3NTpcXHRcXHRcXHRcXHRcXHRzdGFydCA9IChwcmFuZG9tX3UzMl9zdGF0ZShcXHUwMDI2cm5kKSBcXHUwMDNlXFx1MDAzZSA0KSAlIGxhc3Q7XFxuIDI3NjpcXHRcXHRcXHRcXHR9XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdFxcdFxcdG1hc19zcGFuLmZpcnN0X2luZGV4ID0gc3RhcnQ7XFxuIDI3OTpcXHRcXHRcXHRcXHRtYXNfc3Bhbi5sYXN0X2luZGV4ID0gbGFzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6MjYuNDY3ODk0NTE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzIzMzIyMjg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbnRlcnZhbCBUcmVlIFRlc3QgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHNwYW5faXRlcmF0aW9uX2NoZWNrYCBmdW5jdGlvbiB3aXRoaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBpbml0aWFsaXphdGlvbiBvZiBgdHJlZWAgd2l0aGluIHRoZSBsb29wOiBgbXRfaW5pdF9mbGFncyhcdTAwMjZ0cmVlLCBNVF9GTEFHU19BTExPQ19SQU5HRSlgIG9uIGxpbmUgMjYwLiAqSG9sZCBvbiBhIHNlY29uZCosIGlzbid0IGB0cmVlYCBhbHJlYWR5IGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIHZhcmlhYmxlLlxuXG5GaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCB0aGlzIGZpbGUgbW9yZSB0aG9yb3VnaGx5LiBXaGF0IGV4YWN0bHkgKmlzKiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYD8gQSBxdWljayByZWZyZXNoZXIgd291bGQgYmUgaGVscGZ1bCBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGlzIGNvZGUsIGFuZCBob3cgaXTigJlzIGJlaW5nIGJ1aWx0IGFuZCB1c2VkLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaG93IGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIHB1bGwgdXAgdGhlIE1ha2VmaWxlIGFuZCBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgaG93IGBpbnRlcnZhbF90cmVlX3Rlc3RgIGlzIGJ1aWx0IGFuZCB1c2VkIHdpdGhpbiB0aGUgcHJvamVjdC4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQ2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6MjkuNzAxMTE5ODkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzA1OTQ0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZXJ2YWxfdHJlZV90ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9NYWtlZmlsZT0yOTI9b2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSArPSByYnRyZWVfdGVzdC5vXFxubGliL01ha2VmaWxlOjI5MzpvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSArPSBpbnRlcnZhbF90cmVlX3Rlc3Qub1xcbmxpYi9NYWtlZmlsZS0yOTQtXFxuLS1cXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmM9MzEwPXN0YXRpYyBpbmxpbmUgaW50IHNwYW5faXRlcmF0aW9uX2NoZWNrKHZvaWQpIHtyZXR1cm4gMDsgfVxcbi0tXFxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTMxMi1cXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmM6MzEzOnN0YXRpYyBpbnQgaW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQodm9pZClcXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMzE0LXtcXG4tLVxcbmxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYy0zNTgtXFxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jOjM1OTpzdGF0aWMgdm9pZCBpbnRlcnZhbF90cmVlX3Rlc3RfZXhpdCh2b2lkKVxcbmxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYy0zNjAte1xcbi0tXFxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2My1cXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmM6MzY0Om1vZHVsZV9pbml0KGludGVydmFsX3RyZWVfdGVzdF9pbml0KVxcbmxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYzozNjU6bW9kdWxlX2V4aXQoaW50ZXJ2YWxfdHJlZV90ZXN0X2V4aXQpXFxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2Ni1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL01ha2VmaWxlLTQtXFxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGU6NTpUQVJHRVRTID0gcmJ0cmVlX3Rlc3QgaW50ZXJ2YWxfdHJlZV90ZXN0XFxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGUtNi1PRklMRVMgPSAkKFNIQVJFRF9PRklMRVMpIHJidHJlZS1zaGltLm8gaW50ZXJ2YWxfdHJlZS1zaGltLm8gbWFwbGUtc2hpbS5vXFxuLS1cXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZT0yOD1pbnRlcnZhbF90cmVlLXNoaW0ubzogQ0ZMQUdTICs9IC1EQ09ORklHX0lOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGU6Mjk6aW50ZXJ2YWxfdHJlZV90ZXN0Lm86IFxcdC4uLy4uLy4uL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY1xcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL01ha2VmaWxlOjMwOmludGVydmFsX3RyZWVfdGVzdC5vOiBDRkxBR1MgKz0gLURDT05GSUdfSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZS0zMS1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTEwLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjExOiNpbmNsdWRlIFxcXCIuLi8uLi8uLi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcXFwiXFxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMTItXFxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmM9MTM9aW50IHVzYWdlKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYy0yNS1cXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYzoyNjp2b2lkIGludGVydmFsX3RyZWVfdGVzdHModm9pZClcXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYy0yNy17XFxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmM6Mjg6XFx0aW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQoKTtcXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYzoyOTpcXHRpbnRlcnZhbF90cmVlX3Rlc3RfZXhpdCgpO1xcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTMwLX1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jPTMyPWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTU1LVxcdG1hcGxlX3RyZWVfaW5pdCgpO1xcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjU2OlxcdGludGVydmFsX3RyZWVfdGVzdHMoKTtcXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYy01Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL3Rlc3QuaD0zPXZvaWQgcmJ0cmVlX3Rlc3RzKHZvaWQpO1xcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL3Rlc3QuaDo0OnZvaWQgaW50ZXJ2YWxfdHJlZV90ZXN0cyh2b2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6MzEuODcxNzI1NzAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgxMzEzMzQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhpcyBDb21taXQ6IERpdmluZyBpbnRvIHRoZSBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdW5kZXJzdGFuZCB0aGUgKndoeSouIEZvcmdldCBqdW1waW5nIHN0cmFpZ2h0IGludG8gdGhlIGRpZmY7IEkgbmVlZCB0aGUgY29udGV4dC4gTGV0IG1lIGNoZWNrIHRoZSBjb21taXQgZGVzY3JpcHRpb24uIFdoYXQgd2FzIHRoZSB0aGlua2luZyBiZWhpbmQgdGhpcz8gV2hhdCBwcm9ibGVtIHdhcyBpdCB0cnlpbmcgdG8gc29sdmU/IE9yIG1heWJlIHRoZXJlJ3MgYSBnb29kIEdpdCBsb2cgbWVzc2FnZSBJIGNhbiBwZXJ1c2UuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RyYXRlZ3kgaGVyZSB3aWxsIGhlbHAgbWUgdG8gcXVpY2tseSBncmFzcCB3aGF0IHRoZSBkZXZlbG9wZXIgd2FzIGdvaW5nIGZvciwgYW5kIHRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcy4gV2l0aG91dCB0aGF0IGNydWNpYWwgaW5mb3JtYXRpb24sIEkgYW0ganVzdCBndWVzc2luZyBhYm91dCB0aGUgbW90aXZhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjMzLjY4NDg2MTk4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQyMTQxMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFTU0VSVF9TVEFUSUNfU1RPUkFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmg9MjU4PXN0YXRpYyBpbmxpbmUgdm9pZCAqb2Zmc2V0X3RvX3B0cihjb25zdCBpbnQgKm9mZilcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGlsZXIuaC0yNzgtLyogRW5mb3JjZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gKi9cXG5pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmg6Mjc5OiNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgtMjgwLVxcdHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZHIuaD0yNjQ9c3RydWN0IGlkYSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lkci5oLTI3NC1cXHRzdHJ1Y3QgaWRhIG5hbWUgPSBJREFfSU5JVChuYW1lKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZHIuaDoyNzU6XFx0QVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpXFxuaW5jbHVkZS9saW51eC9pZHIuaC0yNzYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaD0yNjE9c3RydWN0IG1hcGxlX3RyZWUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtMzAxLVxcdHN0cnVjdCBtYXBsZV90cmVlIG5hbWUgPSBNVFJFRV9JTklUKG5hbWUsIDApO1xcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaDozMDI6XFx0QVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpXFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtMzAzLVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oLTc2LS8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovXFxudG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oOjc3OiNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgtNzgtXFx0c3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjM1LjYyNzAxMDY3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NTI0MzcwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UgTWFjcm8gYW5kIFBhdGNoIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKWAgbWFjcm8uLi4gaXQncyBhIGNsZXZlciB0cmljay4gRXNzZW50aWFsbHksIGl0IGZvcmNlcyBhIGNvbXBpbGUtdGltZSBjaGVjayB0byBlbnN1cmUgYSB2YXJpYWJsZSBgbmFtZWAgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiBUaGUgbWFjcm8gY3JlYXRlcyBhIGBzdGF0aWNgIHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlLiBJbiBDLCB5b3UgKmNhbid0KiBpbml0aWFsaXplIGEgYHN0YXRpY2AgcG9pbnRlciB3aXRoIHRoZSBhZGRyZXNzIG9mIGFuIGF1dG9tYXRpYyAoc3RhY2spIHZhcmlhYmxlOyB0aGF0J3MgYSBjb25zdGFudCBpbml0aWFsaXplciByZXF1aXJlbWVudC4gU28sIGlmIGBuYW1lYCBpcyBhIHN0YWNrIHZhcmlhYmxlIHdpdGhpbiBhIGZ1bmN0aW9uLCB0aGUgY29tcGlsZXIgd2lsbCByaWdodGZ1bGx5IGJhcmYgd2l0aCBhIGNvbXBsYWludCBhYm91dCBhbiBcImluaXRpYWxpemVyIGVsZW1lbnQgaXMgbm90IGNvbnN0YW50XCIuIEJyaWxsaWFudC4gSWYgYG5hbWVgIGlzIGRlY2xhcmVkIHN0YXRpYywgb3IgYXQgZmlsZSBzY29wZSwgdGhlbiBpdCBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCwgYW5kIHRoZSBjaGVjayBwYXNzZXMuXG5cblNvLCB0aGlzIG1hY3JvIGlzIGEgc3RhdGljIGFzc2VydGlvbiwgYSBjb21waWxlLXRpbWUgY2hlY2suIEl0IGRvZXNuJ3QgZ2VuZXJhdGUgYW55IHJ1bnRpbWUgY29kZSwgYXMgYF9fYWx3YXlzX3VudXNlZGAgd291bGQgZW5zdXJlIHRoZSBjb21waWxlciBvcHRpbWl6ZXMgaXQgb3V0LiBUaGUgcHJpbWFyeSBpbXBhY3QgaXMgdG8gZW5mb3JjZSBwcm9wZXIgc3RvcmFnZSBkdXJhdGlvbiBmb3IgdmFyaWFibGVzIGRlY2xhcmVkIHdpdGggYERFRklORV9JREFgIGFuZCBgREVGSU5FX01UUkVFYC5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjaGFuZ2VzLCB3ZSd2ZSBnb3QgYSBuZXcgbWFjcm8sIGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgLCBpbiBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIHRoZW4gYWRkZWQgdG8gdGhlIGRlZmluaXRpb24gbWFjcm9zIGBERUZJTkVfSURBYCBpbiBgaW5jbHVkZS9saW51eC9pZHIuaGAgYW5kIGBERUZJTkVfTVRSRUVgIGluIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGAuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AuIFRoZSB0ZXN0IGNhc2UgcHJldmlvdXNseSBkZWNsYXJlZCBgREVGSU5FX01UUkVFKHRyZWUpYCBhcyBhIGxvY2FsIHZhcmlhYmxlLiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgdG8gYERFRklORV9NVFJFRWAgbm93ICpmb3JjZXMqIHRoaXMgdG8gYmUgYSBjb21waWxlLXRpbWUgZXJyb3IhIFRoZSB0ZXN0IGNhc2UgKmhhZCogdG8gYmUgY2hhbmdlZCB0byB1c2UgYSBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZWAgdmFyaWFibGUsIGluaXRpYWxpemVkIHdpdGggYG10X2luaXRfZmxhZ3NgLiBUaGlzIGlzIGJ5IGRlc2lnbiwgYW5kIGNvcnJlY3RseSBlbmZvcmNlcyB0aGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgbWFjcm8uXG5cbkFkZGl0aW9uYWxseSwgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgdGhlIHNhbWUgaXNzdWUgd2l0aCBhdXRvbWF0aWMgc3RvcmFnZSB2YXJpYWJsZXMgaW4gdGhlIGBERUZJTkVfSURBYCBtYWNybyBjYXVzZWQgc2ltaWxhciBjaGFuZ2VzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBpbnN0cnVjdGlvbnMsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBcIklzIHRoaXMgYSBjaGFuZ2UgdG8gZXhlY3V0YWJsZSBrZXJuZWwgY29kZSwgYW5kIGRvZXMgaXQgaW50cm9kdWNlIG9yIG1vZGlmeSBhc3NlcnRpb25zP1wiIFdlbGwsIGl0ICpkb2VzKiBtb2RpZnkgZXhlY3V0YWJsZSBjb2RlICh0aGUgdGVzdCBjYXNlcykgYnkgZm9yY2luZyBjaGFuZ2VzIHRvIHRoZSBkZWZpbml0aW9uIG9mIHN0b3JhZ2UuIFRoZSBhc3NlcnRpb24gaXNuJ3QgYSBydW50aW1lIGNoZWNrLCBidXQgYSBjb21waWxlLXRpbWUgYXNzZXJ0aW9uLiBJdCBzdGlsbCBmb3JjZXMgdGhlIGF1dGhvciB0byBjaG9vc2UgdGhlIGNvcnJlY3Qgc3RvcmFnZSBkdXJhdGlvbiwgd2hpY2ggbWF5IGV4cG9zZSBkZXNpZ24gY2hvaWNlcyB0aGF0IGFyZSBub3Qgb2J2aW91cyBhdCBhIGdsYW5jZS5cblxuVGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgY29kZSwgc3BlY2lmaWNhbGx5IHRlc3QgY29kZSBhbmQgc29tZSBvZiB0aGUgY29kZSBkZWZpbml0aW9ucy4gV2UndmUgZ290IGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgaW5jbHVkZSBmaWxlcyB0aGF0IGludHJvZHVjZSB0aGUgY2hlY2suIFRoZSBjaGFuZ2VzIGluIHRoZSB0b29scyBkaXJlY3RvcnkgYW5kIHRoZSB0ZXN0IGNhc2UgYXJlICpkaXJlY3RseSogYSByZXN1bHQgb2YgdGhpcyBtb2RpZmljYXRpb24uIFdoaWxlIGl0IGlzIG5vdCBhIHJ1bnRpbWUgY2hlY2ssIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBuZXcgaW52YXJpYW50IChjb3JyZWN0IHN0b3JhZ2UgZHVyYXRpb24pLCBhbmQgYnkgdGhlIGluc3RydWN0aW9ucywgZXZlbiAqY29tcGlsZS10aW1lKiBhc3NlcnRpb25zIGluICpyZWFjaGFibGUqIGNvZGUgd2FycmFudCBmdXp6aW5nLiBUaGUgdXBkYXRlZCBkZWZpbml0aW9ucyBhcmUgcmVhY2hhYmxlLCBhbmQgdGhlIHRlc3QgY2FzZSBjaGFuZ2VzIHNob3cgaXQgaXMgcmVhY2hhYmxlLlxuXG5TbywgeWVzLCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucywgdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdGhyb3VnaCBmdXp6aW5nLCBiZWNhdXNlIGl0IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBieSBlbmZvcmNpbmcgbmV3IGludmFyaWFudHMgYW5kIHRoZSBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBjYXVzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIHRob3NlIGFyZSB2aW9sYXRlZCwgdGhlcmVmb3JlIGl0IGNvdWxkIGV4cG9zZSBkZXNpZ24gaXNzdWVzIG9yIGxhdGVudCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozNzo1MC4xNTEzODUxMzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL2ludGVydmFsX3RyZWVfdGVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZXBhcmFtLmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJ2YWxfdHJlZS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByYW5kb20uaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJpbnRrLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjYXNtL3RpbWV4LmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0bWFwLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFwbGVfdHJlZS5oXFx1MDAzZVxcbiAgMTE6XFx0XFxuICAxMjpcXHQjZGVmaW5lIF9fcGFyYW0odHlwZSwgbmFtZSwgaW5pdCwgbXNnKVxcdFxcdFxcXFxcXG4gIDEzOlxcdFxcdHN0YXRpYyB0eXBlIG5hbWUgPSBpbml0O1xcdFxcdFxcXFxcXG4gIDE0OlxcdFxcdG1vZHVsZV9wYXJhbShuYW1lLCB0eXBlLCAwNDQ0KTtcXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRNT0RVTEVfUEFSTV9ERVNDKG5hbWUsIG1zZyk7XFxuICAxNjpcXHRcXG4gIDE3OlxcdF9fcGFyYW0oaW50LCBubm9kZXMsIDEwMCwgXFxcIk51bWJlciBvZiBub2RlcyBpbiB0aGUgaW50ZXJ2YWwgdHJlZVxcXCIpO1xcbiAgMTg6XFx0X19wYXJhbShpbnQsIHBlcmZfbG9vcHMsIDEwMDAsIFxcXCJOdW1iZXIgb2YgaXRlcmF0aW9ucyBtb2RpZnlpbmcgdGhlIHRyZWVcXFwiKTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0X19wYXJhbShpbnQsIG5zZWFyY2hlcywgMTAwLCBcXFwiTnVtYmVyIG9mIHNlYXJjaGVzIHRvIHRoZSBpbnRlcnZhbCB0cmVlXFxcIik7XFxuICAyMTpcXHRfX3BhcmFtKGludCwgc2VhcmNoX2xvb3BzLCAxMDAwLCBcXFwiTnVtYmVyIG9mIGl0ZXJhdGlvbnMgc2VhcmNoaW5nIHRoZSB0cmVlXFxcIik7XFxuICAyMjpcXHRfX3BhcmFtKGJvb2wsIHNlYXJjaF9hbGwsIGZhbHNlLCBcXFwiU2VhcmNoZXMgd2lsbCBpdGVyYXRlIGFsbCBub2RlcyBpbiB0aGUgdHJlZVxcXCIpO1xcbiAgMjM6XFx0XFxuICAyNDpcXHRfX3BhcmFtKHVpbnQsIG1heF9lbmRwb2ludCwgfjAsIFxcXCJMYXJnZXN0IHZhbHVlIGZvciB0aGUgaW50ZXJ2YWwncyBlbmRwb2ludFxcXCIpO1xcbiAgMjU6XFx0X19wYXJhbSh1bGxvbmcsIHNlZWQsIDMxNDE1OTI2NTM1ODk3OTMyMzhVTEwsIFxcXCJSYW5kb20gc2VlZFxcXCIpO1xcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHJvb3QgPSBSQl9ST09UX0NBQ0hFRDtcXG4gIDI4OlxcdHN0YXRpYyBzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpub2RlcyA9IE5VTEw7XFxuICAyOTpcXHRzdGF0aWMgdTMyICpxdWVyaWVzID0gTlVMTDtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0c3RhdGljIHN0cnVjdCBybmRfc3RhdGUgcm5kO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4gIDM0OlxcdHNlYXJjaChzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgKnJvb3QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGFzdClcXG4gIDM1OlxcdHtcXG4gIDM2OlxcdFxcdHN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKm5vZGU7XFxuICAzNzpcXHRcXHR1bnNpZ25lZCBsb25nIHJlc3VsdHMgPSAwO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHRmb3IgKG5vZGUgPSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3Qocm9vdCwgc3RhcnQsIGxhc3QpOyBub2RlO1xcbiAgNDA6XFx0XFx0ICAgICBub2RlID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQobm9kZSwgc3RhcnQsIGxhc3QpKVxcbiAgNDE6XFx0XFx0XFx0cmVzdWx0cysrO1xcbiAgNDI6XFx0XFx0cmV0dXJuIHJlc3VsdHM7XFxuICA0MzpcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdHN0YXRpYyB2b2lkIGluaXQodm9pZClcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdGludCBpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbm5vZGVzOyBpKyspIHtcXG4gIDUwOlxcdFxcdFxcdHUzMiBiID0gKHByYW5kb21fdTMyX3N0YXRlKFxcdTAwMjZybmQpIFxcdTAwM2VcXHUwMDNlIDQpICUgbWF4X2VuZHBvaW50O1xcbiAgNTE6XFx0XFx0XFx0dTMyIGEgPSAocHJhbmRvbV91MzJfc3RhdGUoXFx1MDAyNnJuZCkgXFx1MDAzZVxcdTAwM2UgNCkgJSBiO1xcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHRcXHRub2Rlc1tpXS5zdGFydCA9IGE7XFxuICA1NDpcXHRcXHRcXHRub2Rlc1tpXS5sYXN0ID0gYjtcXG4gIDU1OlxcdFxcdH1cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0LypcXG4gIDU4OlxcdFxcdCAqIExpbWl0IHRoZSBzZWFyY2ggc2NvcGUgdG8gd2hhdCB0aGUgdXNlciBkZWZpbmVkLlxcbiAgNTk6XFx0XFx0ICogT3RoZXJ3aXNlIHdlIGFyZSBtZXJlbHkgbWVhc3VyaW5nIGVtcHR5IHdhbGtzLFxcbiAgNjA6XFx0XFx0ICogd2hpY2ggaXMgcG9pbnRsZXNzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozNzo1MC4xNTE0NzY2MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjgxMDAwODA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIgb2YgYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgcmVzdCBvZiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYC4gSSd2ZSBhbHJlYWR5IGV4YW1pbmVkIHNvbWUgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW5kIEknbSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHRlc3Qgc3VpdGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkncmUgaGFuZGxpbmcgZWRnZSBjYXNlcywgYm91bmRhcnkgY29uZGl0aW9ucywgYW5kIHBvdGVudGlhbCBlcnJvciBzY2VuYXJpb3MuIEFyZSB0aGV5IHRob3JvdWdobHkgdGVzdGluZyB0aGUgaW5zZXJ0aW9uLCBkZWxldGlvbiwgc2VhcmNoaW5nLCBhbmQgb3ZlcmxhcHBpbmcgaW50ZXJ2YWwgZnVuY3Rpb25hbGl0aWVzPyBJIHdhbnQgdG8gc2VlIGlmIHRoZSB0ZXN0cyBjb3ZlciBhIHdpZGUgcmFuZ2Ugb2YgaW50ZXJ2YWwgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBlbXB0eSBpbnRlcnZhbHMsIHNpbmdsZS1wb2ludCBpbnRlcnZhbHMsIGFuZCBoZWF2aWx5IG92ZXJsYXBwaW5nIGludGVydmFscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHJvYnVzdGx5IHRoZSB0ZXN0cyB2YWxpZGF0ZSB0aGUgdHJlZSdzIGludGVybmFsIGNvbnNpc3RlbmN5IGFmdGVyIGVhY2ggb3BlcmF0aW9uLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0ZWNobmlxdWVzIHRoZXkncmUgdXNpbmcgdG8gc2ltcGxpZnkgdGhlIHRlc3QgY29kZSwgcGVyaGFwcyB0aHJvdWdoIG1hY3JvIHVzYWdlIG9yIGhlbHBlciBmdW5jdGlvbnM/IFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gYXNzZXNzIHRoZSBjb21wbGV0ZW5lc3MgYW5kIHF1YWxpdHkgb2YgdGhlc2UgdGVzdHMuIFRoaXMgZXhhbWluYXRpb24gd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWRlbmNlIGxldmVsIHRoaXMgcHJvamVjdCBoYXMgaW4gaXRzIGludGVydmFsIHRyZWUgaW1wbGVtZW50YXRpb24uIEknbSBrZWVuIHRvIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZW5lc3Mgb2YgdGhpcyB0ZXN0aW5nIGFwcHJvYWNoLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IG9yLCBjb252ZXJzZWx5LCBzb2xpZCBkZXNpZ24gY2hvaWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjUyLjk2MTQ4Nzg3M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcbiAzMDE6XFx0XFx0XFx0LyogQ2xlYW51cCBtYXBsZSB0cmVlIGZvciBlYWNoIHJvdW5kICovXFxuIDMwMjpcXHRcXHRcXHRtdHJlZV9kZXN0cm95KFxcdTAwMjZ0cmVlKTtcXG4gMzAzOlxcdFxcdFxcdC8qIENsZWFudXAgaW50ZXJ2YWwgdHJlZSBmb3IgZWFjaCByb3VuZCAqL1xcbiAzMDQ6XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ub2RlczsgaisrKVxcbiAzMDU6XFx0XFx0XFx0XFx0aW50ZXJ2YWxfdHJlZV9yZW1vdmUobm9kZXMgKyBqLCBcXHUwMDI2cm9vdCk7XFxuIDMwNjpcXHRcXHR9XFxuIDMwNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzA4OlxcdH1cXG4gMzA5OlxcdCNlbHNlXFxuIDMxMDpcXHRzdGF0aWMgaW5saW5lIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKSB7cmV0dXJuIDA7IH1cXG4gMzExOlxcdCNlbmRpZlxcbiAzMTI6XFx0XFxuIDMxMzpcXHRzdGF0aWMgaW50IGludGVydmFsX3RyZWVfdGVzdF9pbml0KHZvaWQpXFxuIDMxNDpcXHR7XFxuIDMxNTpcXHRcXHRpZiAobm5vZGVzIFxcdTAwM2M9IDApIHtcXG4gMzE2OlxcdFxcdFxcdHByX3dhcm4oXFxcIm5ub2RlcyBtdXN0IGJlIHBvc2l0aXZlXFxcXG5cXFwiKTtcXG4gMzE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTg6XFx0XFx0fVxcbiAzMTk6XFx0XFx0aWYgKG5zZWFyY2hlcyBcXHUwMDNjPSAwKSB7XFxuIDMyMDpcXHRcXHRcXHRwcl93YXJuKFxcXCJuc2VhcmNoZXMgbXVzdCBiZSBwb3NpdGl2ZVxcXFxuXFxcIik7XFxuIDMyMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzIyOlxcdFxcdH1cXG4gMzIzOlxcdFxcdGlmIChwZXJmX2xvb3BzIFxcdTAwM2M9IDApIHtcXG4gMzI0OlxcdFxcdFxcdHByX3dhcm4oXFxcInBlcmZfbG9vcHMgbXVzdCBiZSBwb3NpdGl2ZVxcXFxuXFxcIik7XFxuIDMyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzI2OlxcdFxcdH1cXG4gMzI3OlxcdFxcdGlmIChzZWFyY2hfbG9vcHMgXFx1MDAzYz0gMCkge1xcbiAzMjg6XFx0XFx0XFx0cHJfd2FybihcXFwic2VhcmNoX2xvb3BzIG11c3QgYmUgcG9zaXRpdmVcXFxcblxcXCIpO1xcbiAzMjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzMDpcXHRcXHR9XFxuIDMzMTpcXHRcXHRpZiAobWF4X2VuZHBvaW50IFxcdTAwM2MgMikge1xcbiAzMzI6XFx0XFx0XFx0cHJfd2FybihcXFwibWF4X2VuZHBvaW50IG11c3QgYmUgYXQgbGVhc3QgMlxcXFxuXFxcIik7XFxuIDMzMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0bm9kZXMgPSBrbWFsbG9jX29ianMoc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSwgbm5vZGVzKTtcXG4gMzM3OlxcdFxcdGlmICghbm9kZXMpXFxuIDMzODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0cXVlcmllcyA9IGttYWxsb2NfYXJyYXkobnNlYXJjaGVzLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7XFxuIDM0MTpcXHRcXHRpZiAoIXF1ZXJpZXMpIHtcXG4gMzQyOlxcdFxcdFxcdGtmcmVlKG5vZGVzKTtcXG4gMzQzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRwcmFuZG9tX3NlZWRfc3RhdGUoXFx1MDAyNnJuZCwgc2VlZCk7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGJhc2ljX2NoZWNrKCk7XFxuIDM0OTpcXHRcXHRzZWFyY2hfY2hlY2soKTtcXG4gMzUwOlxcdFxcdGludGVyc2VjdGlvbl9yYW5nZV9jaGVjaygpO1xcbiAzNTE6XFx0XFx0c3Bhbl9pdGVyYXRpb25fY2hlY2soKTtcXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0a2ZyZWUocXVlcmllcyk7XFxuIDM1NDpcXHRcXHRrZnJlZShub2Rlcyk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdHJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi9cXG4gMzU3OlxcdH1cXG4gMzU4OlxcdFxcbiAzNTk6XFx0c3RhdGljIHZvaWQgaW50ZXJ2YWxfdHJlZV90ZXN0X2V4aXQodm9pZClcXG4gMzYwOlxcdHtcXG4gMzYxOlxcdFxcdHByaW50ayhLRVJOX0FMRVJUIFxcXCJ0ZXN0IGV4aXRcXFxcblxcXCIpO1xcbiAzNjI6XFx0fVxcbiAzNjM6XFx0XFxuIDM2NDpcXHRtb2R1bGVfaW5pdChpbnRlcnZhbF90cmVlX3Rlc3RfaW5pdClcXG4gMzY1OlxcdG1vZHVsZV9leGl0KGludGVydmFsX3RyZWVfdGVzdF9leGl0KVxcbiAzNjY6XFx0XFxuIDM2NzpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDM2ODpcXHRNT0RVTEVfQVVUSE9SKFxcXCJNaWNoZWwgTGVzcGluYXNzZVxcXCIpO1xcbiAzNjk6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJJbnRlcnZhbCBUcmVlIHRlc3RcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6NTIuOTYxNTgwNDEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc5NDEwNjgzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGludGVydmFsX3RyZWVfdGVzdC5jYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBsb29raW5nIGF0IGBpbnRlcnZhbF90cmVlX3Rlc3QuY2AuIEl0J3MgYSBzdGFuZGFsb25lIHRlc3QgbW9kdWxlLCB3aGljaCBpcyBnb29kLiBUaGUgZmFjdCB0aGF0IGBpbnRlcnZhbF90cmVlX3Rlc3RfaW5pdGAgcmV0dXJucyBgLUVBR0FJTmAgYW5kIGlzIGRlc2lnbmVkIHRvIHVubG9hZCB0aGUgbW9kdWxlIGlmIGl0IGZhaWxzIGlzIGludGVyZXN0aW5nLiBCdXQsIGlzIHRoaXMgZXZlbiBhIGZ1enppbmcgdGFyZ2V0PyBJcyBpdCAqbWVhbnQqIHRvIGJlIGhpdCBieSBzeXprYWxsZXI/IFNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgaWYgaW50ZW5kZWQuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoaXMgYERFRklORV9NVFJFRSh0cmVlKWAgbWFjcm8uIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNoYW5nZWQgaXQgZnJvbSBgREVGSU5FX01UUkVFKHRyZWUpYCB0byBkZWNsYXJpbmcgaXQgYXMgYHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7YC4gQWhhISBUaGUgYERFRklORV9NVFJFRWAgd2FzIHVzZWQgbG9jYWxseSwgaW4gYHNwYW5faXRlcmF0aW9uX2NoZWNrKClgLiBTbyB0aGlzIGlzIGFib3V0IGhvdyB0aGUgYHRyZWVgIHZhcmlhYmxlIGlzIGRlZmluZWQuIFRoZSBtYWNybyBub3cgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4jZGVmaW5lIERFRklORV9NVFJFRShuYW1lKVx0XHRcdFx0XHRcdFxcXG5cdHN0cnVjdCBtYXBsZV90cmVlIG5hbWUgPSBNVFJFRV9JTklUKG5hbWUsIDApO1x0XHRcXFxuXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbmBgYFxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjaywgYW5kICpyZWFsbHkqIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBwYXRjaC4gSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIGtub3cgd2h5IGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgIHdhcyBhZGRlZC4gTGV0J3MgbGlzdCB0aGUgKmVudGlyZSogc2V0IG9mIGZpbGVzIHRoaXMgcGF0Y2ggdG91Y2hlcywgYmVjYXVzZSB0aGF0J3MgYWx3YXlzIGNydWNpYWw6XG5cbjEuICBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYFxuMi4gIGBpbmNsdWRlL2xpbnV4L2lkci5oYFxuMy4gIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGBcbjQuICBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYFxuNS4gIGB0b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhgXG42LiAgYHRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jYFxuNy4gIGB0b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY2BcblxuT2theSwgdGhpcyB0b3VjaGVzIGNvbXBpbGVyIGhlYWRlcnMsIElEUiwgTWFwbGUgVHJlZSwgdGhlIHRlc3QgZmlsZSwgYW5kIHNvbWUgdG9vbHMuIFRoZSBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBhZGRpdGlvbiBpcyBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoYXQncyB0aGVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvbW1pdCBtZXNzYWdlLCBoaXN0b3J5LCBhbmQgc2ltaWxhciBvY2N1cnJlbmNlcyBvZiB0aGF0IG1hY3JvLiBJZiBJIGNvdWxkLCBJJ2QgcnVuIGEgYGdpdCBsb2cgLW4gNWAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJ1dCwgc2luY2UgSSBjYW4ndCBkbyB0aGF0IGRpcmVjdGx5LCBJJ2xsIHNlYXJjaCBmb3Igc2ltaWxhciBjb21waWxlLXRpbWUgY2hlY2tzIHdpdGhpbiB0aGUgYGluY2x1ZGUvbGludXhgIGRpcmVjdG9yeSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24sIGhvcGVmdWxseSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozODowMC45MDI2NTE1NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjU4Njg4NzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFRklORV8uKlNUQVRJQ19TVE9SQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozODowMy4yMjg1MzA4NjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIzNTg2MDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyBiZWluZyB1dGlsaXplZCBhbmQgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIGp1bXAgc3RyYWlnaHQgaW50byBzZWFyY2hpbmcgdGhlIGdpdCBsb2cgYW5kIGNvbW1lbnRzIGZvciB0aGF0IHNwZWNpZmljIHRlcm0sIGJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHRoYXQgbWlnaHQgYmUgdG9vIGRpcmVjdC4gTGV0J3MgYnJvYWRlbiB0aGUgc2VhcmNoIGEgYml0LiBQZXJoYXBzIGBERUZJTkVfSURBYCBpcyByZWxhdGVkLCBnaXZlbiBpdHMgbmFtaW5nIGNvbnZlbnRpb24uIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBjaGVjayB3aGVyZSBhIG1hY3JvIGlzICp1c2VkKiByYXRoZXIgdGhhbiBqdXN0IHdoZXJlIGl0J3MgZGVmaW5lZC4gVGhlcmVmb3JlLCBJIHdpbGwgY2hlY2sgd2hlcmUgYERFRklORV9JREFgIGlzIGJlaW5nIGNhbGxlZCBhbmQgd2hlcmUgaXQncyB1c2VkOyB0aGF0IHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgdGhhdCBJIG1heSBiZSBtaXNzaW5nIGlmIEkganVzdCBzZWFyY2ggZm9yIHRoZSBzcGVjaWZpYyB0ZXJtLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBob3cgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzg6MDUuNDY0Mzk0MzA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1MzM2NzExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgdHlwZW9mLipfc3RvcmFnZV9jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzg6MDguMTE5NzQxNTM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcwNjQ0NjgwMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFIE1hY3JvIGFuZCBpdHMgSW1wYWN0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlgIG1hY3JvLi4uIEkgc2VlIGl0J3MgZGVzaWduZWQgdG8gZW5mb3JjZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBmb3IgY2VydGFpbiBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgd2l0aCBgREVGSU5FX0lEQWAgb3IgYERFRklORV9NVFJFRWAuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgdGhlc2UgZnJvbSBiZWluZyBkZWNsYXJlZCBhcyBhdXRvbWF0aWMgKHN0YWNrKSB2YXJpYWJsZXMsIHdoaWNoIGlzIGdlbmVyYWxseSBpbmNvcnJlY3QgdXNhZ2UgZm9yIHRoZXNlIG1hY3JvcyBpbiB0aGUgTGludXgga2VybmVsIGNvbnZlbnRpb25zLlxuXG5UaGUgY29yZSBvZiB0aGUgbWFjcm8gaXMgdGhpczogYHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgbmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcdTAwMjYobmFtZSk7YC4gSXQncyBhIGNvbXBpbGUtdGltZSBjaGVjaywgcHVyZWx5LiBJdCBkb2VzICpub3QqIGdlbmVyYXRlIGFueSBydW50aW1lIGluc3RydWN0aW9ucy4gSXQgZGVjbGFyZXMgYSBzdGF0aWMgcG9pbnRlciBuYW1lZCBgbmFtZSMjX3N0b3JhZ2VfY2hlY2tgIGluaXRpYWxpemVkIHRvIHRoZSBhZGRyZXNzIG9mIGBuYW1lYC4gVGhlIGBfX2Fsd2F5c191bnVzZWRgIGF0dHJpYnV0ZSB0ZWxscyB0aGUgY29tcGlsZXIgdG8gbm90IHdhcm4gaWYgdGhpcyBzdGF0aWMgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZCAod2hpY2ggaXQgaXNuJ3QsIGFzIHRoZSBjaGVjayBoYXBwZW5zIGF0IGNvbXBpbGUgdGltZSkuIElmIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGBERUZJTkVfSURBYCBvciBgREVGSU5FX01UUkVFYCBvbiB0aGUgc3RhY2ssIHRoaXMgaW5pdGlhbGl6YXRpb24gd2lsbCBmYWlsLCB0cmlnZ2VyaW5nIGFuIFwiaW5pdGlhbGl6ZXIgZWxlbWVudCBpcyBub3QgYSBjb25zdGFudFwiIGVycm9yLlxuXG5Ob3csIHRoYXQgYnJpbmdzIG1lIHRvIHRoZSByZWNlbnQgY2hhbmdlIGluIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgLiBUaGUgdGVzdCB1c2VkIHRvIGluaXRpYWxpemUgYSBgbWFwbGVfdHJlZSB0cmVlYCB3aXRoIGBNVFJFRV9JTklUKHRyZWUsIDApYCwgd2hpY2ggZXhwYW5kZWQgdG8gc29tZXRoaW5nIGxpa2UgYHN0cnVjdCBtYXBsZV90cmVlIHRyZWUgPSBNVFJFRV9JTklUKHRyZWUsIDApO2AuIFRoYXQncyBiZWVuIHJlbW92ZWQgaW4gdGhlIHJlZmFjdG9yLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gSXQgdHVybnMgb3V0IHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtYXBsZV90cmVlYCBpcyAqcmVkdW5kYW50KiwgYmVjYXVzZSBpbnNpZGUgdGhlIGxvb3AgaW4gYHNwYW5faXRlcmF0aW9uX2NoZWNrYCwgZm9yIGV2ZXJ5IHJvdW5kLCBgbXRfaW5pdF9mbGFncyhcdTAwMjZ0cmVlLCBNVF9GTEFHU19BTExPQ19SQU5HRSlgIGlzIGNhbGxlZCBhbnl3YXkgKmJlZm9yZSogYHRyZWVgIGlzIGFjY2Vzc2VkIGZvciB0aGUgZmlyc3QgdGltZS4gVGhlIGBtdHJlZV9kZXN0cm95YCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGxvb3AgdG8gY2xlYW4gaXQgdXAuXG5cblNvLCB0aGUgb3JpZ2luYWwgYD0gTVRSRUVfSU5JVCh0cmVlLCAwKWAgd2FzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnksIGFuZCByZW1vdmluZyBpdCBtYWtlcyBubyBkaWZmZXJlbmNlIGF0IHJ1bnRpbWUuIFRoaXMgd2hvbGUgZmlsZSBpcyBhICp0ZXN0IG1vZHVsZSosIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDY3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM5OjE4Ljc2NDQyNDE3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NzAxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5URVJWQUxfVFJFRV9URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0yMzk4PWNvbmZpZyBSRUVEX1NPTE9NT05fVEVTVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjQwOS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyNDEwOmNvbmZpZyBJTlRFUlZBTF9UUkVFX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNDExLVxcdHRyaXN0YXRlIFxcXCJJbnRlcnZhbCB0cmVlIHRlc3RcXFwiXFxuLS1cXG5saWIvTWFrZWZpbGU9MjkyPW9iai0kKENPTkZJR19SQlRSRUVfVEVTVCkgKz0gcmJ0cmVlX3Rlc3Qub1xcbmxpYi9NYWtlZmlsZToyOTM6b2JqLSQoQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCkgKz0gaW50ZXJ2YWxfdHJlZV90ZXN0Lm9cXG5saWIvTWFrZWZpbGUtMjk0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozOToxOC44MjMzMDMzNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjExNjE5ODk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIERlYnVnIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgZGVidWdnaW5nIGlzc3VlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgbGliL0tjb25maWcuZGVidWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNDEwLiBUaGF0IGxvY2F0aW9uIHR5cGljYWxseSBob3VzZXMgY29uZmlndXJhdGlvbnMgdGhhdCBjb250cm9sIHZhcmlvdXMgZGVidWctcmVsYXRlZCBmZWF0dXJlcyB3aXRoaW4gdGhlIGtlcm5lbCwgc28gaXQncyBhIHByaW1lIHN1c3BlY3QgZm9yIGZpbmRpbmcgdGhlIHJlbGV2YW50IG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGJlaGF2aW9yLiBJdCdzIGEgc3lzdGVtYXRpYyBhcHByb2FjaDogc3RhcnQgd2l0aCB0aGUgbGlrZWx5IGNhbmRpZGF0ZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHRoZSBhcmVhIHRoYXQgSSBhbnRpY2lwYXRlIHdvdWxkIGJlIG1vc3QgcmVsZXZhbnQuIFRpbWUgdG8gc2VlIHdoYXQncyBzZXQgdXAgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzk6MjAuOTM5NTA1ODk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDA1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgc2VsZi10ZXN0IGZ1bmN0aW9uIG9mIHJzbGliIGF0IGJvb3QsXFxuMjQwNjpcXHRcXHQgIG9yIGF0IG1vZHVsZSBsb2FkIHRpbWUuXFxuMjQwNzpcXHRcXG4yNDA4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4yNDA5OlxcdFxcbjI0MTA6XFx0Y29uZmlnIElOVEVSVkFMX1RSRUVfVEVTVFxcbjI0MTE6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVydmFsIHRyZWUgdGVzdFxcXCJcXG4yNDEyOlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxuMjQxMzpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbjI0MTQ6XFx0XFx0aGVscFxcbjI0MTU6XFx0XFx0ICBBIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnRlcnZhbCB0cmVlIGxpYnJhcnlcXG4yNDE2OlxcdFxcbjI0MTc6XFx0Y29uZmlnIFBFUkNQVV9URVNUXFxuMjQxODpcXHRcXHR0cmlzdGF0ZSBcXFwiUGVyIGNwdSBvcGVyYXRpb25zIHRlc3RcXFwiXFxuMjQxOTpcXHRcXHRkZXBlbmRzIG9uIG0gXFx1MDAyNlxcdTAwMjYgREVCVUdfS0VSTkVMXFxuMjQyMDpcXHRcXHRoZWxwXFxuMjQyMTpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBidWlsZCB0ZXN0IG1vZHVsZSB3aGljaCB2YWxpZGF0ZXMgcGVyLWNwdVxcbjI0MjI6XFx0XFx0ICBvcGVyYXRpb25zLlxcbjI0MjM6XFx0XFxuMjQyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMjQyNTpcXHRcXG4yNDI2OlxcdGNvbmZpZyBBVE9NSUM2NF9TRUxGVEVTVFxcbjI0Mjc6XFx0XFx0dHJpc3RhdGUgXFxcIlBlcmZvcm0gYW4gYXRvbWljNjRfdCBzZWxmLXRlc3RcXFwiXFxuMjQyODpcXHRcXHRoZWxwXFxuMjQyOTpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IHRoZSBhdG9taWM2NF90IGZ1bmN0aW9ucyBhdCBib290IG9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM5OjIwLjkzOTc0MzEzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTA5NDEzMjQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgSW50ZXJ2YWwgVHJlZSBUZXN0IGFuZCBXb3J0aEZ1enppbmcgRGV0ZXJtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQncyBcIldvcnRoRnV6emluZ1wiLiBGaXJzdCwgbGV0J3MgYnJlYWsgZG93biB0aGUgYElOVEVSVkFMX1RSRUVfVEVTVGAuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiZW5jaG1hcmssIGJ1aWx0IGVpdGhlciBhcyBhIG1vZHVsZSBvciBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBgV29ydGhGdXp6aW5nYCBiZWNhdXNlIHRoaXMgdGVzdCBpcyBpbiBgbGliL2AuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc2F5cyB0aGUgZm9sbG93aW5nOiBgVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5gXG5cblNvLCBpcyBpdD9cblxuT2theSwgc28gbGV0J3MgY2hlY2sgdGhlIGNvZGU6IGBtb2R1bGVfaW5pdChpbnRlcnZhbF90cmVlX3Rlc3RfaW5pdClgIHNheXMgdGhhdCBpdCdzIGEgbW9kdWxlLiBCdXQgZXZlbiBiZXR0ZXIgdGhhbiB0aGF0LCBpdCBpcyBpbiBgbGliL2Agd2hpY2ggdGVsbHMgbWUgaXQncyBub3QgdXNlci1zcGFjZS5cblxuQWgsIHRoZSB0ZXN0IGltbWVkaWF0ZWx5IHVubG9hZHMgaXRzZWxmIHdpdGggYC1FQUdBSU5gLiBObyBzeXNjYWxscywgbm90aGluZyBleHBvc2VkLiBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYERFRklORV9NVFJFRSh0cmVlKWAgd2l0aCBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZTtgLiBOb3csIHRoaXMgY2hhbmdlIHdhcyBkb25lIHRvIG1ha2UgdGhpcyB0ZXN0IGNvbXBpbGUgd2hlbiBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCB3YXMgYWRkZWQgdG8gYERFRklORV9NVFJFRWAuXG5cbk9rYXksIHNvIGxvb2tpbmcgdGhyb3VnaCB0aGUgY2hhbmdlLCBgTUFfU1RBVEUobWFzLCBcdTAwMjZ0cmVlLCAwLCAwKWAgc2V0cyB0aGUgbWFwbGUgdHJlZSBzdGF0ZSB0byBwb2ludCB0byB0aGUgYWRkcmVzcyBvZiBgdHJlZWAsIGJ1dCBkb2Vzbid0IGRlcmVmZXJlbmNlIGl0LiBTbywgdGhlcmUgaXMgbm8gaXNzdWUgb2YgdGhlIHN0cnVjdHVyZSBiZWluZyB1bmluaXRpYWxpemVkLlxuXG5UaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBpczogV2FzIHRoZSBjaGFuZ2UgbWFkZSBvbiBleGVjdXRhYmxlIGNvZGU/XG5cbkkgbmVlZCB0byByZWZlciB0byBzZWN0aW9uIDMgbm93LiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBydW50aW1lIGFzc2VydGlvbnMsIHN1Y2ggYXMgYFdBUk5fT04qYCBvciBgQlVHX09OKmAsIHdhcnJhbnQgZnV6emluZy4gQnV0IHRoZSBrZXkgdGhpbmcgaXMgdGhhdCBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyBOT1QgYSBydW50aW1lIGFzc2VydGlvbi4gSXQncyBhICpjb21waWxlLXRpbWUqIGFzc2VydGlvbi4gSXQgcHJvZHVjZXMgbm8gYWN0dWFsIGV4ZWN1dGFibGUgY29kZS4gSXQncyBhIGNvbXBpbGUtdGltZSBjaGVjayB0aGF0IGVuc3VyZXMgdGhlIHZhcmlhYmxlIGhhcyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gVGhlIGNoYW5nZSBhZmZlY3RzIGluY2x1ZGUgZmlsZXMgKGBjb21waWxlci5oYCwgYGlkci5oYCwgYW5kIGBtYXBsZV90cmVlLmhgKSwgYW5kIHVzZXItc3BhY2UgdGVzdHMsIGJ1dCB3aGF0IGFib3V0IHRoZSBrZXJuZWw/XG5cbkxvb2tpbmcgYmFjayBhdCB0aGUgc2VjdGlvbnMsIEkgbmVlZCB0byBzZWUgaWYgdGhlIGNoYW5nZXMgYXJlICpyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlKi4gSXMgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbW9kaWZ5aW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGU/IEkgbmVlZCB0byBjaGVjazogd2hhdCBjb2RlIGlzIGdlbmVyYXRlZD8gU2luY2UgdGhpcyBpcyBhIGNoZWNrIGF0IGNvbXBpbGUgdGltZSB1c2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgaXQgd2lsbCBub3QgcHJvZHVjZSBhbnkgZXhlY3V0YWJsZSBjb2RlLiBTbyBpdCdzIG5vdCBhIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZ1enplZC5cblxuQW5kIHRoZW4gSSBsb29rIGF0IHRoZSB3b3JkaW5nIGZyb20gdGhlIHByb21wdC4gSXQgc2F5czogXCJOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOiBbLi4uXSB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIgU28sIGJlY2F1c2UgdGhlIGNoYW5nZSBpcyBub3QgaW4gZXhlY3V0YWJsZSBjb2RlIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLCBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGlzIGlzIG5vdCBzb21ldGhpbmcgSSBuZWVkIHRvIGV2YWx1YXRlLiBGaW5hbGx5LCBpdCBtYWtlcyBzdXJlIHRvIGFzayBhYm91dCBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYDogRG9lcyBzeXprYWxsZXIgZnV6eiBgQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVGA/IEdpdmVuIHdoYXQgSSBoYXZlIGRlc2NyaWJlZCBJIHdvdWxkIGFzc3VtZSBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTY5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM5OjMyLjAzMzg3NzkxMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMTgwMTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUZJTkVfSURBXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTMxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9ODM9c3RhdGljIGVudW0gY3B1aHBfc3RhdGUgY3B1aHBfbW1kY19zdGF0ZTtcXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6ODQ6c3RhdGljIERFRklORV9JREEobW1kY19pZGEpO1xcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy04NS1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIzODg9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjU4MS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoyNTgyOnN0YXRpYyBERUZJTkVfSURBKGxwaWRfaW51c2UpO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI1ODMtc3RhdGljIHVuc2lnbmVkIGxvbmcgbnJfbHBpZHM7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0yNi1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShtbXVfY29udGV4dF9pZGEpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTI4LVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTU4PXN0YXRpYyB1MzIgdGR4X25yX2d1ZXN0X2tleWlkcyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU5LVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo2MDpzdGF0aWMgREVGSU5FX0lEQSh0ZHhfZ3Vlc3Rfa2V5aWRfcG9vbCk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTYxLVxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYz02Mj1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGJsb2NrX3JxX2luc2VydCk7XFxuYmxvY2svYmxrLWNvcmUuYy02My1cXG5ibG9jay9ibGstY29yZS5jOjY0OnN0YXRpYyBERUZJTkVfSURBKGJsa19xdWV1ZV9pZGEpO1xcbmJsb2NrL2Jsay1jb3JlLmMtNjUtXFxuLS1cXG5ibG9jay9ic2cuYz0zNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBic2dfZGV2aWNlICp0b19ic2dfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5ibG9jay9ic2cuYy00Mi1cXG5ibG9jay9ic2cuYzo0MzpzdGF0aWMgREVGSU5FX0lEQShic2dfbWlub3JfaWRhKTtcXG5ibG9jay9ic2cuYy00NC1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGJzZ19jbGFzcztcXG4tLVxcbmJsb2NrL2dlbmhkLmM9NTM9c3RhdGljIGF0b21pYzY0X3QgZGlza3NlcTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNTYtI2RlZmluZSBOUl9FWFRfREVWVFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIE1JTk9SQklUUylcXG5ibG9jay9nZW5oZC5jOjU3OnN0YXRpYyBERUZJTkVfSURBKGV4dF9kZXZ0X2lkYSk7XFxuYmxvY2svZ2VuaGQuYy01OC1cXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jPTgzPXN0YXRpYyBib29sIGxpbmtfdXA7XFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM6ODQ6c3RhdGljIERFRklORV9JREEocWFpY191c3JzKTtcXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYy04NS1cXG4tLVxcbmRyaXZlcnMvYWNwaS9wZnJfdGVsZW1ldHJ5LmM9Njg9c3RhdGljIGNvbnN0IGd1aWRfdCBwZnJ0X2xvZ19ndWlkID1cXG4tLVxcbmRyaXZlcnMvYWNwaS9wZnJfdGVsZW1ldHJ5LmMtNzEtXFxuZHJpdmVycy9hY3BpL3Bmcl90ZWxlbWV0cnkuYzo3MjpzdGF0aWMgREVGSU5FX0lEQShwZnJ0X2xvZ19pZGEpO1xcbmRyaXZlcnMvYWNwaS9wZnJfdGVsZW1ldHJ5LmMtNzMtXFxuLS1cXG5kcml2ZXJzL2FjcGkvcGZyX3VwZGF0ZS5jPTgxPXN0cnVjdCBwZnJ1X2RldmljZSB7XFxuLS1cXG5kcml2ZXJzL2FjcGkvcGZyX3VwZGF0ZS5jLTg2LVxcbmRyaXZlcnMvYWNwaS9wZnJfdXBkYXRlLmM6ODc6c3RhdGljIERFRklORV9JREEocGZydV9pZGEpO1xcbmRyaXZlcnMvYWNwaS9wZnJfdXBkYXRlLmMtODgtXFxuLS1cXG5kcml2ZXJzL2FjcGkvcGxhdGZvcm1fcHJvZmlsZS5jPTQzPXN0YXRpY19hc3NlcnQoQVJSQVlfU0laRShwcm9maWxlX25hbWVzKSA9PSBQTEFURk9STV9QUk9GSUxFX0xBU1QpO1xcbmRyaXZlcnMvYWNwaS9wbGF0Zm9ybV9wcm9maWxlLmMtNDQtXFxuZHJpdmVycy9hY3BpL3BsYXRmb3JtX3Byb2ZpbGUuYzo0NTpzdGF0aWMgREVGSU5FX0lEQShwbGF0Zm9ybV9wcm9maWxlX2lkYSk7XFxuZHJpdmVycy9hY3BpL3BsYXRmb3JtX3Byb2ZpbGUuYy00Ni1cXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJmcy5jPTU4PXN0YXRpYyBERUZJTkVfTVVURVgoYmluZGVyZnNfbWlub3JzX211dGV4KTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyZnMuYzo1OTpzdGF0aWMgREVGSU5FX0lEQShiaW5kZXJmc19taW5vcnMpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJmcy5jLTYwLVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcmZzLmM9NDU9c3RhdGljIERFRklORV9NVVRFWChiaW5kZXJmc19taW5vcnNfbXV0ZXgpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJmcy5jOjQ2OnN0YXRpYyBERUZJTkVfSURBKGJpbmRlcmZzX21pbm9ycyk7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcmZzLmMtNDctXFxuLS1cXG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jPTgwPXN0YXRpYyB1NjQgYXRhX2Rldl9nZXRfcXVpcmtfdmFsdWUoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdTY0IHF1aXJrKTtcXG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jLTgxLVxcbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmM6ODI6c3RhdGljIERFRklORV9JREEoYXRhX2lkYSk7XFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYy04My1cXG4tLVxcbmRyaXZlcnMvYXRhL3BhdGFfcGFycG9ydC9wYXRhX3BhcnBvcnQuYz0xND1zdGF0aWMgREVGSU5FX0lEUihwcm90b2NvbHMpO1xcbmRyaXZlcnMvYXRhL3BhdGFfcGFycG9ydC9wYXRhX3BhcnBvcnQuYzoxNTpzdGF0aWMgREVGSU5FX0lEQShwYXRhX3BhcnBvcnRfYnVzX2Rldl9pZHMpO1xcbmRyaXZlcnMvYXRhL3BhdGFfcGFycG9ydC9wYXRhX3BhcnBvcnQuYy0xNi1zdGF0aWMgREVGSU5FX01VVEVYKHBpX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9saW5lLWRpc3BsYXkuYz0zNjI9X19BVFRSSUJVVEVfR1JPVVBTKGxpbmVkaXNwKTtcXG5kcml2ZXJzL2F1eGRpc3BsYXkvbGluZS1kaXNwbGF5LmMtMzYzLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9saW5lLWRpc3BsYXkuYzozNjQ6c3RhdGljIERFRklORV9JREEobGluZWRpc3BfaWQpO1xcbmRyaXZlcnMvYXV4ZGlzcGxheS9saW5lLWRpc3BsYXkuYy0zNjUtXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYy0zOS0vKiBGb3IgYXV0b21hdGljYWxseSBhbGxvY2F0ZWQgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jOjQwOnN0YXRpYyBERUZJTkVfSURBKHBsYXRmb3JtX2RldmlkX2lkYSk7XFxuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMtNDEtXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM9Njk9c3RhdGljIHN0cnVjdCB3YWtldXBfc291cmNlIGRlbGV0ZWRfd3MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMtNzMtXFxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jOjc0OnN0YXRpYyBERUZJTkVfSURBKHdha2V1cF9pZGEpO1xcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy03NS1cXG4tLVxcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWRlYnVnZnMuYz0xOT1zdHJ1Y3QgcmVnbWFwX2RlYnVnZnNfbm9kZSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1kZWJ1Z2ZzLmMtMjMtXFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtZGVidWdmcy5jOjI0OnN0YXRpYyBERUZJTkVfSURBKGR1bW15X2lkYSk7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtZGVidWdmcy5jLTI1LXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpyZWdtYXBfZGVidWdmc19yb290O1xcbi0tXFxuZHJpdmVycy9iYXNlL3NvYy5jLTE4LVxcbmRyaXZlcnMvYmFzZS9zb2MuYzoxOTpzdGF0aWMgREVGSU5FX0lEQShzb2NfaWRhKTtcXG5kcml2ZXJzL2Jhc2Uvc29jLmMtMjAtXFxuLS1cXG5kcml2ZXJzL2Jhc2Uvc3dub2RlLmM9Mjc9c3RydWN0IHN3bm9kZSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2Uvc3dub2RlLmMtNDItXFxuZHJpdmVycy9iYXNlL3N3bm9kZS5jOjQzOnN0YXRpYyBERUZJTkVfSURBKHN3bm9kZV9yb290X2lkcyk7XFxuZHJpdmVycy9iYXNlL3N3bm9kZS5jLTQ0LXN0YXRpYyBzdHJ1Y3Qga3NldCAqc3dub2RlX2tzZXQ7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM9MTA0PXN0YXRpYyB1MzIgY3B1X3VzZVtOUl9DUFVTXTtcXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMTA1LVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzoxMDY6c3RhdGljIERFRklORV9JREEocnNzZF9pbmRleF9pZGEpO1xcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0xMDctXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03MD1zdGF0aWMgaW50IG51bGxfbWFqb3I7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NzE6c3RhdGljIERFRklORV9JREEobnVsbGJfaW5kZXhlcyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzItc3RhdGljIHN0cnVjdCBibGtfbXFfdGFnX3NldCB0YWdfc2V0O1xcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYz00Nzg9c3RhdGljIGludCByYmRfbWFqb3I7XFxuZHJpdmVycy9ibG9jay9yYmQuYzo0Nzk6c3RhdGljIERFRklORV9JREEocmJkX2Rldl9pZF9pZGEpO1xcbmRyaXZlcnMvYmxvY2svcmJkLmMtNDgwLVxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtY2x0LmM9MjQ9c3RhdGljIGludCBybmJkX2NsaWVudF9tYWpvcjtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYzoyNTpzdGF0aWMgREVGSU5FX0lEQShpbmRleF9pZGEpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jLTI2LXN0YXRpYyBERUZJTkVfTVVURVgoc2Vzc19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTQ0PXN0YXRpYyBpbnQgbWFqb3I7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6NDU6c3RhdGljIERFRklORV9JREEodmRfaW5kZXhfaWRhKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy00Ni1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9lcC9tYWluLmMtMjEtXFxuZHJpdmVycy9idXMvbWhpL2VwL21haW4uYzoyMjpzdGF0aWMgREVGSU5FX0lEQShtaGlfZXBfY250cmxfaWRhKTtcXG5kcml2ZXJzL2J1cy9taGkvZXAvbWFpbi5jLTIzLVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTI0LVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYzoyNTpzdGF0aWMgREVGSU5FX0lEQShtaGlfY29udHJvbGxlcl9pZGEpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0yNi1cXG4tLVxcbmRyaXZlcnMvY2R4L2NkeC5jLTc4LS8qIElEQSBmb3IgQ0RYIGNvbnRyb2xsZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgQ0RYIGJ1cyAqL1xcbmRyaXZlcnMvY2R4L2NkeC5jOjc5OnN0YXRpYyBERUZJTkVfSURBKGNkeF9jb250cm9sbGVyX2lkYSk7XFxuZHJpdmVycy9jZHgvY2R4LmMtODAtLyogTG9jayB0byBwcm90ZWN0IGNvbnRyb2xsZXIgb3BzICovXFxuLS1cXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYy0xOC1cXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYzoxOTpzdGF0aWMgREVGSU5FX0lEQShybmdfaW5kZXhfaWRhKTtcXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYy0yMC1cXG4tLVxcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jPTMwNjY9c3RhdGljIHN0cnVjdCBibWNfZGV2aWNlICppcG1pX2ZpbmRfYm1jX3Byb2RfZGV2X2lkKFxcbi0tXFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtMzA4NC1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYzozMDg1OnN0YXRpYyBERUZJTkVfSURBKGlwbWlfYm1jX2lkYSk7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtMzA4Ni1cXG4tLVxcbmRyaXZlcnMvY2hhci9taXNjLmM9NTg9c3RhdGljIERFRklORV9NVVRFWChtaXNjX210eCk7XFxuLS1cXG5kcml2ZXJzL2NoYXIvbWlzYy5jLTYyLSAqL1xcbmRyaXZlcnMvY2hhci9taXNjLmM6NjM6c3RhdGljIERFRklORV9JREEobWlzY19taW5vcnNfaWRhKTtcXG5kcml2ZXJzL2NoYXIvbWlzYy5jLTY0LVxcbi0tXFxuZHJpdmVycy9jaGFyL3BwZGV2LmM9ODc9c3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldmljZXNbUEFSUE9SVF9NQVhdO1xcbmRyaXZlcnMvY2hhci9wcGRldi5jLTg4LVxcbmRyaXZlcnMvY2hhci9wcGRldi5jOjg5OnN0YXRpYyBERUZJTkVfSURBKGlkYV9pbmRleCk7XFxuZHJpdmVycy9jaGFyL3BwZGV2LmMtOTAtXFxuLS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz02ND1zdHJ1Y3QgY29uc29sZSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy04My1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYzo4NDpzdGF0aWMgREVGSU5FX0lEQSh2dGVybW5vX2lkYSk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtODUtXFxuLS1cXG5kcml2ZXJzL2Nsay9zcGFjZW1pdC9jY3VfY29tbW9uLmMtMTItXFxuZHJpdmVycy9jbGsvc3BhY2VtaXQvY2N1X2NvbW1vbi5jOjEzOnN0YXRpYyBERUZJTkVfSURBKGF1eGlsaWFyeV9pZHMpO1xcbmRyaXZlcnMvY2xrL3NwYWNlbWl0L2NjdV9jb21tb24uYy0xNC1zdGF0aWMgaW50IHNwYWNlbWl0X2NjdV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2NvdW50ZXIvY291bnRlci1jb3JlLmMtMjctLyogUHJvdmlkZXMgYSB1bmlxdWUgSUQgZm9yIGVhY2ggY291bnRlciBkZXZpY2UgKi9cXG5kcml2ZXJzL2NvdW50ZXIvY291bnRlci1jb3JlLmM6Mjg6c3RhdGljIERFRklORV9JREEoY291bnRlcl9pZGEpO1xcbmRyaXZlcnMvY291bnRlci9jb3VudGVyLWNvcmUuYy0yOS1cXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM9MjI9c3RhdGljIGludCBjeGxfbWVtX21ham9yO1xcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6MjM6c3RhdGljIERFRklORV9JREEoY3hsX21lbWRldl9pZGEpO1xcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtMjQtXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BtZW0uYy0yMy1cXG5kcml2ZXJzL2N4bC9jb3JlL3BtZW0uYzoyNDpzdGF0aWMgREVGSU5FX0lEQShjeGxfbnZkaW1tX2JyaWRnZV9pZGEpO1xcbmRyaXZlcnMvY3hsL2NvcmUvcG1lbS5jLTI1LVxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMzMtXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MzQ6c3RhdGljIERFRklORV9JREEoY3hsX3BvcnRfaWRhKTtcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0zNS1zdGF0aWMgREVGSU5FX1hBUlJBWShjeGxfcm9vdF9idXNlcyk7XFxuLS1cXG5kcml2ZXJzL2RheC9zdXBlci5jPTQxPXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmRheF9tbnQ7XFxuZHJpdmVycy9kYXgvc3VwZXIuYzo0MjpzdGF0aWMgREVGSU5FX0lEQShkYXhfbWlub3JfaWRhKTtcXG5kcml2ZXJzL2RheC9zdXBlci5jLTQzLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGF4X2NhY2hlIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYz02MD1zdGF0aWMgREVGSU5FX01VVEVYKGRtYV9saXN0X211dGV4KTtcXG5kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYzo2MTpzdGF0aWMgREVGSU5FX0lEQShkbWFfaWRhKTtcXG5kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYy02Mi1zdGF0aWMgTElTVF9IRUFEKGRtYV9kZXZpY2VfbGlzdCk7XFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2NkZXYuYz0yMD1zdHJ1Y3QgaWR4ZF9jZGV2X2NvbnRleHQge1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9jZGV2LmMtMjktICovXFxuZHJpdmVycy9kbWEvaWR4ZC9jZGV2LmM6MzA6c3RhdGljIERFRklORV9JREEoZmlsZV9pZGEpO1xcbmRyaXZlcnMvZG1hL2lkeGQvY2Rldi5jLTMxLVxcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM9NDA9Ym9vbCBzdXBwb3J0X2VucWNtZDtcXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo0MTpERUZJTkVfSURBKGlkeGRfaWRhKTtcXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy00Mi1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0yOD1zdGF0aWMgUkFXX05PVElGSUVSX0hFQUQoZHBsbF9ub3RpZmllcl9jaGFpbik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI5OnN0YXRpYyBERUZJTkVfSURBKGRwbGxfcGluX2lkeF9pZGEpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMC1cXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi5jPTI0MD1zdGF0aWMgc3RydWN0IGNsYXNzICpleHRjb25fY2xhc3M7XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLmMtMjQxLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi5jOjI0MjpzdGF0aWMgREVGSU5FX0lEQShleHRjb25fZGV2X2lkcyk7XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLmMtMjQzLXN0YXRpYyBMSVNUX0hFQUQoZXh0Y29uX2Rldl9saXN0KTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9idXMuYy0xOS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvYnVzLmM6MjA6c3RhdGljIERFRklORV9JREEoZmZhX2J1c19pZCk7XFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2J1cy5jLTIxLVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9idXMuYz0yMj1FWFBPUlRfU1lNQk9MX0dQTChzY21pX3JlcXVlc3RlZF9kZXZpY2VzX25oKTtcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2J1cy5jLTIzLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvYnVzLmM6MjQ6c3RhdGljIERFRklORV9JREEoc2NtaV9idXNfaWQpO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvYnVzLmMtMjUtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2RyaXZlci5jLTUxLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvZHJpdmVyLmM6NTI6c3RhdGljIERFRklORV9JREEoc2NtaV9pZCk7XFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9kcml2ZXIuYy01My1cXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwuYz0yMzU9RVhQT1JUX1NZTUJPTF9HUEwoZGZsX2ZwZ2FfY2hlY2tfcG9ydF9pZCk7XFxuZHJpdmVycy9mcGdhL2RmbC5jLTIzNi1cXG5kcml2ZXJzL2ZwZ2EvZGZsLmM6MjM3OnN0YXRpYyBERUZJTkVfSURBKGRmbF9kZXZpY2VfaWRhKTtcXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtMjM4LVxcbi0tXFxuZHJpdmVycy9mcGdhL2ZwZ2EtYnJpZGdlLmMtMTUtXFxuZHJpdmVycy9mcGdhL2ZwZ2EtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZnBnYV9icmlkZ2VfaWRhKTtcXG5kcml2ZXJzL2ZwZ2EvZnBnYS1icmlkZ2UuYy0xNy1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGZwZ2FfYnJpZGdlX2NsYXNzO1xcbi0tXFxuZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMtMjAtXFxuZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmM6MjE6c3RhdGljIERFRklORV9JREEoZnBnYV9tZ3JfaWRhKTtcXG5kcml2ZXJzL2ZwZ2EvZnBnYS1tZ3IuYy0yMi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGZwZ2FfbWdyX2NsYXNzO1xcbi0tXFxuZHJpdmVycy9mcGdhL2ZwZ2EtcmVnaW9uLmMtMTctXFxuZHJpdmVycy9mcGdhL2ZwZ2EtcmVnaW9uLmM6MTg6c3RhdGljIERFRklORV9JREEoZnBnYV9yZWdpb25faWRhKTtcXG5kcml2ZXJzL2ZwZ2EvZnBnYS1yZWdpb24uYy0xOS1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGZwZ2FfcmVnaW9uX2NsYXNzO1xcbi0tXFxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYz00Nj1zdGF0aWMgY29uc3QgaW50IGVuZ2luZV9wYWdlX3NpemUgPSAweDQwMDtcXG4tLVxcbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmMtODQtXFxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYzo4NTpzdGF0aWMgREVGSU5FX0lEQShtYXN0ZXJfaWRhKTtcXG5kcml2ZXJzL2ZzaS9mc2ktY29yZS5jLTg2LVxcbi0tXFxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYz05MD1zdGF0aWMgZGV2X3QgZnNpX2Jhc2VfZGV2O1xcbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM6OTE6c3RhdGljIERFRklORV9JREEoZnNpX21pbm9yX2lkYSk7XFxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYy05Mi0jZGVmaW5lIEZTSV9DSEFSX01BWF9ERVZJQ0VTXFx0MHgxMDAwXFxuLS1cXG5kcml2ZXJzL2ZzaS9mc2ktb2NjLmM9Njg9c3RydWN0IG9jY19jbGllbnQge1xcbi0tXFxuZHJpdmVycy9mc2kvZnNpLW9jYy5jLTc3LVxcbmRyaXZlcnMvZnNpL2ZzaS1vY2MuYzo3ODpzdGF0aWMgREVGSU5FX0lEQShvY2NfaWRhKTtcXG5kcml2ZXJzL2ZzaS9mc2ktb2NjLmMtNzktXFxuLS1cXG5kcml2ZXJzL2Z3Y3RsL21haW4uYz0yMj1zdGF0aWMgZGV2X3QgZndjdGxfZGV2O1xcbmRyaXZlcnMvZndjdGwvbWFpbi5jOjIzOnN0YXRpYyBERUZJTkVfSURBKGZ3Y3RsX2lkYSk7XFxuZHJpdmVycy9md2N0bC9tYWluLmMtMjQtc3RhdGljIHVuc2lnbmVkIGxvbmcgZndjdGxfdGFpbnRlZDtcXG4tLVxcbmRyaXZlcnMvZ25zcy9jb3JlLmMtMjYtXFxuZHJpdmVycy9nbnNzL2NvcmUuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShnbnNzX21pbm9ycyk7XFxuZHJpdmVycy9nbnNzL2NvcmUuYy0yOC1zdGF0aWMgZGV2X3QgZ25zc19maXJzdDtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWV4YXIuYy0zMS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1leGFyLmM6MzI6c3RhdGljIERFRklORV9JREEoaWRhX2luZGV4KTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1leGFyLmMtMzMtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tcHNzZS5jPTg0PU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBncGlvX21wc3NlX3RhYmxlKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tcHNzZS5jLTg1LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1wc3NlLmM6ODY6c3RhdGljIERFRklORV9JREEoZ3Bpb19tcHNzZV9pZGEpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1wc3NlLmMtODctXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1zaW0uYy00Mi1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1zaW0uYzo0MzpzdGF0aWMgREVGSU5FX0lEQShncGlvX3NpbV9pZGEpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXNpbS5jLTQ0LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tdmlydHVzZXIuYy0zOS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby12aXJ0dXNlci5jOjQwOnN0YXRpYyBERUZJTkVfSURBKGdwaW9fdmlydHVzZXJfaWRhKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby12aXJ0dXNlci5jLTQxLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpncGlvX3ZpcnR1c2VyX2RiZ19yb290O1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW9saWItc2hhcmVkLmM9NjM9c3RhdGljIExJU1RfSEVBRChncGlvX3NoYXJlZF9saXN0KTtcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zaGFyZWQuYzo2NDpzdGF0aWMgREVGSU5FX0lEQShncGlvX3NoYXJlZF9pZGEpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvbGliLXNoYXJlZC5jLTY1LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW9saWIuYy01Ni0vKiBEZXZpY2UgYW5kIGNoYXIgZGV2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gKi9cXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jOjU3OnN0YXRpYyBERUZJTkVfSURBKGdwaW9faWRhKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jLTU4LXN0YXRpYyBkZXZfdCBncGlvX2RldnQgX19yb19hZnRlcl9pbml0O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hdXgtYnJpZGdlLmMtMTUtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hdXgtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZHJtX2F1eF9icmlkZ2VfaWRhKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1icmlkZ2UuYy0xNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYXV4LWhwZC1icmlkZ2UuYy0xNS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1ocGQtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZHJtX2F1eF9ocGRfYnJpZGdlX2lkYSk7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hdXgtaHBkLWJyaWRnZS5jLTE3LVxcbi0tXFxuZHJpdmVycy9oaWQvYW1kLXNmaC1oaWQvYW1kX3NmaF9wY2llLmM9MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphbWRfc2ZoX2dyb3Vwc1tdID0ge1xcbi0tXFxuZHJpdmVycy9oaWQvYW1kLXNmaC1oaWQvYW1kX3NmaF9wY2llLmMtMzg0LVxcbmRyaXZlcnMvaGlkL2FtZC1zZmgtaGlkL2FtZF9zZmhfcGNpZS5jOjM4NTpzdGF0aWMgREVGSU5FX0lEQShzZmhfdG1faWRhKTtcXG5kcml2ZXJzL2hpZC9hbWQtc2ZoLWhpZC9hbWRfc2ZoX3BjaWUuYy0zODYtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtbmludGVuZG8uYz0yMjc3PXN0YXRpYyBpbnQgam95Y29uX2hvbWVfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1uaW50ZW5kby5jLTIyOTUtXFxuZHJpdmVycy9oaWQvaGlkLW5pbnRlbmRvLmM6MjI5NjpzdGF0aWMgREVGSU5FX0lEQShuaW50ZW5kb19wbGF5ZXJfaWRfYWxsb2NhdG9yKTtcXG5kcml2ZXJzL2hpZC9oaWQtbmludGVuZG8uYy0yMjk3LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYz0xODc9c3RydWN0IHNoaWVsZF9kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYy0yMDMtICovXFxuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYzoyMDQ6c3RhdGljIERFRklORV9JREEodGh1bmRlcnN0cmlrZV9pZGEpO1xcbmRyaXZlcnMvaGlkL2hpZC1udmlkaWEtc2hpZWxkLmMtMjA1LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXBsYXlzdGF0aW9uLmM9MjY9c3RhdGljIExJU1RfSEVBRChwc19kZXZpY2VzX2xpc3QpO1xcbmRyaXZlcnMvaGlkL2hpZC1wbGF5c3RhdGlvbi5jLTI3LVxcbmRyaXZlcnMvaGlkL2hpZC1wbGF5c3RhdGlvbi5jOjI4OnN0YXRpYyBERUZJTkVfSURBKHBzX3BsYXllcl9pZF9hbGxvY2F0b3IpO1xcbmRyaXZlcnMvaGlkL2hpZC1wbGF5c3RhdGlvbi5jLTI5LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXNvbnkuYz01MjM9c3RhdGljIExJU1RfSEVBRChzb255X2RldmljZV9saXN0KTtcXG5kcml2ZXJzL2hpZC9oaWQtc29ueS5jOjUyNDpzdGF0aWMgREVGSU5FX0lEQShzb255X2RldmljZV9pZF9hbGxvY2F0b3IpO1xcbmRyaXZlcnMvaGlkL2hpZC1zb255LmMtNTI1LVxcbi0tXFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfY29yZS5jLTM2LS8qIEZvciBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2UgSURzICovXFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfY29yZS5jOjM3OnN0YXRpYyBERUZJTkVfSURBKHBsYXRmb3JtX29tYXBfc3NpX2lkYSk7XFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfY29yZS5jLTM4LVxcbi0tXFxuZHJpdmVycy9od21vbi9od21vbi5jPTE0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGh3bW9uX2NsYXNzID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9od21vbi5jLTE0Ny1cXG5kcml2ZXJzL2h3bW9uL2h3bW9uLmM6MTQ4OnN0YXRpYyBERUZJTkVfSURBKGh3bW9uX2lkYSk7XFxuZHJpdmVycy9od21vbi9od21vbi5jLTE0OS1cXG4tLVxcbmRyaXZlcnMvaHdtb24vaWJtYWVtLmMtNzgtXFxuZHJpdmVycy9od21vbi9pYm1hZW0uYzo3OTpzdGF0aWMgREVGSU5FX0lEQShhZW1faWRhKTtcXG5kcml2ZXJzL2h3bW9uL2libWFlbS5jLTgwLVxcbi0tXFxuZHJpdmVycy9od3RyYWNpbmcvaW50ZWxfdGgvY29yZS5jPTI1PW1vZHVsZV9wYXJhbShob3N0X21vZGUsIGJvb2wsIDA0NDQpO1xcbmRyaXZlcnMvaHd0cmFjaW5nL2ludGVsX3RoL2NvcmUuYy0yNi1cXG5kcml2ZXJzL2h3dHJhY2luZy9pbnRlbF90aC9jb3JlLmM6Mjc6c3RhdGljIERFRklORV9JREEoaW50ZWxfdGhfaWRhKTtcXG5kcml2ZXJzL2h3dHJhY2luZy9pbnRlbF90aC9jb3JlLmMtMjgtXFxuLS1cXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jLTQxLS8qIElEQSB0byBhc3NpZ24gZWFjaCByZWdpc3RlcmVkIGRldmljZSBhIHVuaXF1ZSBpZCAqL1xcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1jb3JlLmM6NDI6c3RhdGljIERFRklORV9JREEoaWlvX2lkYSk7XFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYy00My1cXG4tLVxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMtMzMtXFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYzozNDpzdGF0aWMgREVGSU5FX0lEQShpaW9fdHJpZ2dlcl9pZGEpO1xcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMtMzUtXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jPTE0OT1zdGF0aWMgZGV2X3QgZHluYW1pY19pc3NtX2RldjtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jLTE1MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jOjE1MTpzdGF0aWMgREVGSU5FX0lEQSh1bWFkX2lkYSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYy0xNTItXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jPTc2PXN0YXRpYyBkZXZfdCBkeW5hbWljX3V2ZXJic19kZXY7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYy03Ny1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jOjc4OnN0YXRpYyBERUZJTkVfSURBKHV2ZXJic19pZGEpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMtNzktc3RhdGljIGludCBpYl91dmVyYnNfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9pbnB1dC5jPTM1PU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvaW5wdXQuYy0zOC0jZGVmaW5lIElOUFVUX0ZJUlNUX0RZTkFNSUNfREVWXFx0XFx0MjU2XFxuZHJpdmVycy9pbnB1dC9pbnB1dC5jOjM5OnN0YXRpYyBERUZJTkVfSURBKGlucHV0X2lkYSk7XFxuZHJpdmVycy9pbnB1dC9pbnB1dC5jLTQwLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmM9MTYyNj1zdGF0aWMgaW50IHhwYWRfaW5pdF9mZihzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jLTE2MzItXFxuZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmM6MTYzMzpzdGF0aWMgREVGSU5FX0lEQSh4cGFkX3BhZF9zZXEpO1xcbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jLTE2MzQtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTY0PWludCBhbWRfaW9tbXVfbWF4X2dseF92YWwgPSAtMTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNjktICovXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo3MDpERUZJTkVfSURBKHBkb21faWRzKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTcxLVxcbi0tXFxuZHJpdmVycy9pb21tdS9pbnRlbC9kbWFyLmM9NjQ9c3RhdGljIGludCBkbWFyX2Rldl9zY29wZV9zdGF0dXMgPSAxO1xcbmRyaXZlcnMvaW9tbXUvaW50ZWwvZG1hci5jOjY1OnN0YXRpYyBERUZJTkVfSURBKGRtYXJfc2VxX2lkcyk7XFxuZHJpdmVycy9pb21tdS9pbnRlbC9kbWFyLmMtNjYtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LmM9NDI9c3RhdGljIHN0cnVjdCBrc2V0ICppb21tdV9ncm91cF9rc2V0O1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYzo0MzpzdGF0aWMgREVGSU5FX0lEQShpb21tdV9ncm91cF9pZGEpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYzo0NDpzdGF0aWMgREVGSU5FX0lEQShpb21tdV9nbG9iYWxfcGFzaWRfaWRhKTtcXG5kcml2ZXJzL2lvbW11L2lvbW11LmMtNDUtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYz0zOT1zdGF0aWMgc3RydWN0IG1vY2tfYnVzX3R5cGUgaW9tbXVmZF9tb2NrX2J1c190eXBlID0ge1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtNDQtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6NDU6c3RhdGljIERFRklORV9JREEobW9ja19kZXZfaWRhKTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy00Ni1cXG4tLVxcbmRyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuYy00Ny0vKiBJT01NVSBQU0NJRCBhbGxvY2F0aW9uIG5hbWVzcGFjZS4gKi9cXG5kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmM6NDg6c3RhdGljIERFRklORV9JREEocmlzY3ZfaW9tbXVfcHNjaWRzKTtcXG5kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMtNDktI2RlZmluZSBSSVNDVl9JT01NVV9NQVhfUFNDSURcXHRcXHQoQklUKDIwKSAtIDEpXFxuLS1cXG5kcml2ZXJzL2lwYWNrL2lwYWNrLmMtMTctXFxuZHJpdmVycy9pcGFjay9pcGFjay5jOjE4OnN0YXRpYyBERUZJTkVfSURBKGlwYWNrX2lkYSk7XFxuZHJpdmVycy9pcGFjay9pcGFjay5jLTE5LVxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmM9MjAyPXN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHZtb3ZwX2xvY2spO1xcbmRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXYzLWl0cy5jLTIwMy1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy12My1pdHMuYzoyMDQ6c3RhdGljIERFRklORV9JREEoaXRzX3ZwZWlkX2lkYSk7XFxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMtMjA1LVxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjUuYz0zND1zdHJ1Y3QgZ2ljdjVfY2hpcF9kYXRhIGdpY3Y1X2dsb2JhbF9kYXRhIF9fcmVhZF9tb3N0bHk7XFxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjUuYy0zNS1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy12NS5jOjM2OnN0YXRpYyBERUZJTkVfSURBKGxwaV9pZGEpO1xcbmRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXY1LmMtMzctc3RhdGljIHUzMiBudW1fbHBpcyBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5kcml2ZXJzL21jYi9tY2ItY29yZS5jLTE0LVxcbmRyaXZlcnMvbWNiL21jYi1jb3JlLmM6MTU6c3RhdGljIERFRklORV9JREEobWNiX2lkYSk7XFxuZHJpdmVycy9tY2IvbWNiLWNvcmUuYy0xNi1cXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM9NDg9c3RhdGljIGludCBiY2FjaGVfbWFqb3I7XFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzo0OTpzdGF0aWMgREVGSU5FX0lEQShiY2FjaGVfZGV2aWNlX2lkeCk7XFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy01MC1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgdW5yZWdpc3Rlcl93YWl0O1xcbi0tXFxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTUzLVxcbmRyaXZlcnMvbWQvZG0tY3J5cHQuYzo1NDpzdGF0aWMgREVGSU5FX0lEQSh3b3JrcXVldWVfaWRhKTtcXG5kcml2ZXJzL21kL2RtLWNyeXB0LmMtNTUtXFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZHZiLXBsbC5jPTIxPXN0cnVjdCBkdmJfcGxsX3ByaXYge1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2R2Yi1wbGwuYy0zNy0jZGVmaW5lIERWQl9QTExfTUFYIDY0XFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2R2Yi1wbGwuYzozODpzdGF0aWMgREVGSU5FX0lEQShwbGxfaWRhKTtcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZHZiLXBsbC5jLTM5LVxcbi0tXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yZW5lc2FzL3JjYXItdmluL3JjYXItY29yZS5jLTU3LVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcmVuZXNhcy9yY2FyLXZpbi9yY2FyLWNvcmUuYzo1ODpzdGF0aWMgREVGSU5FX0lEQShydmluX2lkYSk7XFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yZW5lc2FzL3JjYXItdmluL3JjYXItY29yZS5jLTU5LXN0YXRpYyBERUZJTkVfTVVURVgocnZpbl9ncm91cF9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYz0yND1zdGF0aWMgZGV2X3QgbGlyY19iYXNlX2RldjtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYy0yNi0vKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgYWxsb2NhdGVkIGxpcmMgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShsaXJjX2lkYSk7XFxuZHJpdmVycy9tZWRpYS9yYy9saXJjX2Rldi5jLTI4LVxcbi0tXFxuZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmM9ODU9c3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciAqbGVkX2ZlZWRiYWNrO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMtODctLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHJjIGRldmljZXMgKi9cXG5kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYzo4ODpzdGF0aWMgREVGSU5FX0lEQShyY19pZGEpO1xcbmRyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jLTg5LVxcbi0tXFxuZHJpdmVycy9tZmQvaW50ZWwtbHBzcy5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIGludGVsX2xwc3Nfc3BpX2NlbGwgPSB7XFxuLS1cXG5kcml2ZXJzL21mZC9pbnRlbC1scHNzLmMtMTM1LVxcbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYzoxMzY6c3RhdGljIERFRklORV9JREEoaW50ZWxfbHBzc19kZXZpZF9pZGEpO1xcbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYy0xMzctc3RhdGljIHN0cnVjdCBkZW50cnkgKmludGVsX2xwc3NfZGVidWdmcztcXG4tLVxcbmRyaXZlcnMvbWlzYy9iY20tdmsvYmNtX3ZrX2Rldi5jLTI0LVxcbmRyaXZlcnMvbWlzYy9iY20tdmsvYmNtX3ZrX2Rldi5jOjI1OnN0YXRpYyBERUZJTkVfSURBKGJjbV92a19pZGEpO1xcbmRyaXZlcnMvbWlzYy9iY20tdmsvYmNtX3ZrX2Rldi5jLTI2LVxcbi0tXFxuZHJpdmVycy9taXNjL2NhcmRyZWFkZXIvYWxjb3JfcGNpLmMtMTktXFxuZHJpdmVycy9taXNjL2NhcmRyZWFkZXIvYWxjb3JfcGNpLmM6MjA6c3RhdGljIERFRklORV9JREEoYWxjb3JfcGNpX2lkcik7XFxuZHJpdmVycy9taXNjL2NhcmRyZWFkZXIvYWxjb3JfcGNpLmMtMjEtXFxuLS1cXG5kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jLTE0LVxcbmRyaXZlcnMvbWlzYy9jYjcxMC9jb3JlLmM6MTU6c3RhdGljIERFRklORV9JREEoY2I3MTBfaWRhKTtcXG5kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jLTE2LVxcbi0tXFxuZHJpdmVycy9taXNjL2R3LXhkYXRhLXBjaWUuYy0yNC1cXG5kcml2ZXJzL21pc2MvZHcteGRhdGEtcGNpZS5jOjI1OnN0YXRpYyBERUZJTkVfSURBKHhkYXRhX2lkYSk7XFxuZHJpdmVycy9taXNjL2R3LXhkYXRhLXBjaWUuYy0yNi1cXG4tLVxcbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYz0xND1zdHJ1Y3QgYXV4X2J1c19kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9taXNjL21jaHBfcGNpMXh4eHgvbWNocF9wY2kxeHh4eF9ncC5jLTE3LVxcbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYzoxODpzdGF0aWMgREVGSU5FX0lEQShncF9jbGllbnRfaWRhKTtcXG5kcml2ZXJzL21pc2MvbWNocF9wY2kxeHh4eC9tY2hwX3BjaTF4eHh4X2dwLmMtMTktc3RhdGljIGNvbnN0IGNoYXIgYXV4X2Rldl9vdHBfZTJwX25hbWVbMTVdID0gXFxcImdwX290cF9lMnBcXFwiO1xcbi0tXFxuZHJpdmVycy9taXNjL3BjaV9lbmRwb2ludF90ZXN0LmMtMTIyLVxcbmRyaXZlcnMvbWlzYy9wY2lfZW5kcG9pbnRfdGVzdC5jOjEyMzpzdGF0aWMgREVGSU5FX0lEQShwY2lfZW5kcG9pbnRfdGVzdF9pZGEpO1xcbmRyaXZlcnMvbWlzYy9wY2lfZW5kcG9pbnRfdGVzdC5jLTEyNC1cXG4tLVxcbmRyaXZlcnMvbWlzYy9ycG1iLWNvcmUuYy0xNC1cXG5kcml2ZXJzL21pc2MvcnBtYi1jb3JlLmM6MTU6c3RhdGljIERFRklORV9JREEocnBtYl9pZGEpO1xcbmRyaXZlcnMvbWlzYy9ycG1iLWNvcmUuYy0xNi1cXG4tLVxcbmRyaXZlcnMvbWlzYy94aWxpbnhfc2RmZWMuYy0yOS1cXG5kcml2ZXJzL21pc2MveGlsaW54X3NkZmVjLmM6MzA6c3RhdGljIERFRklORV9JREEoZGV2X25ycyk7XFxuZHJpdmVycy9taXNjL3hpbGlueF9zZGZlYy5jLTMxLVxcbi0tXFxuZHJpdmVycy9tbWMvY29yZS9ibG9jay5jPTk5PXN0YXRpYyBpbnQgbWF4X2RldmljZXM7XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL2Jsb2NrLmMtMTAyLVxcbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYzoxMDM6c3RhdGljIERFRklORV9JREEobW1jX2Jsa19pZGEpO1xcbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYzoxMDQ6c3RhdGljIERFRklORV9JREEobW1jX3JwbWJfaWRhKTtcXG5kcml2ZXJzL21tYy9jb3JlL2Jsb2NrLmMtMTA1LVxcbi0tXFxuZHJpdmVycy9tbWMvY29yZS9ob3N0LmMtMzMtXFxuZHJpdmVycy9tbWMvY29yZS9ob3N0LmM6MzQ6c3RhdGljIERFRklORV9JREEobW1jX2hvc3RfaWRhKTtcXG5kcml2ZXJzL21tYy9jb3JlL2hvc3QuYy0zNS1cXG4tLVxcbmRyaXZlcnMvbXV4L2NvcmUuYz01ND1zdHJ1Y3QgZGV2bV9tdXhfc3RhdGVfc3RhdGUge1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozOTozNC4zNDU2ODc5NDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk2MzkyNzkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSURBIEluc3RhbmNlcyBpbiB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nOiBhbGwgdGhlc2UgaW5zdGFuY2VzIG9mIGBERUZJTkVfSURBKC4uLilgIOKAkyBhbmQgdGhlcmUgYXJlIHF1aXRlIGEgZmV3IG9mIHRoZW0g4oCTIGFyZSBkZWNsYXJlZCBhdCBmaWxlIHNjb3BlLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyBhIHBhcnRpY3VsYXIgZGVzaWduIHBhdHRlcm4gb3IgYXBwcm9hY2ggdG8gcmVzb3VyY2UgbWFuYWdlbWVudC4gV2hldGhlciB0aGV5J3JlIGBzdGF0aWNgIG9yIHRvcC1sZXZlbCBkb2Vzbid0IGNoYW5nZSB0aGUgc2NvcGUsIHdoaWNoIHJlbWFpbnMgdGhlIGZpbGUuIEl0J3MgYSBwb3RlbnRpYWwgZmxhZyBmb3IgaG93IHRoZXNlIElEQXMgYXJlIGJlaW5nIHVzZWQuIE5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGhvdyBgREVGSU5FX01UUkVFYCBpcyBiZWluZyB1c2VkLCBhcyBpdCdzIGxpa2VseSByZWxhdGVkLCBhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byB3aWxsIHByb3ZpZGUgdGhlIGFuc3dlciBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzA4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzk6MzYuMzA5NjIwMzM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQzNTAzMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFRklORV9NVFJFRVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q9NTc9Tm9ybWFsIEFQSVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC01OS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0OjYwOlN0YXJ0IGJ5IGluaXRpYWxpc2luZyBhIG1hcGxlIHRyZWUsIGVpdGhlciB3aXRoIERFRklORV9NVFJFRSgpIGZvciBzdGF0aWNhbGx5XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC02MS1hbGxvY2F0ZWQgbWFwbGUgdHJlZXMgb3IgbXRfaW5pdCgpIGZvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgb25lcy4gIEFcXG4tLVxcbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oPTI2MT1zdHJ1Y3QgbWFwbGVfdHJlZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaC0yOTktXFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg6MzAwOiNkZWZpbmUgREVGSU5FX01UUkVFKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oLTMwMS1cXHRzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKTtcXHRcXHRcXFxcXFxuLS1cXG5saWIvdGVzdF9tYXBsZV90cmVlLmM9MzY0Nj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgYWxsb2NfY3ljbGljX3Rlc3Rpbmcoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbi0tXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jLTM3MTItXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jOjM3MTM6c3RhdGljIERFRklORV9NVFJFRSh0cmVlKTtcXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzcxNC1zdGF0aWMgaW50IF9faW5pdCBtYXBsZV90cmVlX3NlZWQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzk6MzguNTUzMTMxODE1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NDk3ODk0MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaDogV29ydGhGdXp6aW5nID0gZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSB0aGUgY29kZSBhbmQgc2VlIHdoYXQgY2hhbmdlZCwgc3RhcnRpbmcgd2l0aCB0aGUgYERvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3RgIGZpbGUuIEkgdGhlbiBsb29rZWQgYXQgYGxpYi90ZXN0X21hcGxlX3RyZWUuY2AgYW5kIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgbWFjcm9zIGFyZSB1c2VkLiBJdCdzIGNsZWFyIHRoYXQgYERFRklORV9NVFJFRWAgYW5kIGBERUZJTkVfSURBYCBhcmUgbm93IGVuZm9yY2luZyBzdGF0aWMgc3RvcmFnZSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgdmVyc2lvbnMuIFRoZSBhZGRpdGlvbiBvZiBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyB0aGUga2V5IGhlcmU7IGl0J3MgYSBjb21waWxlLXRpbWUgY2hlY2sgdXNpbmcgYSBzdGF0aWMgdmFyaWFibGUuIFRoZSBlcnJvciBpbiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCB3YXMgdGhhdCBpdCB1c2VkIGBERUZJTkVfTVRSRUVgIGxvY2FsbHksIHdoaWNoIGlzIG5vdyBpbnZhbGlkLCBhbmQgaXQgd2FzIGNvcnJlY3RlZCBieSBpbml0aWFsaXppbmcgdGhlIGBtYXBsZV90cmVlYCBzdHJ1Y3R1cmUgZGlyZWN0bHkuXG5cbkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciB0byBzZWUgaWYgYW55IGNvbXBpbGVkIGNvZGUgY2hhbmdlZCBhbmQgY2hlY2tlZCB0aGUgZGlmZiB0byBjb25maXJtLiBUaGlzIGxlZCBtZSB0byBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYCwgYGluY2x1ZGUvbGludXgvaWRyLmhgLCBhbmQgYGluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oYCwgd2hpY2ggc2hvd2VkIHRoZSBuZXcgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbWFjcm8uIFRoaXMgbWFjcm8sIGhvd2V2ZXIsIG9ubHkgZ2VuZXJhdGVzIGEgY29tcGlsZS10aW1lIGNoZWNrLCBtYWtpbmcgc3VyZSB0aGF0IHZhcmlhYmxlcyBkZWZpbmVkIHdpdGggYERFRklORV9JREFgIG9yIGBERUZJTkVfTVRSRUVgIGhhdmUgc3RhdGljIHN0b3JhZ2UuIFRoaXMgbWVhbnMgaXQgZW5mb3JjZXMgYSBjb2Rpbmcgc3R5bGUgcmF0aGVyIHRoYW4gY2hhbmdpbmcgcnVudGltZSBiZWhhdmlvci5cblxuVGhlIGNoYW5nZSBpbiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCBpcyBqdXN0IHJlbW92aW5nIHRoZSB1bm5lZWRlZCBpbml0aWFsIHplcm9pbmcgb2YgYHRyZWVgIG9uIHRoZSBzdGFjaywgd2hpY2ggd2FzIGltbWVkaWF0ZWx5IG92ZXJ3cml0dGVuIGJ5IGBtdF9pbml0X2ZsYWdzYCBiZWZvcmUgdXNlLiBUaGUga2V5IHF1ZXN0aW9uIEkgYXNrZWQgbXlzZWxmIHdhcyB3aGV0aGVyIHRoZSBgaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIG1vZHVsZSBpcyBldmVyIGFjdHVhbGx5IHVzZWQgYnkgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBGcm9tIGxvb2tpbmcgYXQgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGJ1aWxkIGNvbmZpZyBpdCBsb29rcyBsaWtlIG5vLiBFdmVuIGlmIGl0IHdhcyBsb2FkZWQsIHRoZSBjaGFuZ2UgbWFkZSBubyBmdW5jdGlvbmFsIGRpZmZlcmVuY2UgaW4gdGhlIHRlc3QgbW9kdWxlIGFzIHRoZSBzdGFjayB2YXJpYWJsZSBgdHJlZWAgd2FzIGluaXRpYWxpemVkIHJlZHVuZGFudGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGBzcGFuX2l0ZXJhdGlvbl9jaGVja2AgZnVuY3Rpb24uIFRoZSBjb2RlIHBhdGhzIGFyZW4ndCByZWFjaGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBjaGFuZ2VzIHdvbid0IGJlIGV4cG9zZWQgYnkgYSBmdXp6ZXIuIEFsbCB0aGUgY2hhbmdlcyB1bmRlciBgdG9vbHMvYCBhcmUgdXNlci1zcGFjZSB0ZXN0cywgd2hpY2ggYXJlIGlycmVsZXZhbnQgaGVyZS5cblxuSSB0aGVuIHJldmlzaXRlZCB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIHNvbWV0aGluZyBzaG91bGQgYmUgZnV6emVkLCBhcyBkZWZpbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJIGNhcmVmdWxseSByZXZpZXdlZCB0aGUgc2VjdGlvbiBvbiB3aGVuIHRvICpub3QqIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgbW9kaWZpY2F0aW9ucyBmYWxsIHNxdWFyZWx5IGludG8gbm9uLWtlcm5lbCBjaGFuZ2VzLCBhbmQgY2hhbmdlcyBpbiB1c2VyLXNwYWNlIGNvZGUuIFRoZSBjb21waWxlLXRpbWUgY2hlY2tzIGFsc28gYXJlIGFsc28gY2F0ZWdvcml6ZWQgYXMgbm90IHdvcnRoIGZ1enppbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIHJlYWNoIHRoZSBjb21waWxlLXRpbWUgY2hlY2tzIHVzaW5nIGEgcnVudGltZSBmdXp6ZXIuXG5cbkluIGxpZ2h0IG9mIGV2ZXJ5dGhpbmcsIEkgc2VlIHRoYXQgdGhlIGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgIG1hY3JvIGlzIGEgY29tcGlsZS10aW1lIGNoZWNrOyBpdCBkb2Vzbid0IGVtaXQgYW55IGV4ZWN1dGFibGUgaW5zdHJ1Y3Rpb25zLCBkb2Vzbid0IGFmZmVjdCBydW50aW1lIGNvbnRyb2wgZmxvdywgZG9lc24ndCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgZG9lc24ndCBleGVjdXRlIGF0IHJ1bnRpbWUuIFRoZSBjaGFuZ2VzIGluIGB0b29scy9gIGFyZSBpcnJlbGV2YW50IGJlY2F1c2UgdGhleSBleGlzdCB3aXRoaW4gdGhlIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AgaXMgYSBub24tZnVuY3Rpb25hbCByZWZhY3RvcmluZyBpbnNpZGUgYSB0ZXN0IG1vZHVsZSB0aGF0IGlzIG5vdCBhY2Nlc3NpYmxlIGFuZCB1bnJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgcnVudGltZSBzZXR1cC5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBwYXRjaCBkb2Vzbid0IHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZXJlIGFyZSBubyBydW50aW1lIGNoYW5nZXMsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNjEsIk91dHB1dFRva2VucyI6MTUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozOTo1NC4wNTEwMjkwMDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEFTU0VSVF9TVEFUSUNfU1RPUkFHRSgpLCB3aGljaCBpcyBhIHB1cmVseSBjb21waWxlLXRpbWUgc3RhdGljIGNoZWNrIGVuZm9yY2luZyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBvbiBERUZJTkVfSURBIGFuZCBERUZJTkVfTVRSRUUgZGVjbGFyYXRpb25zLiBJdCBlbWl0cyBubyBydW50aW1lIGluc3RydWN0aW9ucywgZGVmZW5zaXZlIGFzc2VydGlvbnMsIG9yIGNvbnRyb2wtZmxvdyBtb2RpZmljYXRpb25zLiBUaGUgY2hhbmdlcyBpbiB0b29scy8gYWZmZWN0IG9ubHkgdXNlci1zcGFjZSB0ZXN0cywgYW5kIHRoZSBjaGFuZ2UgaW4gbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGFkanVzdHMgYSBzdGFuZGFsb25lIHRlc3QgbW9kdWxlIChleGVjdXRlZCBvbmx5IG9uIG1vZHVsZSBpbml0L2Jvb3QgYW5kIGltbWVkaWF0ZWx5IHVubG9hZGVkKSB0byBjb25mb3JtIHRvIHRoZSBjb21waWxlLXRpbWUgY2hlY2sgd2l0aG91dCBhbHRlcmluZyBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuIFRodXMsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd29ydGggZnV6emluZyBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKCksIHdoaWNoIGlzIGEgcHVyZWx5IGNvbXBpbGUtdGltZSBzdGF0aWMgY2hlY2sgZW5mb3JjaW5nIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIG9uIERFRklORV9JREEgYW5kIERFRklORV9NVFJFRSBkZWNsYXJhdGlvbnMuIEl0IGVtaXRzIG5vIHJ1bnRpbWUgaW5zdHJ1Y3Rpb25zLCBkZWZlbnNpdmUgYXNzZXJ0aW9ucywgb3IgY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIHRvb2xzLyBhZmZlY3Qgb25seSB1c2VyLXNwYWNlIHRlc3RzLCBhbmQgdGhlIGNoYW5nZSBpbiBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYWRqdXN0cyBhIHN0YW5kYWxvbmUgdGVzdCBtb2R1bGUgKGV4ZWN1dGVkIG9ubHkgb24gbW9kdWxlIGluaXQvYm9vdCBhbmQgaW1tZWRpYXRlbHkgdW5sb2FkZWQpIHRvIGNvbmZvcm0gdG8gdGhlIGNvbXBpbGUtdGltZSBjaGVjayB3aXRob3V0IGFsdGVyaW5nIGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4gVGh1cywgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3b3J0aCBmdXp6aW5nIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzk6NTQuMDUxMDU4NzI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkhx2r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 22:16:55 +0000 UTC FinishedAt: 2026-09-11 22:39:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBBU1NFUlRfU1RBVElDX1NUT1JBR0UoKSwgd2hpY2ggaXMgYSBwdXJlbHkgY29tcGlsZS10aW1lIHN0YXRpYyBjaGVjayBlbmZvcmNpbmcgc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gb24gREVGSU5FX0lEQSBhbmQgREVGSU5FX01UUkVFIGRlY2xhcmF0aW9ucy4gSXQgZW1pdHMgbm8gcnVudGltZSBpbnN0cnVjdGlvbnMsIGRlZmVuc2l2ZSBhc3NlcnRpb25zLCBvciBjb250cm9sLWZsb3cgbW9kaWZpY2F0aW9ucy4gVGhlIGNoYW5nZXMgaW4gdG9vbHMvIGFmZmVjdCBvbmx5IHVzZXItc3BhY2UgdGVzdHMsIGFuZCB0aGUgY2hhbmdlIGluIGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYyBhZGp1c3RzIGEgc3RhbmRhbG9uZSB0ZXN0IG1vZHVsZSAoZXhlY3V0ZWQgb25seSBvbiBtb2R1bGUgaW5pdC9ib290IGFuZCBpbW1lZGlhdGVseSB1bmxvYWRlZCkgdG8gY29uZm9ybSB0byB0aGUgY29tcGlsZS10aW1lIGNoZWNrIHdpdGhvdXQgYWx0ZXJpbmcgYW55IGZ1bmN0aW9uYWwga2VybmVsIGxvZ2ljLiBUaHVzLCBubyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdvcnRoIGZ1enppbmcgaXMgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjNhNDBhOGFkNDNkMWZmZjkyN2UzODhkMTdkMmFiMmQ2N2Q3YjliZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIyOjM3OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuaW5kZXggY2IyZjYwNTBiZGY3ZC4uZWY5MDM2ZmE1NDEzZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oXG5AQCAtMjc1LDYgJiM0MzsyNzUsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkICpvZmZzZXRfdG9fcHRyKGNvbnN0IGludCAqb2ZmKVxuICNkZWZpbmUgX19BRERSRVNTQUJMRShzeW0pIFxcXG4gXHRfX19BRERSRVNTQUJMRShzeW0sIF9fc2VjdGlvbihcJiMzNDsuZGlzY2FyZC5hZGRyZXNzYWJsZVwmIzM0OykpXG4gXG4mIzQzOy8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovXG4mIzQzOyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXG4mIzQzO1x0c3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcXFxuJiM0MztcdFx0bmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcdTAwMjYobmFtZSlcbiYjNDM7XG4gLypcbiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzXG4gICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZHIuaCBiL2luY2x1ZGUvbGludXgvaWRyLmhcbmluZGV4IDc4OWUyM2U2NzQ0NDEuLmUyYTRiNjI5ODUxMWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lkci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lkci5oXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgaWRyIHtcbiBcdHN0cnVjdCByYWRpeF90cmVlX3Jvb3RcdGlkcl9ydDtcbkBAIC0yNjksNyAmIzQzOzI3MCw5IEBAIHN0cnVjdCBpZGEge1xuICNkZWZpbmUgSURBX0lOSVQobmFtZSlcdHtcdFx0XHRcdFx0XHRcXFxuIFx0LnhhID0gWEFSUkFZX0lOSVQobmFtZSwgSURBX0lOSVRfRkxBR1MpXHRcdFx0XHRcXFxuIH1cbi0jZGVmaW5lIERFRklORV9JREEobmFtZSlcdHN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpXG4mIzQzOyNkZWZpbmUgREVGSU5FX0lEQShuYW1lKVx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRzdHJ1Y3QgaWRhIG5hbWUgPSBJREFfSU5JVChuYW1lKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbiBcbiBpbnQgaWRhX2FsbG9jX3JhbmdlKHN0cnVjdCBpZGEgKiwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwgZ2ZwX3QpO1xuIHZvaWQgaWRhX2ZyZWUoc3RydWN0IGlkYSAqLCB1bnNpZ25lZCBpbnQgaWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbmluZGV4IGU1OTVhZTVjZDBlZWQuLmUzMGU1N2Y1ZjNkZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbkBAIC05LDYgJiM0Mzs5LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiBcbkBAIC0yOTcsNyAmIzQzOzI5OCw4IEBAIHN0cnVjdCBtYXBsZV90cmVlIHtcbiAjZW5kaWZcbiBcbiAjZGVmaW5lIERFRklORV9NVFJFRShuYW1lKVx0XHRcdFx0XHRcdFxcXG4tXHRzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKVxuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlIG5hbWUgPSBNVFJFRV9JTklUKG5hbWUsIDApO1x0XHRcXFxuJiM0MztcdEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKVxuIFxuICNkZWZpbmUgbXRyZWVfbG9jayhtdClcdFx0c3Bpbl9sb2NrKChcdTAwMjYobXQpLVx1MDAzZW1hX2xvY2spKVxuICNkZWZpbmUgbXRyZWVfbG9ja19uZXN0ZWQobWFzLCBzdWJjbGFzcykgXFxcbmRpZmYgLS1naXQgYS9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcbmluZGV4IGIwYjA3MjcwY2U3YzMuLjA2Zjc3ZmIzMTc5ZmMgMTAwNjQ0XG4tLS0gYS9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY1xuQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgbGFzdDtcbiBcdHN0cnVjdCBpbnRlcnZhbF90cmVlX3NwYW5faXRlciBzcGFuLCBtYXNfc3BhbjtcbiBcbi1cdERFRklORV9NVFJFRSh0cmVlKTtcbiYjNDM7XHRzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlO1xuIFxuIFx0TUFfU1RBVEUobWFzLCBcdTAwMjZ0cmVlLCAwLCAwKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcbmluZGV4IGYyZjU0YjAzODE2ODAuLjAzZWNmOTA4NjY0MzYgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuQEAgLTczLDYgJiM0Mzs3MywxMSBAQFxuICMgZGVmaW5lIF9fc2FtZV90eXBlKGEsIGIpIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGEpLCB0eXBlb2YoYikpXG4gI2VuZGlmXG4gXG4mIzQzOy8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovXG4mIzQzOyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXG4mIzQzO1x0c3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcXFxuJiM0MztcdFx0bmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcdTAwMjYobmFtZSlcbiYjNDM7XG4gLypcbiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzXG4gICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL2lkci10ZXN0LmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuY1xuaW5kZXggOTQ1MTQ0ZTk4NTA3Mi4uNmZjYmE1YjU4NzBiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuY1xuQEAgLTQ2MCw5ICYjNDM7NDYwLDExIEBAIHZvaWQgaWRhX2R1bXAoc3RydWN0IGlkYSAqKTtcbiAgKi9cbiB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKVxuIHtcbi1cdERFRklORV9JREEoaWRhKTtcbiYjNDM7XHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdGludCBpZDtcbiBcbiYjNDM7XHRpZGFfaW5pdChcdTAwMjZpZGEpO1xuJiM0MztcbiBcdGlkID0gaWRhX2FsbG9jX21pbihcdTAwMjZpZGEsIDI1NiwgR0ZQX05PV0FJVCk7XG4gXHRJREFfQlVHX09OKFx1MDAyNmlkYSwgaWQgIT0gLUVOT01FTSk7XG4gXHRpZCA9IGlkYV9hbGxvY19taW4oXHUwMDI2aWRhLCAxVUwgXHUwMDNjXHUwMDNjIDMwLCBHRlBfTk9XQUlUKTtcbkBAIC00NzUsOSAmIzQzOzQ3NywxMSBAQCB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKVxuICAqL1xuIHZvaWQgaWRhX2NoZWNrX2NvbnZfdXNlcih2b2lkKVxuIHtcbi1cdERFRklORV9JREEoaWRhKTtcbiYjNDM7XHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiYjNDM7XHRpZGFfaW5pdChcdTAwMjZpZGEpO1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwMDA7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGludCBpZCA9IGlkYV9hbGxvYyhcdTAwMjZpZGEsIEdGUF9OT1dBSVQpO1xuIFx0XHRpZiAoaWQgPT0gLUVOT01FTSkge1xuQEAgLTQ5NiwxMSAmIzQzOzUwMCwxMyBAQCB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZClcbiBcbiB2b2lkIGlkYV9jaGVja19yYW5kb20odm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4mIzQzO1x0c3RydWN0IGlkYSBpZGE7XG4gXHRERUNMQVJFX0JJVE1BUChiaXRtYXAsIDIwNDgpO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXHR0aW1lX3QgcyA9IHRpbWUoTlVMTCk7XG4gXG4mIzQzO1x0aWRhX2luaXQoXHUwMDI2aWRhKTtcbiYjNDM7XG4gIHJlcGVhdDpcbiBcdG1lbXNldChiaXRtYXAsIDAsIHNpemVvZihiaXRtYXApKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwMDsgaSYjNDM7JiM0MzspIHtcbkBAIC01MjIsOSAmIzQzOzUyOCwxMSBAQCB2b2lkIGlkYV9jaGVja19yYW5kb20odm9pZClcbiBcbiB2b2lkIGlkYV9hbGxvY19mcmVlX3Rlc3Qodm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4mIzQzO1x0c3RydWN0IGlkYSBpZGE7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4mIzQzO1x0aWRhX2luaXQoXHUwMDI2aWRhKTtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwMDsgaSYjNDM7JiM0MzspXG4gXHRcdGFzc2VydChpZGFfYWxsb2NfbWF4KFx1MDAyNmlkYSwgMjAwMDAsIEdGUF9LRVJORUwpID09IGkpO1xuIFx0YXNzZXJ0KGlkYV9hbGxvY19yYW5nZShcdTAwMjZpZGEsIDUsIDMwLCBHRlBfS0VSTkVMKSBcdTAwM2MgMCk7XG5AQCAtNTc2LDEwICYjNDM7NTg0LDEyIEBAIHN0YXRpYyB2b2lkICppZGFfbGVha19mbih2b2lkICphcmcpXG4gXG4gdm9pZCBpZGFfdGhyZWFkX3Rlc3RzKHZvaWQpXG4ge1xuLVx0REVGSU5FX0lEQShpZGEpO1xuJiM0MztcdHN0cnVjdCBpZGEgaWRhO1xuIFx0cHRocmVhZF90IHRocmVhZHNbMjBdO1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0aWRhX2luaXQoXHUwMDI2aWRhKTtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRocmVhZHMpOyBpJiM0MzsmIzQzOylcbiBcdFx0aWYgKHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIGlkYV9yYW5kb21fZm4sIE5VTEwpKSB7XG4gXHRcdFx0cGVycm9yKFwmIzM0O2NyZWF0aW5nIGlkYSB0aHJlYWRcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbmluZGV4IGQ5NjdlNzZhM2MwNjUuLmJmZTRiODYyNmM0MjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbkBAIC0zNjAyMiwxMCAmIzQzOzM2MDIyLDEyIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19lcmFzZV9yZWJhbGFuY2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuIFxuIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19tdHJlZV9kdXAoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuIHtcbi1cdERFRklORV9NVFJFRShuZXcpO1xuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlIG5ldztcbiBcdGludCBpLCBqLCByZXQsIGNvdW50ID0gMDtcbiBcdHVuc2lnbmVkIGludCByYW5kX3NlZWQgPSAxNywgcmFuZDtcbiBcbiYjNDM7XHRtdF9pbml0KFx1MDAyNm5ldyk7XG4mIzQzO1xuIFx0Lyogc3RvcmUgYSB2YWx1ZSBhdCBbMCwgMF0gKi9cbiBcdG10X2luaXRfZmxhZ3MobXQsIDApO1xuIFx0bXRyZWVfc3RvcmVfcmFuZ2UobXQsIDAsIDAsIHhhX21rX3ZhbHVlKDApLCBHRlBfS0VSTkVMKTtcbkBAIC0zNjMxOSw3ICYjNDM7MzYzMjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja192bWFfbW9kaWZpY2F0aW9uKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiB2b2lkIGZhcm1lcl90ZXN0cyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlO1xuLVx0REVGSU5FX01UUkVFKHRyZWUpO1xuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XG4mIzQzO1xuJiM0MztcdG10X2luaXQoXHUwMDI2dHJlZSk7XG4gXG4gXHRtdF9kdW1wKFx1MDAyNnRyZWUsIG10X2R1bXBfZGVjKTtcbiBcbkBAIC0zNjQzMiw5ICYjNDM7MzY0MzYsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xhc3RfaW5kZXgoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gc3RhdGljIHZvaWQgdGVzdF9zcGFubmluZ19zdG9yZV9yZWdyZXNzaW9uKHZvaWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmcm9tID0gMCwgdG8gPSAwO1xuLVx0REVGSU5FX01UUkVFKHRyZWUpO1xuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XG4gXHRNQV9TVEFURShtYXMsIFx1MDAyNnRyZWUsIDAsIDApO1xuIFxuJiM0MztcdG10X2luaXQoXHUwMDI2dHJlZSk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEJ1aWxkIGEgMy1sZXZlbCB0cmVlLiBXZSByZXF1aXJlIGEgcGFyZW50IG5vZGUgYmVsb3cgdGhlIHJvb3Qgbm9kZVxuIFx0ICogYW5kIDIgbGVhZiBub2RlcyB1bmRlciBpdCwgc28gd2UgY2FuIHNwYW4gdGhlIGVudGlyZXR5IG9mIHRoZSByaWdodFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKCksIHdoaWNoIGlzIGEgcHVyZWx5IGNvbXBpbGUtdGltZSBzdGF0aWMgY2hlY2sgZW5mb3JjaW5nIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIG9uIERFRklORV9JREEgYW5kIERFRklORV9NVFJFRSBkZWNsYXJhdGlvbnMuIEl0IGVtaXRzIG5vIHJ1bnRpbWUgaW5zdHJ1Y3Rpb25zLCBkZWZlbnNpdmUgYXNzZXJ0aW9ucywgb3IgY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIHRvb2xzLyBhZmZlY3Qgb25seSB1c2VyLXNwYWNlIHRlc3RzLCBhbmQgdGhlIGNoYW5nZSBpbiBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYWRqdXN0cyBhIHN0YW5kYWxvbmUgdGVzdCBtb2R1bGUgKGV4ZWN1dGVkIG9ubHkgb24gbW9kdWxlIGluaXQvYm9vdCBhbmQgaW1tZWRpYXRlbHkgdW5sb2FkZWQpIHRvIGNvbmZvcm0gdG8gdGhlIGNvbXBpbGUtdGltZSBjaGVjayB3aXRob3V0IGFsdGVyaW5nIGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4gVGh1cywgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3b3J0aCBmdXp6aW5nIGlzIG1vZGlmaWVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIzYTQwYThhZDQzZDFmZmY5MjdlMzg4ZDE3ZDJhYjJkNjdkN2I5YmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAyMjozNzowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCBjYjJmNjA1MGJkZjdkLi5lZjkwMzZmYTU0MTNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0yNzUsNiAmIzQzOzI3NSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKm9mZnNldF90b19wdHIoY29uc3QgaW50ICpvZmYpCiAjZGVmaW5lIF9fQUREUkVTU0FCTEUoc3ltKSBcCiAJX19fQUREUkVTU0FCTEUoc3ltLCBfX3NlY3Rpb24oJiMzNDsuZGlzY2FyZC5hZGRyZXNzYWJsZSYjMzQ7KSkKIAomIzQzOy8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovCiYjNDM7I2RlZmluZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSkgXAomIzQzOwlzdGF0aWMgdHlwZW9mKG5hbWUpICogY29uc3QgX19hbHdheXNfdW51c2VkIFwKJiM0MzsJCW5hbWUjI19zdG9yYWdlX2NoZWNrID0gJmFtcDsobmFtZSkKJiM0MzsKIC8qCiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzCiAgKiBhIGNvbnN0YW50IGV4cHJlc3Npb24sIG1vc3QgaW1wb3J0YW50bHkgd2l0aG91dCBldmFsdWF0aW5nIHRoZSBhcmd1bWVudC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRyLmggYi9pbmNsdWRlL2xpbnV4L2lkci5oCmluZGV4IDc4OWUyM2U2NzQ0NDEuLmUyYTRiNjI5ODUxMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pZHIuaApAQCAtMTYsNiAmIzQzOzE2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wZXJjcHUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAKIHN0cnVjdCBpZHIgewogCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QJaWRyX3J0OwpAQCAtMjY5LDcgJiM0MzsyNzAsOSBAQCBzdHJ1Y3QgaWRhIHsKICNkZWZpbmUgSURBX0lOSVQobmFtZSkJewkJCQkJCVwKIAkueGEgPSBYQVJSQVlfSU5JVChuYW1lLCBJREFfSU5JVF9GTEFHUykJCQkJXAogfQotI2RlZmluZSBERUZJTkVfSURBKG5hbWUpCXN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpCiYjNDM7I2RlZmluZSBERUZJTkVfSURBKG5hbWUpCQkJCQkJCVwKJiM0MzsJc3RydWN0IGlkYSBuYW1lID0gSURBX0lOSVQobmFtZSk7CQkJCQlcCiYjNDM7CUFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKQogCiBpbnQgaWRhX2FsbG9jX3JhbmdlKHN0cnVjdCBpZGEgKiwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwgZ2ZwX3QpOwogdm9pZCBpZGFfZnJlZShzdHJ1Y3QgaWRhICosIHVuc2lnbmVkIGludCBpZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCmluZGV4IGU1OTVhZTVjZDBlZWQuLmUzMGU1N2Y1ZjNkZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCkBAIC05LDYgJiM0Mzs5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogCkBAIC0yOTcsNyAmIzQzOzI5OCw4IEBAIHN0cnVjdCBtYXBsZV90cmVlIHsKICNlbmRpZgogCiAjZGVmaW5lIERFRklORV9NVFJFRShuYW1lKQkJCQkJCVwKLQlzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKQomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKTsJCVwKJiM0MzsJQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpCiAKICNkZWZpbmUgbXRyZWVfbG9jayhtdCkJCXNwaW5fbG9jaygoJmFtcDsobXQpLSZndDttYV9sb2NrKSkKICNkZWZpbmUgbXRyZWVfbG9ja19uZXN0ZWQobWFzLCBzdWJjbGFzcykgXApkaWZmIC0tZ2l0IGEvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGIvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jCmluZGV4IGIwYjA3MjcwY2U3YzMuLjA2Zjc3ZmIzMTc5ZmMgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMKQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKQogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGxhc3Q7CiAJc3RydWN0IGludGVydmFsX3RyZWVfc3Bhbl9pdGVyIHNwYW4sIG1hc19zcGFuOwogCi0JREVGSU5FX01UUkVFKHRyZWUpOwomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlOwogCiAJTUFfU1RBVEUobWFzLCAmYW1wO3RyZWUsIDAsIDApOwogCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggZjJmNTRiMDM4MTY4MC4uMDNlY2Y5MDg2NjQzNiAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtNzMsNiAmIzQzOzczLDExIEBACiAjIGRlZmluZSBfX3NhbWVfdHlwZShhLCBiKSBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihhKSwgdHlwZW9mKGIpKQogI2VuZGlmCiAKJiM0MzsvKiBFbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiAqLwomIzQzOyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFwKJiM0MzsJc3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcCiYjNDM7CQluYW1lIyNfc3RvcmFnZV9jaGVjayA9ICZhbXA7KG5hbWUpCiYjNDM7CiAvKgogICogVGhpcyByZXR1cm5zIGEgY29uc3RhbnQgZXhwcmVzc2lvbiB3aGlsZSBkZXRlcm1pbmluZyBpZiBhbiBhcmd1bWVudCBpcwogICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jCmluZGV4IDk0NTE0NGU5ODUwNzIuLjZmY2JhNWI1ODcwYjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jCkBAIC00NjAsOSAmIzQzOzQ2MCwxMSBAQCB2b2lkIGlkYV9kdW1wKHN0cnVjdCBpZGEgKik7CiAgKi8KIHZvaWQgaWRhX2NoZWNrX25vbWVtKHZvaWQpCiB7Ci0JREVGSU5FX0lEQShpZGEpOwomIzQzOwlzdHJ1Y3QgaWRhIGlkYTsKIAlpbnQgaWQ7CiAKJiM0MzsJaWRhX2luaXQoJmFtcDtpZGEpOwomIzQzOwogCWlkID0gaWRhX2FsbG9jX21pbigmYW1wO2lkYSwgMjU2LCBHRlBfTk9XQUlUKTsKIAlJREFfQlVHX09OKCZhbXA7aWRhLCBpZCAhPSAtRU5PTUVNKTsKIAlpZCA9IGlkYV9hbGxvY19taW4oJmFtcDtpZGEsIDFVTCAmbHQ7Jmx0OyAzMCwgR0ZQX05PV0FJVCk7CkBAIC00NzUsOSAmIzQzOzQ3NywxMSBAQCB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKQogICovCiB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZCkKIHsKLQlERUZJTkVfSURBKGlkYSk7CiYjNDM7CXN0cnVjdCBpZGEgaWRhOwogCXVuc2lnbmVkIGxvbmcgaTsKIAomIzQzOwlpZGFfaW5pdCgmYW1wO2lkYSk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IDEwMDAwMDA7IGkmIzQzOyYjNDM7KSB7CiAJCWludCBpZCA9IGlkYV9hbGxvYygmYW1wO2lkYSwgR0ZQX05PV0FJVCk7CiAJCWlmIChpZCA9PSAtRU5PTUVNKSB7CkBAIC00OTYsMTEgJiM0Mzs1MDAsMTMgQEAgdm9pZCBpZGFfY2hlY2tfY29udl91c2VyKHZvaWQpCiAKIHZvaWQgaWRhX2NoZWNrX3JhbmRvbSh2b2lkKQogewotCURFRklORV9JREEoaWRhKTsKJiM0MzsJc3RydWN0IGlkYSBpZGE7CiAJREVDTEFSRV9CSVRNQVAoYml0bWFwLCAyMDQ4KTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl0aW1lX3QgcyA9IHRpbWUoTlVMTCk7CiAKJiM0MzsJaWRhX2luaXQoJmFtcDtpZGEpOwomIzQzOwogIHJlcGVhdDoKIAltZW1zZXQoYml0bWFwLCAwLCBzaXplb2YoYml0bWFwKSk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IDEwMDAwMDsgaSYjNDM7JiM0MzspIHsKQEAgLTUyMiw5ICYjNDM7NTI4LDExIEBAIHZvaWQgaWRhX2NoZWNrX3JhbmRvbSh2b2lkKQogCiB2b2lkIGlkYV9hbGxvY19mcmVlX3Rlc3Qodm9pZCkKIHsKLQlERUZJTkVfSURBKGlkYSk7CiYjNDM7CXN0cnVjdCBpZGEgaWRhOwogCXVuc2lnbmVkIGxvbmcgaTsKIAomIzQzOwlpZGFfaW5pdCgmYW1wO2lkYSk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IDEwMDAwOyBpJiM0MzsmIzQzOykKIAkJYXNzZXJ0KGlkYV9hbGxvY19tYXgoJmFtcDtpZGEsIDIwMDAwLCBHRlBfS0VSTkVMKSA9PSBpKTsKIAlhc3NlcnQoaWRhX2FsbG9jX3JhbmdlKCZhbXA7aWRhLCA1LCAzMCwgR0ZQX0tFUk5FTCkgJmx0OyAwKTsKQEAgLTU3NiwxMCAmIzQzOzU4NCwxMiBAQCBzdGF0aWMgdm9pZCAqaWRhX2xlYWtfZm4odm9pZCAqYXJnKQogCiB2b2lkIGlkYV90aHJlYWRfdGVzdHModm9pZCkKIHsKLQlERUZJTkVfSURBKGlkYSk7CiYjNDM7CXN0cnVjdCBpZGEgaWRhOwogCXB0aHJlYWRfdCB0aHJlYWRzWzIwXTsKIAlpbnQgaTsKIAomIzQzOwlpZGFfaW5pdCgmYW1wO2lkYSk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodGhyZWFkcyk7IGkmIzQzOyYjNDM7KQogCQlpZiAocHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzW2ldLCBOVUxMLCBpZGFfcmFuZG9tX2ZuLCBOVUxMKSkgewogCQkJcGVycm9yKCYjMzQ7Y3JlYXRpbmcgaWRhIHRocmVhZCYjMzQ7KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKaW5kZXggZDk2N2U3NmEzYzA2NS4uYmZlNGI4NjI2YzQyOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKQEAgLTM2MDIyLDEwICYjNDM7MzYwMjIsMTIgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX2VyYXNlX3JlYmFsYW5jZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpCiAKIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19tdHJlZV9kdXAoc3RydWN0IG1hcGxlX3RyZWUgKm10KQogewotCURFRklORV9NVFJFRShuZXcpOwomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSBuZXc7CiAJaW50IGksIGosIHJldCwgY291bnQgPSAwOwogCXVuc2lnbmVkIGludCByYW5kX3NlZWQgPSAxNywgcmFuZDsKIAomIzQzOwltdF9pbml0KCZhbXA7bmV3KTsKJiM0MzsKIAkvKiBzdG9yZSBhIHZhbHVlIGF0IFswLCAwXSAqLwogCW10X2luaXRfZmxhZ3MobXQsIDApOwogCW10cmVlX3N0b3JlX3JhbmdlKG10LCAwLCAwLCB4YV9ta192YWx1ZSgwKSwgR0ZQX0tFUk5FTCk7CkBAIC0zNjMxOSw3ICYjNDM7MzYzMjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja192bWFfbW9kaWZpY2F0aW9uKHN0cnVjdCBtYXBsZV90cmVlICptdCkKIHZvaWQgZmFybWVyX3Rlc3RzKHZvaWQpCiB7CiAJc3RydWN0IG1hcGxlX25vZGUgKm5vZGU7Ci0JREVGSU5FX01UUkVFKHRyZWUpOwomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlOwomIzQzOwomIzQzOwltdF9pbml0KCZhbXA7dHJlZSk7CiAKIAltdF9kdW1wKCZhbXA7dHJlZSwgbXRfZHVtcF9kZWMpOwogCkBAIC0zNjQzMiw5ICYjNDM7MzY0MzYsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xhc3RfaW5kZXgoc3RydWN0IG1hX3N0YXRlICptYXMpCiBzdGF0aWMgdm9pZCB0ZXN0X3NwYW5uaW5nX3N0b3JlX3JlZ3Jlc3Npb24odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZyb20gPSAwLCB0byA9IDA7Ci0JREVGSU5FX01UUkVFKHRyZWUpOwomIzQzOwlzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlOwogCU1BX1NUQVRFKG1hcywgJmFtcDt0cmVlLCAwLCAwKTsKIAomIzQzOwltdF9pbml0KCZhbXA7dHJlZSk7CiYjNDM7CiAJLyoKIAkgKiBCdWlsZCBhIDMtbGV2ZWwgdHJlZS4gV2UgcmVxdWlyZSBhIHBhcmVudCBub2RlIGJlbG93IHRoZSByb290IG5vZGUKIAkgKiBhbmQgMiBsZWFmIG5vZGVzIHVuZGVyIGl0LCBzbyB3ZSBjYW4gc3BhbiB0aGUgZW50aXJldHkgb2YgdGhlIHJpZ2h0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUcmlhZ2U6IFBhdGNoIFNlcmllcyBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSB0YXNrIGl0c2VsZiBpcyBiZW5pZ24sIGZvY3VzaW5nIG9uIGtlcm5lbCBwYXRjaCByZXZpZXcgZm9yIGZ1enppbmcgdHJpYWdlLCBzbyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRpZmYgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4KClRoZSBidWxrIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYC4gVGhpcyBtYWNybyBlbmZvcmNlcyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBmb3IgY2VydGFpbiBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSBgaWRhYCBhbmQgYG1hcGxlX3RyZWVgLCBhcyBzZWVuIGluIGBpbmNsdWRlL2xpbnV4L2lkci5oYCBhbmQgYGluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oYC4gSXQgbG9va3MgbGlrZSBpdCBpcyB0byBjaGVjayBmb3IgYWNjaWRlbnRhbCB1c2Ugb2YgdGhlc2Ugc3RydWN0dXJlcyBpbiBmdW5jdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGV4cGVjdGVkIHRvIHVzZSBzdGF0aWMgc3RvcmFnZS4KCk5vdywgdGhlIGludGVyZXN0aW5nIGJpdCwgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AsIEkgc2VlIGEgKmNoYW5nZSogcmVsYXRlZCB0byBgREVGSU5FX01UUkVFKHRyZWUpYC4gSXQmIzM5O3MgYmVlbiBhbHRlcmVkIHRvIGBzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlO2AuIEltbWVkaWF0ZWx5LCBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIGNoYW5nZSBpcyBqdXN0IGEgZGlyZWN0IHJlcGxhY2VtZW50LCBvciBpZiBzb21ldGhpbmcgZWxzZSBpcyBnb2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGB0cmVlYCBpcyAqaW5pdGlhbGl6ZWQqIGxhdGVyIGluIHRoZSBmaWxlIGlmIGl0JiMzOTtzIG5vIGxvbmdlciBiZWluZyBpbml0aWFsaXplZCBieSB0aGUgYERFRklORV9NVFJFRWAgbWFjcm8uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCB0byBsb29rIGZvciB0aGF0IGluaXRpYWxpemF0aW9uLiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGJlIHF1aWNrIGFib3V0IGl0LgoKRmluYWxseSwgdGhlcmUgYXJlIHNvbWUgdG9vbC1yZWxhdGVkIGNoYW5nZXMgaW4gYHRvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaGAsIGB0b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNgLiBUaGV5JiMzOTtyZSBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBtYWNybyBpdHNlbGYsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlbSBzZXBhcmF0ZWx5IGlmIHRoZXkgYXJlIG5lY2Vzc2FyeSBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL2ludGVydmFsX3RyZWVfdGVzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHRcbiAyNDE6XHRzdGF0aWMgaW50IHNwYW5faXRlcmF0aW9uX2NoZWNrKHZvaWQpXG4gMjQyOlx0e1xuIDI0MzpcdFx0aW50IGksIGosIGs7XG4gMjQ0Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBsYXN0O1xuIDI0NTpcdFx0c3RydWN0IGludGVydmFsX3RyZWVfc3Bhbl9pdGVyIHNwYW4sIG1hc19zcGFuO1xuIDI0NjpcdFxuIDI0NzpcdFx0c3RydWN0IG1hcGxlX3RyZWUgdHJlZTtcbiAyNDg6XHRcbiAyNDk6XHRcdE1BX1NUQVRFKG1hcywgXHUwMDI2dHJlZSwgMCwgMCk7XG4gMjUwOlx0XG4gMjUxOlx0XHRwcmludGsoS0VSTl9BTEVSVCBcJiMzNDtpbnRlcnZhbCB0cmVlIHNwYW4gaXRlcmF0aW9uXFxuXCYjMzQ7KTtcbiAyNTI6XHRcbiAyNTM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNlYXJjaF9sb29wczsgaSYjNDM7JiM0MzspIHtcbiAyNTQ6XHRcdFx0LyogSW5pdGlhbGl6ZSBpbnRlcnZhbCB0cmVlIGZvciBlYWNoIHJvdW5kICovXG4gMjU1Olx0XHRcdGluaXQoKTtcbiAyNTY6XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2Mgbm5vZGVzOyBqJiM0MzsmIzQzOylcbiAyNTc6XHRcdFx0XHRpbnRlcnZhbF90cmVlX2luc2VydChub2RlcyAmIzQzOyBqLCBcdTAwMjZyb290KTtcbiAyNTg6XHRcbiAyNTk6XHRcdFx0LyogUHV0IGFsbCB0aGUgcmFuZ2UgaW50byBtYXBsZSB0cmVlICovXG4gMjYwOlx0XHRcdG10X2luaXRfZmxhZ3MoXHUwMDI2dHJlZSwgTVRfRkxBR1NfQUxMT0NfUkFOR0UpO1xuIDI2MTpcdFx0XHRtdF9zZXRfaW5fcmN1KFx1MDAyNnRyZWUpO1xuIDI2MjpcdFxuIDI2MzpcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBubm9kZXM7IGomIzQzOyYjNDM7KVxuIDI2NDpcdFx0XHRcdFdBUk5fT05fT05DRShtdHJlZV9zdG9yZV9yYW5nZShcdTAwMjZ0cmVlLCBub2Rlc1tqXS5zdGFydCxcbiAyNjU6XHRcdFx0XHRcdFx0bm9kZXNbal0ubGFzdCwgbm9kZXMgJiM0MzsgaiwgR0ZQX0tFUk5FTCkpO1xuIDI2NjpcdFxuIDI2NzpcdFx0XHQvKiBMZXQmIzM5O3MgdHJ5IG5zZWFyY2hlcyBkaWZmZXJlbnQgcmFuZ2VzICovXG4gMjY4Olx0XHRcdGZvciAoayA9IDA7IGsgXHUwMDNjIG5zZWFyY2hlczsgayYjNDM7JiM0MzspIHtcbiAyNjk6XHRcdFx0XHQvKiBUcnkgd2hvbGUgcmFuZ2Ugb25jZSAqL1xuIDI3MDpcdFx0XHRcdGlmICghaykge1xuIDI3MTpcdFx0XHRcdFx0c3RhcnQgPSAwVUw7XG4gMjcyOlx0XHRcdFx0XHRsYXN0ID0gVUxPTkdfTUFYO1xuIDI3MzpcdFx0XHRcdH0gZWxzZSB7XG4gMjc0Olx0XHRcdFx0XHRsYXN0ID0gKHByYW5kb21fdTMyX3N0YXRlKFx1MDAyNnJuZCkgXHUwMDNlXHUwMDNlIDQpICUgbWF4X2VuZHBvaW50O1xuIDI3NTpcdFx0XHRcdFx0c3RhcnQgPSAocHJhbmRvbV91MzJfc3RhdGUoXHUwMDI2cm5kKSBcdTAwM2VcdTAwM2UgNCkgJSBsYXN0O1xuIDI3NjpcdFx0XHRcdH1cbiAyNzc6XHRcbiAyNzg6XHRcdFx0XHRtYXNfc3Bhbi5maXJzdF9pbmRleCA9IHN0YXJ0O1xuIDI3OTpcdFx0XHRcdG1hc19zcGFuLmxhc3RfaW5kZXggPSBsYXN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgSW50ZXJ2YWwgVHJlZSBUZXN0IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHNwYW5faXRlcmF0aW9uX2NoZWNrYCBmdW5jdGlvbiB3aXRoaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBpbml0aWFsaXphdGlvbiBvZiBgdHJlZWAgd2l0aGluIHRoZSBsb29wOiBgbXRfaW5pdF9mbGFncygmYW1wO3RyZWUsIE1UX0ZMQUdTX0FMTE9DX1JBTkdFKWAgb24gbGluZSAyNjAuICpIb2xkIG9uIGEgc2Vjb25kKiwgaXNuJiMzOTt0IGB0cmVlYCBhbHJlYWR5IGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyB2YXJpYWJsZS4KCkZpcnN0LCBJIHNob3VsZCBwcm9iYWJseSB1bmRlcnN0YW5kIHRoaXMgZmlsZSBtb3JlIHRob3JvdWdobHkuIFdoYXQgZXhhY3RseSAqaXMqIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgPyBBIHF1aWNrIHJlZnJlc2hlciB3b3VsZCBiZSBoZWxwZnVsIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgY29kZSwgYW5kIGhvdyBpdOKAmXMgYmVpbmcgYnVpbHQgYW5kIHVzZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIGhvdyBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBwdWxsIHVwIHRoZSBNYWtlZmlsZSBhbmQgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBob3cgYGludGVydmFsX3RyZWVfdGVzdGAgaXMgYnVpbHQgYW5kIHVzZWQgd2l0aGluIHRoZSBwcm9qZWN0LiBUaGF0IHNob3VsZCBjbGFyaWZ5IHRoZSBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50ZXJ2YWxfdHJlZV90ZXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9NYWtlZmlsZT0yOTI9b2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSAmIzQzOz0gcmJ0cmVlX3Rlc3Qub1xubGliL01ha2VmaWxlOjI5MzpvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSAmIzQzOz0gaW50ZXJ2YWxfdHJlZV90ZXN0Lm9cbmxpYi9NYWtlZmlsZS0yOTQtXG4tLVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jPTMxMD1zdGF0aWMgaW5saW5lIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKSB7cmV0dXJuIDA7IH1cbi0tXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMzEyLVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jOjMxMzpzdGF0aWMgaW50IGludGVydmFsX3RyZWVfdGVzdF9pbml0KHZvaWQpXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMzE0LXtcbi0tXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMzU4LVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jOjM1OTpzdGF0aWMgdm9pZCBpbnRlcnZhbF90cmVlX3Rlc3RfZXhpdCh2b2lkKVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2MC17XG4tLVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2My1cbmxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYzozNjQ6bW9kdWxlX2luaXQoaW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQpXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmM6MzY1Om1vZHVsZV9leGl0KGludGVydmFsX3RyZWVfdGVzdF9leGl0KVxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2Ni1cbi0tXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZS00LVxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGU6NTpUQVJHRVRTID0gcmJ0cmVlX3Rlc3QgaW50ZXJ2YWxfdHJlZV90ZXN0XG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZS02LU9GSUxFUyA9ICQoU0hBUkVEX09GSUxFUykgcmJ0cmVlLXNoaW0ubyBpbnRlcnZhbF90cmVlLXNoaW0ubyBtYXBsZS1zaGltLm9cbi0tXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZT0yOD1pbnRlcnZhbF90cmVlLXNoaW0ubzogQ0ZMQUdTICYjNDM7PSAtRENPTkZJR19JTlRFUlZBTF9UUkVFX1NQQU5fSVRFUlxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGU6Mjk6aW50ZXJ2YWxfdHJlZV90ZXN0Lm86IFx0Li4vLi4vLi4vbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZTozMDppbnRlcnZhbF90cmVlX3Rlc3QubzogQ0ZMQUdTICYjNDM7PSAtRENPTkZJR19JTlRFUlZBTF9UUkVFX1NQQU5fSVRFUlxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGUtMzEtXG4tLVxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMTAtXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYzoxMTojaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcJiMzNDtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTEyLVxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmM9MTM9aW50IHVzYWdlKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMjUtXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYzoyNjp2b2lkIGludGVydmFsX3RyZWVfdGVzdHModm9pZClcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTI3LXtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjI4Olx0aW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQoKTtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjI5Olx0aW50ZXJ2YWxfdHJlZV90ZXN0X2V4aXQoKTtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTMwLX1cbi0tXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYz0zMj1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4tLVxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtNTUtXHRtYXBsZV90cmVlX2luaXQoKTtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjU2Olx0aW50ZXJ2YWxfdHJlZV90ZXN0cygpO1xudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtNTctXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3JidHJlZS90ZXN0Lmg9Mz12b2lkIHJidHJlZV90ZXN0cyh2b2lkKTtcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL3Rlc3QuaDo0OnZvaWQgaW50ZXJ2YWxfdHJlZV90ZXN0cyh2b2lkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTIyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhpcyBDb21taXQ6IERpdmluZyBpbnRvIHRoZSBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB1bmRlcnN0YW5kIHRoZSAqd2h5Ki4gRm9yZ2V0IGp1bXBpbmcgc3RyYWlnaHQgaW50byB0aGUgZGlmZjsgSSBuZWVkIHRoZSBjb250ZXh0LiBMZXQgbWUgY2hlY2sgdGhlIGNvbW1pdCBkZXNjcmlwdGlvbi4gV2hhdCB3YXMgdGhlIHRoaW5raW5nIGJlaGluZCB0aGlzPyBXaGF0IHByb2JsZW0gd2FzIGl0IHRyeWluZyB0byBzb2x2ZT8gT3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBnb29kIEdpdCBsb2cgbWVzc2FnZSBJIGNhbiBwZXJ1c2UuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RyYXRlZ3kgaGVyZSB3aWxsIGhlbHAgbWUgdG8gcXVpY2tseSBncmFzcCB3aGF0IHRoZSBkZXZlbG9wZXIgd2FzIGdvaW5nIGZvciwgYW5kIHRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcy4gV2l0aG91dCB0aGF0IGNydWNpYWwgaW5mb3JtYXRpb24sIEkgYW0ganVzdCBndWVzc2luZyBhYm91dCB0aGUgbW90aXZhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBU1NFUlRfU1RBVElDX1NUT1JBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb21waWxlci5oPTI1OD1zdGF0aWMgaW5saW5lIHZvaWQgKm9mZnNldF90b19wdHIoY29uc3QgaW50ICpvZmYpXG4tLVxuaW5jbHVkZS9saW51eC9jb21waWxlci5oLTI3OC0vKiBFbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiAqL1xuaW5jbHVkZS9saW51eC9jb21waWxlci5oOjI3OTojZGVmaW5lIEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKSBcXFxuaW5jbHVkZS9saW51eC9jb21waWxlci5oLTI4MC1cdHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L2lkci5oPTI2ND1zdHJ1Y3QgaWRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lkci5oLTI3NC1cdHN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpO1x0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9pZHIuaDoyNzU6XHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbmluY2x1ZGUvbGludXgvaWRyLmgtMjc2LVxuLS1cbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oPTI2MT1zdHJ1Y3QgbWFwbGVfdHJlZSB7XG4tLVxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtMzAxLVx0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7XHRcdFxcXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaDozMDI6XHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oLTMwMy1cbi0tXG50b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgtNzYtLyogRW5mb3JjZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gKi9cbnRvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaDo3NzojZGVmaW5lIEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKSBcXFxudG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oLTc4LVx0c3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UgTWFjcm8gYW5kIFBhdGNoIEltcGFjdCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpYCBtYWNyby4uLiBpdCYjMzk7cyBhIGNsZXZlciB0cmljay4gRXNzZW50aWFsbHksIGl0IGZvcmNlcyBhIGNvbXBpbGUtdGltZSBjaGVjayB0byBlbnN1cmUgYSB2YXJpYWJsZSBgbmFtZWAgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiBUaGUgbWFjcm8gY3JlYXRlcyBhIGBzdGF0aWNgIHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlLiBJbiBDLCB5b3UgKmNhbiYjMzk7dCogaW5pdGlhbGl6ZSBhIGBzdGF0aWNgIHBvaW50ZXIgd2l0aCB0aGUgYWRkcmVzcyBvZiBhbiBhdXRvbWF0aWMgKHN0YWNrKSB2YXJpYWJsZTsgdGhhdCYjMzk7cyBhIGNvbnN0YW50IGluaXRpYWxpemVyIHJlcXVpcmVtZW50LiBTbywgaWYgYG5hbWVgIGlzIGEgc3RhY2sgdmFyaWFibGUgd2l0aGluIGEgZnVuY3Rpb24sIHRoZSBjb21waWxlciB3aWxsIHJpZ2h0ZnVsbHkgYmFyZiB3aXRoIGEgY29tcGxhaW50IGFib3V0IGFuICYjMzQ7aW5pdGlhbGl6ZXIgZWxlbWVudCBpcyBub3QgY29uc3RhbnQmIzM0Oy4gQnJpbGxpYW50LiBJZiBgbmFtZWAgaXMgZGVjbGFyZWQgc3RhdGljLCBvciBhdCBmaWxlIHNjb3BlLCB0aGVuIGl0IGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LCBhbmQgdGhlIGNoZWNrIHBhc3Nlcy4KClNvLCB0aGlzIG1hY3JvIGlzIGEgc3RhdGljIGFzc2VydGlvbiwgYSBjb21waWxlLXRpbWUgY2hlY2suIEl0IGRvZXNuJiMzOTt0IGdlbmVyYXRlIGFueSBydW50aW1lIGNvZGUsIGFzIGBfX2Fsd2F5c191bnVzZWRgIHdvdWxkIGVuc3VyZSB0aGUgY29tcGlsZXIgb3B0aW1pemVzIGl0IG91dC4gVGhlIHByaW1hcnkgaW1wYWN0IGlzIHRvIGVuZm9yY2UgcHJvcGVyIHN0b3JhZ2UgZHVyYXRpb24gZm9yIHZhcmlhYmxlcyBkZWNsYXJlZCB3aXRoIGBERUZJTkVfSURBYCBhbmQgYERFRklORV9NVFJFRWAuCgpOb3csIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIHdlJiMzOTt2ZSBnb3QgYSBuZXcgbWFjcm8sIGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgLCBpbiBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIHRoZW4gYWRkZWQgdG8gdGhlIGRlZmluaXRpb24gbWFjcm9zIGBERUZJTkVfSURBYCBpbiBgaW5jbHVkZS9saW51eC9pZHIuaGAgYW5kIGBERUZJTkVfTVRSRUVgIGluIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGAuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AuIFRoZSB0ZXN0IGNhc2UgcHJldmlvdXNseSBkZWNsYXJlZCBgREVGSU5FX01UUkVFKHRyZWUpYCBhcyBhIGxvY2FsIHZhcmlhYmxlLiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgdG8gYERFRklORV9NVFJFRWAgbm93ICpmb3JjZXMqIHRoaXMgdG8gYmUgYSBjb21waWxlLXRpbWUgZXJyb3IhIFRoZSB0ZXN0IGNhc2UgKmhhZCogdG8gYmUgY2hhbmdlZCB0byB1c2UgYSBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZWAgdmFyaWFibGUsIGluaXRpYWxpemVkIHdpdGggYG10X2luaXRfZmxhZ3NgLiBUaGlzIGlzIGJ5IGRlc2lnbiwgYW5kIGNvcnJlY3RseSBlbmZvcmNlcyB0aGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgbWFjcm8uCgpBZGRpdGlvbmFsbHksIHVuZGVyIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHRoZSBzYW1lIGlzc3VlIHdpdGggYXV0b21hdGljIHN0b3JhZ2UgdmFyaWFibGVzIGluIHRoZSBgREVGSU5FX0lEQWAgbWFjcm8gY2F1c2VkIHNpbWlsYXIgY2hhbmdlcy4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGluc3RydWN0aW9ucywgdGhlIGNvcmUgcXVlc3Rpb24gaXMsICYjMzQ7SXMgdGhpcyBhIGNoYW5nZSB0byBleGVjdXRhYmxlIGtlcm5lbCBjb2RlLCBhbmQgZG9lcyBpdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFzc2VydGlvbnM/JiMzNDsgV2VsbCwgaXQgKmRvZXMqIG1vZGlmeSBleGVjdXRhYmxlIGNvZGUgKHRoZSB0ZXN0IGNhc2VzKSBieSBmb3JjaW5nIGNoYW5nZXMgdG8gdGhlIGRlZmluaXRpb24gb2Ygc3RvcmFnZS4gVGhlIGFzc2VydGlvbiBpc24mIzM5O3QgYSBydW50aW1lIGNoZWNrLCBidXQgYSBjb21waWxlLXRpbWUgYXNzZXJ0aW9uLiBJdCBzdGlsbCBmb3JjZXMgdGhlIGF1dGhvciB0byBjaG9vc2UgdGhlIGNvcnJlY3Qgc3RvcmFnZSBkdXJhdGlvbiwgd2hpY2ggbWF5IGV4cG9zZSBkZXNpZ24gY2hvaWNlcyB0aGF0IGFyZSBub3Qgb2J2aW91cyBhdCBhIGdsYW5jZS4KClRoZSBwYXRjaCAqZG9lcyogbW9kaWZ5IGNvZGUsIHNwZWNpZmljYWxseSB0ZXN0IGNvZGUgYW5kIHNvbWUgb2YgdGhlIGNvZGUgZGVmaW5pdGlvbnMuIFdlJiMzOTt2ZSBnb3QgY2hhbmdlcyBpbiBjb3JlIGtlcm5lbCBpbmNsdWRlIGZpbGVzIHRoYXQgaW50cm9kdWNlIHRoZSBjaGVjay4gVGhlIGNoYW5nZXMgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSBhbmQgdGhlIHRlc3QgY2FzZSBhcmUgKmRpcmVjdGx5KiBhIHJlc3VsdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gV2hpbGUgaXQgaXMgbm90IGEgcnVudGltZSBjaGVjaywgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBpbnZhcmlhbnQgKGNvcnJlY3Qgc3RvcmFnZSBkdXJhdGlvbiksIGFuZCBieSB0aGUgaW5zdHJ1Y3Rpb25zLCBldmVuICpjb21waWxlLXRpbWUqIGFzc2VydGlvbnMgaW4gKnJlYWNoYWJsZSogY29kZSB3YXJyYW50IGZ1enppbmcuIFRoZSB1cGRhdGVkIGRlZmluaXRpb25zIGFyZSByZWFjaGFibGUsIGFuZCB0aGUgdGVzdCBjYXNlIGNoYW5nZXMgc2hvdyBpdCBpcyByZWFjaGFibGUuCgpTbywgeWVzLCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucywgdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdGhyb3VnaCBmdXp6aW5nLCBiZWNhdXNlIGl0IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBieSBlbmZvcmNpbmcgbmV3IGludmFyaWFudHMgYW5kIHRoZSBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBjYXVzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIHRob3NlIGFyZSB2aW9sYXRlZCwgdGhlcmVmb3JlIGl0IGNvdWxkIGV4cG9zZSBkZXNpZ24gaXNzdWVzIG9yIGxhdGVudCBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZXBhcmFtLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnZhbF90cmVlLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmFuZG9tLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2FzbS90aW1leC5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXBsZV90cmVlLmhcdTAwM2VcbiAgMTE6XHRcbiAgMTI6XHQjZGVmaW5lIF9fcGFyYW0odHlwZSwgbmFtZSwgaW5pdCwgbXNnKVx0XHRcXFxuICAxMzpcdFx0c3RhdGljIHR5cGUgbmFtZSA9IGluaXQ7XHRcdFxcXG4gIDE0Olx0XHRtb2R1bGVfcGFyYW0obmFtZSwgdHlwZSwgMDQ0NCk7XHRcdFxcXG4gIDE1Olx0XHRNT0RVTEVfUEFSTV9ERVNDKG5hbWUsIG1zZyk7XG4gIDE2Olx0XG4gIDE3Olx0X19wYXJhbShpbnQsIG5ub2RlcywgMTAwLCBcJiMzNDtOdW1iZXIgb2Ygbm9kZXMgaW4gdGhlIGludGVydmFsIHRyZWVcJiMzNDspO1xuICAxODpcdF9fcGFyYW0oaW50LCBwZXJmX2xvb3BzLCAxMDAwLCBcJiMzNDtOdW1iZXIgb2YgaXRlcmF0aW9ucyBtb2RpZnlpbmcgdGhlIHRyZWVcJiMzNDspO1xuICAxOTpcdFxuICAyMDpcdF9fcGFyYW0oaW50LCBuc2VhcmNoZXMsIDEwMCwgXCYjMzQ7TnVtYmVyIG9mIHNlYXJjaGVzIHRvIHRoZSBpbnRlcnZhbCB0cmVlXCYjMzQ7KTtcbiAgMjE6XHRfX3BhcmFtKGludCwgc2VhcmNoX2xvb3BzLCAxMDAwLCBcJiMzNDtOdW1iZXIgb2YgaXRlcmF0aW9ucyBzZWFyY2hpbmcgdGhlIHRyZWVcJiMzNDspO1xuICAyMjpcdF9fcGFyYW0oYm9vbCwgc2VhcmNoX2FsbCwgZmFsc2UsIFwmIzM0O1NlYXJjaGVzIHdpbGwgaXRlcmF0ZSBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcJiMzNDspO1xuICAyMzpcdFxuICAyNDpcdF9fcGFyYW0odWludCwgbWF4X2VuZHBvaW50LCB+MCwgXCYjMzQ7TGFyZ2VzdCB2YWx1ZSBmb3IgdGhlIGludGVydmFsJiMzOTtzIGVuZHBvaW50XCYjMzQ7KTtcbiAgMjU6XHRfX3BhcmFtKHVsbG9uZywgc2VlZCwgMzE0MTU5MjY1MzU4OTc5MzIzOFVMTCwgXCYjMzQ7UmFuZG9tIHNlZWRcJiMzNDspO1xuICAyNjpcdFxuICAyNzpcdHN0YXRpYyBzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcm9vdCA9IFJCX1JPT1RfQ0FDSEVEO1xuICAyODpcdHN0YXRpYyBzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpub2RlcyA9IE5VTEw7XG4gIDI5Olx0c3RhdGljIHUzMiAqcXVlcmllcyA9IE5VTEw7XG4gIDMwOlx0XG4gIDMxOlx0c3RhdGljIHN0cnVjdCBybmRfc3RhdGUgcm5kO1xuICAzMjpcdFxuICAzMzpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuICAzNDpcdHNlYXJjaChzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgKnJvb3QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGFzdClcbiAgMzU6XHR7XG4gIDM2Olx0XHRzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpub2RlO1xuICAzNzpcdFx0dW5zaWduZWQgbG9uZyByZXN1bHRzID0gMDtcbiAgMzg6XHRcbiAgMzk6XHRcdGZvciAobm9kZSA9IGludGVydmFsX3RyZWVfaXRlcl9maXJzdChyb290LCBzdGFydCwgbGFzdCk7IG5vZGU7XG4gIDQwOlx0XHQgICAgIG5vZGUgPSBpbnRlcnZhbF90cmVlX2l0ZXJfbmV4dChub2RlLCBzdGFydCwgbGFzdCkpXG4gIDQxOlx0XHRcdHJlc3VsdHMmIzQzOyYjNDM7O1xuICA0MjpcdFx0cmV0dXJuIHJlc3VsdHM7XG4gIDQzOlx0fVxuICA0NDpcdFxuICA0NTpcdHN0YXRpYyB2b2lkIGluaXQodm9pZClcbiAgNDY6XHR7XG4gIDQ3Olx0XHRpbnQgaTtcbiAgNDg6XHRcbiAgNDk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5ub2RlczsgaSYjNDM7JiM0MzspIHtcbiAgNTA6XHRcdFx0dTMyIGIgPSAocHJhbmRvbV91MzJfc3RhdGUoXHUwMDI2cm5kKSBcdTAwM2VcdTAwM2UgNCkgJSBtYXhfZW5kcG9pbnQ7XG4gIDUxOlx0XHRcdHUzMiBhID0gKHByYW5kb21fdTMyX3N0YXRlKFx1MDAyNnJuZCkgXHUwMDNlXHUwMDNlIDQpICUgYjtcbiAgNTI6XHRcbiAgNTM6XHRcdFx0bm9kZXNbaV0uc3RhcnQgPSBhO1xuICA1NDpcdFx0XHRub2Rlc1tpXS5sYXN0ID0gYjtcbiAgNTU6XHRcdH1cbiAgNTY6XHRcbiAgNTc6XHRcdC8qXG4gIDU4Olx0XHQgKiBMaW1pdCB0aGUgc2VhcmNoIHNjb3BlIHRvIHdoYXQgdGhlIHVzZXIgZGVmaW5lZC5cbiAgNTk6XHRcdCAqIE90aGVyd2lzZSB3ZSBhcmUgbWVyZWx5IG1lYXN1cmluZyBlbXB0eSB3YWxrcyxcbiAgNjA6XHRcdCAqIHdoaWNoIGlzIHBvaW50bGVzcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIgb2YgYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIHJlc3Qgb2YgYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AuIEkmIzM5O3ZlIGFscmVhZHkgZXhhbWluZWQgc29tZSBvZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBhbmQgSSYjMzk7bSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHRlc3Qgc3VpdGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBlZGdlIGNhc2VzLCBib3VuZGFyeSBjb25kaXRpb25zLCBhbmQgcG90ZW50aWFsIGVycm9yIHNjZW5hcmlvcy4gQXJlIHRoZXkgdGhvcm91Z2hseSB0ZXN0aW5nIHRoZSBpbnNlcnRpb24sIGRlbGV0aW9uLCBzZWFyY2hpbmcsIGFuZCBvdmVybGFwcGluZyBpbnRlcnZhbCBmdW5jdGlvbmFsaXRpZXM/IEkgd2FudCB0byBzZWUgaWYgdGhlIHRlc3RzIGNvdmVyIGEgd2lkZSByYW5nZSBvZiBpbnRlcnZhbCBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nIGVtcHR5IGludGVydmFscywgc2luZ2xlLXBvaW50IGludGVydmFscywgYW5kIGhlYXZpbHkgb3ZlcmxhcHBpbmcgaW50ZXJ2YWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcm9idXN0bHkgdGhlIHRlc3RzIHZhbGlkYXRlIHRoZSB0cmVlJiMzOTtzIGludGVybmFsIGNvbnNpc3RlbmN5IGFmdGVyIGVhY2ggb3BlcmF0aW9uLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0ZWNobmlxdWVzIHRoZXkmIzM5O3JlIHVzaW5nIHRvIHNpbXBsaWZ5IHRoZSB0ZXN0IGNvZGUsIHBlcmhhcHMgdGhyb3VnaCBtYWNybyB1c2FnZSBvciBoZWxwZXIgZnVuY3Rpb25zPyBVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBhc3Nlc3MgdGhlIGNvbXBsZXRlbmVzcyBhbmQgcXVhbGl0eSBvZiB0aGVzZSB0ZXN0cy4gVGhpcyBleGFtaW5hdGlvbiB3aWxsIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZGVuY2UgbGV2ZWwgdGhpcyBwcm9qZWN0IGhhcyBpbiBpdHMgaW50ZXJ2YWwgdHJlZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBrZWVuIHRvIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZW5lc3Mgb2YgdGhpcyB0ZXN0aW5nIGFwcHJvYWNoLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IG9yLCBjb252ZXJzZWx5LCBzb2xpZCBkZXNpZ24gY2hvaWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFxuIDMwMTpcdFx0XHQvKiBDbGVhbnVwIG1hcGxlIHRyZWUgZm9yIGVhY2ggcm91bmQgKi9cbiAzMDI6XHRcdFx0bXRyZWVfZGVzdHJveShcdTAwMjZ0cmVlKTtcbiAzMDM6XHRcdFx0LyogQ2xlYW51cCBpbnRlcnZhbCB0cmVlIGZvciBlYWNoIHJvdW5kICovXG4gMzA0Olx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5ub2RlczsgaiYjNDM7JiM0MzspXG4gMzA1Olx0XHRcdFx0aW50ZXJ2YWxfdHJlZV9yZW1vdmUobm9kZXMgJiM0MzsgaiwgXHUwMDI2cm9vdCk7XG4gMzA2Olx0XHR9XG4gMzA3Olx0XHRyZXR1cm4gMDtcbiAzMDg6XHR9XG4gMzA5Olx0I2Vsc2VcbiAzMTA6XHRzdGF0aWMgaW5saW5lIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKSB7cmV0dXJuIDA7IH1cbiAzMTE6XHQjZW5kaWZcbiAzMTI6XHRcbiAzMTM6XHRzdGF0aWMgaW50IGludGVydmFsX3RyZWVfdGVzdF9pbml0KHZvaWQpXG4gMzE0Olx0e1xuIDMxNTpcdFx0aWYgKG5ub2RlcyBcdTAwM2M9IDApIHtcbiAzMTY6XHRcdFx0cHJfd2FybihcJiMzNDtubm9kZXMgbXVzdCBiZSBwb3NpdGl2ZVxcblwmIzM0Oyk7XG4gMzE3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMxODpcdFx0fVxuIDMxOTpcdFx0aWYgKG5zZWFyY2hlcyBcdTAwM2M9IDApIHtcbiAzMjA6XHRcdFx0cHJfd2FybihcJiMzNDtuc2VhcmNoZXMgbXVzdCBiZSBwb3NpdGl2ZVxcblwmIzM0Oyk7XG4gMzIxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMyMjpcdFx0fVxuIDMyMzpcdFx0aWYgKHBlcmZfbG9vcHMgXHUwMDNjPSAwKSB7XG4gMzI0Olx0XHRcdHByX3dhcm4oXCYjMzQ7cGVyZl9sb29wcyBtdXN0IGJlIHBvc2l0aXZlXFxuXCYjMzQ7KTtcbiAzMjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzI2Olx0XHR9XG4gMzI3Olx0XHRpZiAoc2VhcmNoX2xvb3BzIFx1MDAzYz0gMCkge1xuIDMyODpcdFx0XHRwcl93YXJuKFwmIzM0O3NlYXJjaF9sb29wcyBtdXN0IGJlIHBvc2l0aXZlXFxuXCYjMzQ7KTtcbiAzMjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMwOlx0XHR9XG4gMzMxOlx0XHRpZiAobWF4X2VuZHBvaW50IFx1MDAzYyAyKSB7XG4gMzMyOlx0XHRcdHByX3dhcm4oXCYjMzQ7bWF4X2VuZHBvaW50IG11c3QgYmUgYXQgbGVhc3QgMlxcblwmIzM0Oyk7XG4gMzMzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMzNDpcdFx0fVxuIDMzNTpcdFxuIDMzNjpcdFx0bm9kZXMgPSBrbWFsbG9jX29ianMoc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSwgbm5vZGVzKTtcbiAzMzc6XHRcdGlmICghbm9kZXMpXG4gMzM4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMzOTpcdFxuIDM0MDpcdFx0cXVlcmllcyA9IGttYWxsb2NfYXJyYXkobnNlYXJjaGVzLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7XG4gMzQxOlx0XHRpZiAoIXF1ZXJpZXMpIHtcbiAzNDI6XHRcdFx0a2ZyZWUobm9kZXMpO1xuIDM0MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdHByYW5kb21fc2VlZF9zdGF0ZShcdTAwMjZybmQsIHNlZWQpO1xuIDM0NzpcdFxuIDM0ODpcdFx0YmFzaWNfY2hlY2soKTtcbiAzNDk6XHRcdHNlYXJjaF9jaGVjaygpO1xuIDM1MDpcdFx0aW50ZXJzZWN0aW9uX3JhbmdlX2NoZWNrKCk7XG4gMzUxOlx0XHRzcGFuX2l0ZXJhdGlvbl9jaGVjaygpO1xuIDM1MjpcdFxuIDM1MzpcdFx0a2ZyZWUocXVlcmllcyk7XG4gMzU0Olx0XHRrZnJlZShub2Rlcyk7XG4gMzU1Olx0XG4gMzU2Olx0XHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4gMzU3Olx0fVxuIDM1ODpcdFxuIDM1OTpcdHN0YXRpYyB2b2lkIGludGVydmFsX3RyZWVfdGVzdF9leGl0KHZvaWQpXG4gMzYwOlx0e1xuIDM2MTpcdFx0cHJpbnRrKEtFUk5fQUxFUlQgXCYjMzQ7dGVzdCBleGl0XFxuXCYjMzQ7KTtcbiAzNjI6XHR9XG4gMzYzOlx0XG4gMzY0Olx0bW9kdWxlX2luaXQoaW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQpXG4gMzY1Olx0bW9kdWxlX2V4aXQoaW50ZXJ2YWxfdHJlZV90ZXN0X2V4aXQpXG4gMzY2Olx0XG4gMzY3Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAzNjg6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O01pY2hlbCBMZXNwaW5hc3NlXCYjMzQ7KTtcbiAzNjk6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7SW50ZXJ2YWwgVHJlZSB0ZXN0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGludGVydmFsX3RyZWVfdGVzdC5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGBpbnRlcnZhbF90cmVlX3Rlc3QuY2AuIEl0JiMzOTtzIGEgc3RhbmRhbG9uZSB0ZXN0IG1vZHVsZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGZhY3QgdGhhdCBgaW50ZXJ2YWxfdHJlZV90ZXN0X2luaXRgIHJldHVybnMgYC1FQUdBSU5gIGFuZCBpcyBkZXNpZ25lZCB0byB1bmxvYWQgdGhlIG1vZHVsZSBpZiBpdCBmYWlscyBpcyBpbnRlcmVzdGluZy4gQnV0LCBpcyB0aGlzIGV2ZW4gYSBmdXp6aW5nIHRhcmdldD8gSXMgaXQgKm1lYW50KiB0byBiZSBoaXQgYnkgc3l6a2FsbGVyPyBTb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdmVyaWZ5IGlmIGludGVuZGVkLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhpcyBgREVGSU5FX01UUkVFKHRyZWUpYCBtYWNyby4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggY2hhbmdlZCBpdCBmcm9tIGBERUZJTkVfTVRSRUUodHJlZSlgIHRvIGRlY2xhcmluZyBpdCBhcyBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZTtgLiBBaGEhIFRoZSBgREVGSU5FX01UUkVFYCB3YXMgdXNlZCBsb2NhbGx5LCBpbiBgc3Bhbl9pdGVyYXRpb25fY2hlY2soKWAuIFNvIHRoaXMgaXMgYWJvdXQgaG93IHRoZSBgdHJlZWAgdmFyaWFibGUgaXMgZGVmaW5lZC4gVGhlIG1hY3JvIG5vdyBsb29rcyBsaWtlIHRoaXM6CgpgYGBjCiNkZWZpbmUgREVGSU5FX01UUkVFKG5hbWUpCQkJCQkJXAoJc3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7CQlcCglBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSkKYGBgCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2ssIGFuZCAqcmVhbGx5KiB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHBhdGNoLiBJIG5lZWQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8ga25vdyB3aHkgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgd2FzIGFkZGVkLiBMZXQmIzM5O3MgbGlzdCB0aGUgKmVudGlyZSogc2V0IG9mIGZpbGVzIHRoaXMgcGF0Y2ggdG91Y2hlcywgYmVjYXVzZSB0aGF0JiMzOTtzIGFsd2F5cyBjcnVjaWFsOgoKMS4gIGBpbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhgCjIuICBgaW5jbHVkZS9saW51eC9pZHIuaGAKMy4gIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGAKNC4gIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgCjUuICBgdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oYAo2LiAgYHRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jYAo3LiAgYHRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jYAoKT2theSwgdGhpcyB0b3VjaGVzIGNvbXBpbGVyIGhlYWRlcnMsIElEUiwgTWFwbGUgVHJlZSwgdGhlIHRlc3QgZmlsZSwgYW5kIHNvbWUgdG9vbHMuIFRoZSBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBhZGRpdGlvbiBpcyBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoYXQmIzM5O3MgdGhlcmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSwgaGlzdG9yeSwgYW5kIHNpbWlsYXIgb2NjdXJyZW5jZXMgb2YgdGhhdCBtYWNyby4gSWYgSSBjb3VsZCwgSSYjMzk7ZCBydW4gYSBgZ2l0IGxvZyAtbiA1YCBvciBzb21ldGhpbmcgc2ltaWxhci4gQnV0LCBzaW5jZSBJIGNhbiYjMzk7dCBkbyB0aGF0IGRpcmVjdGx5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIHNpbWlsYXIgY29tcGlsZS10aW1lIGNoZWNrcyB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4YCBkaXJlY3RvcnkgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50LiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uLCBob3BlZnVsbHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVGSU5FXy4qU1RBVElDX1NUT1JBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgwOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEltcGxlbWVudGF0aW9uIG9mIGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyBiZWluZyB1dGlsaXplZCBhbmQgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIGp1bXAgc3RyYWlnaHQgaW50byBzZWFyY2hpbmcgdGhlIGdpdCBsb2cgYW5kIGNvbW1lbnRzIGZvciB0aGF0IHNwZWNpZmljIHRlcm0sIGJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHRoYXQgbWlnaHQgYmUgdG9vIGRpcmVjdC4gTGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNlYXJjaCBhIGJpdC4gUGVyaGFwcyBgREVGSU5FX0lEQWAgaXMgcmVsYXRlZCwgZ2l2ZW4gaXRzIG5hbWluZyBjb252ZW50aW9uLiBJdCYjMzk7cyBvZnRlbiBoZWxwZnVsIHRvIGNoZWNrIHdoZXJlIGEgbWFjcm8gaXMgKnVzZWQqIHJhdGhlciB0aGFuIGp1c3Qgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gVGhlcmVmb3JlLCBJIHdpbGwgY2hlY2sgd2hlcmUgYERFRklORV9JREFgIGlzIGJlaW5nIGNhbGxlZCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZDsgdGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWRlciBjb250ZXh0IHRoYXQgSSBtYXkgYmUgbWlzc2luZyBpZiBJIGp1c3Qgc2VhcmNoIGZvciB0aGUgc3BlY2lmaWMgdGVybS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgaG93IGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyB0eXBlb2YuKl9zdG9yYWdlX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNjcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA5MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UgTWFjcm8gYW5kIGl0cyBJbXBhY3QqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpYCBtYWNyby4uLiBJIHNlZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBlbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIGZvciBjZXJ0YWluIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgZGVmaW5lZCB3aXRoIGBERUZJTkVfSURBYCBvciBgREVGSU5FX01UUkVFYC4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCB0aGVzZSBmcm9tIGJlaW5nIGRlY2xhcmVkIGFzIGF1dG9tYXRpYyAoc3RhY2spIHZhcmlhYmxlcywgd2hpY2ggaXMgZ2VuZXJhbGx5IGluY29ycmVjdCB1c2FnZSBmb3IgdGhlc2UgbWFjcm9zIGluIHRoZSBMaW51eCBrZXJuZWwgY29udmVudGlvbnMuCgpUaGUgY29yZSBvZiB0aGUgbWFjcm8gaXMgdGhpczogYHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgbmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSAmYW1wOyhuYW1lKTtgLiBJdCYjMzk7cyBhIGNvbXBpbGUtdGltZSBjaGVjaywgcHVyZWx5LiBJdCBkb2VzICpub3QqIGdlbmVyYXRlIGFueSBydW50aW1lIGluc3RydWN0aW9ucy4gSXQgZGVjbGFyZXMgYSBzdGF0aWMgcG9pbnRlciBuYW1lZCBgbmFtZSMjX3N0b3JhZ2VfY2hlY2tgIGluaXRpYWxpemVkIHRvIHRoZSBhZGRyZXNzIG9mIGBuYW1lYC4gVGhlIGBfX2Fsd2F5c191bnVzZWRgIGF0dHJpYnV0ZSB0ZWxscyB0aGUgY29tcGlsZXIgdG8gbm90IHdhcm4gaWYgdGhpcyBzdGF0aWMgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZCAod2hpY2ggaXQgaXNuJiMzOTt0LCBhcyB0aGUgY2hlY2sgaGFwcGVucyBhdCBjb21waWxlIHRpbWUpLiBJZiBzb21lb25lIHRyaWVzIHRvIHVzZSBgREVGSU5FX0lEQWAgb3IgYERFRklORV9NVFJFRWAgb24gdGhlIHN0YWNrLCB0aGlzIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbCwgdHJpZ2dlcmluZyBhbiAmIzM0O2luaXRpYWxpemVyIGVsZW1lbnQgaXMgbm90IGEgY29uc3RhbnQmIzM0OyBlcnJvci4KCk5vdywgdGhhdCBicmluZ3MgbWUgdG8gdGhlIHJlY2VudCBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AuIFRoZSB0ZXN0IHVzZWQgdG8gaW5pdGlhbGl6ZSBhIGBtYXBsZV90cmVlIHRyZWVgIHdpdGggYE1UUkVFX0lOSVQodHJlZSwgMClgLCB3aGljaCBleHBhbmRlZCB0byBzb21ldGhpbmcgbGlrZSBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZSA9IE1UUkVFX0lOSVQodHJlZSwgMCk7YC4gVGhhdCYjMzk7cyBiZWVuIHJlbW92ZWQgaW4gdGhlIHJlZmFjdG9yLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gSXQgdHVybnMgb3V0IHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtYXBsZV90cmVlYCBpcyAqcmVkdW5kYW50KiwgYmVjYXVzZSBpbnNpZGUgdGhlIGxvb3AgaW4gYHNwYW5faXRlcmF0aW9uX2NoZWNrYCwgZm9yIGV2ZXJ5IHJvdW5kLCBgbXRfaW5pdF9mbGFncygmYW1wO3RyZWUsIE1UX0ZMQUdTX0FMTE9DX1JBTkdFKWAgaXMgY2FsbGVkIGFueXdheSAqYmVmb3JlKiBgdHJlZWAgaXMgYWNjZXNzZWQgZm9yIHRoZSBmaXJzdCB0aW1lLiBUaGUgYG10cmVlX2Rlc3Ryb3lgIGlzIGNhbGxlZCBhZnRlciB0aGUgbG9vcCB0byBjbGVhbiBpdCB1cC4KClNvLCB0aGUgb3JpZ2luYWwgYD0gTVRSRUVfSU5JVCh0cmVlLCAwKWAgd2FzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnksIGFuZCByZW1vdmluZyBpdCBtYWtlcyBubyBkaWZmZXJlbmNlIGF0IHJ1bnRpbWUuIFRoaXMgd2hvbGUgZmlsZSBpcyBhICp0ZXN0IG1vZHVsZSosIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lOVEVSVkFMX1RSRUVfVEVTVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0yMzk4PWNvbmZpZyBSRUVEX1NPTE9NT05fVEVTVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTI0MDktXG5saWIvS2NvbmZpZy5kZWJ1ZzoyNDEwOmNvbmZpZyBJTlRFUlZBTF9UUkVFX1RFU1RcbmxpYi9LY29uZmlnLmRlYnVnLTI0MTEtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlcnZhbCB0cmVlIHRlc3RcJiMzNDtcbi0tXG5saWIvTWFrZWZpbGU9MjkyPW9iai0kKENPTkZJR19SQlRSRUVfVEVTVCkgJiM0Mzs9IHJidHJlZV90ZXN0Lm9cbmxpYi9NYWtlZmlsZToyOTM6b2JqLSQoQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCkgJiM0Mzs9IGludGVydmFsX3RyZWVfdGVzdC5vXG5saWIvTWFrZWZpbGUtMjk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY0MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcyBkZWJ1Z2dpbmcgaXNzdWUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI0MTAuIFRoYXQgbG9jYXRpb24gdHlwaWNhbGx5IGhvdXNlcyBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgdmFyaW91cyBkZWJ1Zy1yZWxhdGVkIGZlYXR1cmVzIHdpdGhpbiB0aGUga2VybmVsLCBzbyBpdCYjMzk7cyBhIHByaW1lIHN1c3BlY3QgZm9yIGZpbmRpbmcgdGhlIHJlbGV2YW50IG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGJlaGF2aW9yLiBJdCYjMzk7cyBhIHN5c3RlbWF0aWMgYXBwcm9hY2g6IHN0YXJ0IHdpdGggdGhlIGxpa2VseSBjYW5kaWRhdGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCB0aGUgYXJlYSB0aGF0IEkgYW50aWNpcGF0ZSB3b3VsZCBiZSBtb3N0IHJlbGV2YW50LiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHNldCB1cCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQwNTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzZWxmLXRlc3QgZnVuY3Rpb24gb2YgcnNsaWIgYXQgYm9vdCxcbjI0MDY6XHRcdCAgb3IgYXQgbW9kdWxlIGxvYWQgdGltZS5cbjI0MDc6XHRcbjI0MDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjI0MDk6XHRcbjI0MTA6XHRjb25maWcgSU5URVJWQUxfVFJFRV9URVNUXG4yNDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtJbnRlcnZhbCB0cmVlIHRlc3RcJiMzNDtcbjI0MTI6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG4yNDEzOlx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuMjQxNDpcdFx0aGVscFxuMjQxNTpcdFx0ICBBIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnRlcnZhbCB0cmVlIGxpYnJhcnlcbjI0MTY6XHRcbjI0MTc6XHRjb25maWcgUEVSQ1BVX1RFU1RcbjI0MTg6XHRcdHRyaXN0YXRlIFwmIzM0O1BlciBjcHUgb3BlcmF0aW9ucyB0ZXN0XCYjMzQ7XG4yNDE5Olx0XHRkZXBlbmRzIG9uIG0gXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTFxuMjQyMDpcdFx0aGVscFxuMjQyMTpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gYnVpbGQgdGVzdCBtb2R1bGUgd2hpY2ggdmFsaWRhdGVzIHBlci1jcHVcbjI0MjI6XHRcdCAgb3BlcmF0aW9ucy5cbjI0MjM6XHRcbjI0MjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjI0MjU6XHRcbjI0MjY6XHRjb25maWcgQVRPTUlDNjRfU0VMRlRFU1RcbjI0Mjc6XHRcdHRyaXN0YXRlIFwmIzM0O1BlcmZvcm0gYW4gYXRvbWljNjRfdCBzZWxmLXRlc3RcJiMzNDtcbjI0Mjg6XHRcdGhlbHBcbjI0Mjk6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgdGhlIGF0b21pYzY0X3QgZnVuY3Rpb25zIGF0IGJvb3Qgb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNjkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyNjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBJbnRlcnZhbCBUcmVlIFRlc3QgYW5kIFdvcnRoRnV6emluZyBEZXRlcm1pbmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0JiMzOTtzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuIEZpcnN0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgYElOVEVSVkFMX1RSRUVfVEVTVGAuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiZW5jaG1hcmssIGJ1aWx0IGVpdGhlciBhcyBhIG1vZHVsZSBvciBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBgV29ydGhGdXp6aW5nYCBiZWNhdXNlIHRoaXMgdGVzdCBpcyBpbiBgbGliL2AuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc2F5cyB0aGUgZm9sbG93aW5nOiBgVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5gCgpTbywgaXMgaXQ/CgpPa2F5LCBzbyBsZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGU6IGBtb2R1bGVfaW5pdChpbnRlcnZhbF90cmVlX3Rlc3RfaW5pdClgIHNheXMgdGhhdCBpdCYjMzk7cyBhIG1vZHVsZS4gQnV0IGV2ZW4gYmV0dGVyIHRoYW4gdGhhdCwgaXQgaXMgaW4gYGxpYi9gIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIG5vdCB1c2VyLXNwYWNlLgoKQWgsIHRoZSB0ZXN0IGltbWVkaWF0ZWx5IHVubG9hZHMgaXRzZWxmIHdpdGggYC1FQUdBSU5gLiBObyBzeXNjYWxscywgbm90aGluZyBleHBvc2VkLiBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYERFRklORV9NVFJFRSh0cmVlKWAgd2l0aCBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZTtgLiBOb3csIHRoaXMgY2hhbmdlIHdhcyBkb25lIHRvIG1ha2UgdGhpcyB0ZXN0IGNvbXBpbGUgd2hlbiBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCB3YXMgYWRkZWQgdG8gYERFRklORV9NVFJFRWAuCgpPa2F5LCBzbyBsb29raW5nIHRocm91Z2ggdGhlIGNoYW5nZSwgYE1BX1NUQVRFKG1hcywgJmFtcDt0cmVlLCAwLCAwKWAgc2V0cyB0aGUgbWFwbGUgdHJlZSBzdGF0ZSB0byBwb2ludCB0byB0aGUgYWRkcmVzcyBvZiBgdHJlZWAsIGJ1dCBkb2VzbiYjMzk7dCBkZXJlZmVyZW5jZSBpdC4gU28sIHRoZXJlIGlzIG5vIGlzc3VlIG9mIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgdW5pbml0aWFsaXplZC4KClRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IGlzOiBXYXMgdGhlIGNoYW5nZSBtYWRlIG9uIGV4ZWN1dGFibGUgY29kZT8KCkkgbmVlZCB0byByZWZlciB0byBzZWN0aW9uIDMgbm93LiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBydW50aW1lIGFzc2VydGlvbnMsIHN1Y2ggYXMgYFdBUk5fT04qYCBvciBgQlVHX09OKmAsIHdhcnJhbnQgZnV6emluZy4gQnV0IHRoZSBrZXkgdGhpbmcgaXMgdGhhdCBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyBOT1QgYSBydW50aW1lIGFzc2VydGlvbi4gSXQmIzM5O3MgYSAqY29tcGlsZS10aW1lKiBhc3NlcnRpb24uIEl0IHByb2R1Y2VzIG5vIGFjdHVhbCBleGVjdXRhYmxlIGNvZGUuIEl0JiMzOTtzIGEgY29tcGlsZS10aW1lIGNoZWNrIHRoYXQgZW5zdXJlcyB0aGUgdmFyaWFibGUgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiBUaGUgY2hhbmdlIGFmZmVjdHMgaW5jbHVkZSBmaWxlcyAoYGNvbXBpbGVyLmhgLCBgaWRyLmhgLCBhbmQgYG1hcGxlX3RyZWUuaGApLCBhbmQgdXNlci1zcGFjZSB0ZXN0cywgYnV0IHdoYXQgYWJvdXQgdGhlIGtlcm5lbD8KCkxvb2tpbmcgYmFjayBhdCB0aGUgc2VjdGlvbnMsIEkgbmVlZCB0byBzZWUgaWYgdGhlIGNoYW5nZXMgYXJlICpyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlKi4gSXMgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbW9kaWZ5aW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGU/IEkgbmVlZCB0byBjaGVjazogd2hhdCBjb2RlIGlzIGdlbmVyYXRlZD8gU2luY2UgdGhpcyBpcyBhIGNoZWNrIGF0IGNvbXBpbGUgdGltZSB1c2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgaXQgd2lsbCBub3QgcHJvZHVjZSBhbnkgZXhlY3V0YWJsZSBjb2RlLiBTbyBpdCYjMzk7cyBub3QgYSBjaGFuZ2UgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQuCgpBbmQgdGhlbiBJIGxvb2sgYXQgdGhlIHdvcmRpbmcgZnJvbSB0aGUgcHJvbXB0LiBJdCBzYXlzOiAmIzM0O05vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6IFsuLi5dIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OyBTbywgYmVjYXVzZSB0aGUgY2hhbmdlIGlzIG5vdCBpbiBleGVjdXRhYmxlIGNvZGUgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMsIGl0IGlzIHNhZmUgdG8gYXNzdW1lIHRoaXMgaXMgbm90IHNvbWV0aGluZyBJIG5lZWQgdG8gZXZhbHVhdGUuIEZpbmFsbHksIGl0IG1ha2VzIHN1cmUgdG8gYXNrIGFib3V0IGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgOiBEb2VzIHN5emthbGxlciBmdXp6IGBDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUYD8gR2l2ZW4gd2hhdCBJIGhhdmUgZGVzY3JpYmVkIEkgd291bGQgYXNzdW1lIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVGSU5FX0lEQVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEzMSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jPTgzPXN0YXRpYyBlbnVtIGNwdWhwX3N0YXRlIGNwdWhwX21tZGNfc3RhdGU7XG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6ODQ6c3RhdGljIERFRklORV9JREEobW1kY19pZGEpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTg1LVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIzODg9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI1ODEtXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoyNTgyOnN0YXRpYyBERUZJTkVfSURBKGxwaWRfaW51c2UpO1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjU4My1zdGF0aWMgdW5zaWduZWQgbG9uZyBucl9scGlkcztcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0yNi1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjI3OnN0YXRpYyBERUZJTkVfSURBKG1tdV9jb250ZXh0X2lkYSk7XG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0yOC1cbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9NTg9c3RhdGljIHUzMiB0ZHhfbnJfZ3Vlc3Rfa2V5aWRzIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01OS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo2MDpzdGF0aWMgREVGSU5FX0lEQSh0ZHhfZ3Vlc3Rfa2V5aWRfcG9vbCk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNjEtXG4tLVxuYmxvY2svYmxrLWNvcmUuYz02Mj1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGJsb2NrX3JxX2luc2VydCk7XG5ibG9jay9ibGstY29yZS5jLTYzLVxuYmxvY2svYmxrLWNvcmUuYzo2NDpzdGF0aWMgREVGSU5FX0lEQShibGtfcXVldWVfaWRhKTtcbmJsb2NrL2Jsay1jb3JlLmMtNjUtXG4tLVxuYmxvY2svYnNnLmM9MzU9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnNnX2RldmljZSAqdG9fYnNnX2RldmljZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmJsb2NrL2JzZy5jLTQyLVxuYmxvY2svYnNnLmM6NDM6c3RhdGljIERFRklORV9JREEoYnNnX21pbm9yX2lkYSk7XG5ibG9jay9ic2cuYy00NC1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGJzZ19jbGFzcztcbi0tXG5ibG9jay9nZW5oZC5jPTUzPXN0YXRpYyBhdG9taWM2NF90IGRpc2tzZXE7XG4tLVxuYmxvY2svZ2VuaGQuYy01Ni0jZGVmaW5lIE5SX0VYVF9ERVZUXHRcdCgxIFx1MDAzY1x1MDAzYyBNSU5PUkJJVFMpXG5ibG9jay9nZW5oZC5jOjU3OnN0YXRpYyBERUZJTkVfSURBKGV4dF9kZXZ0X2lkYSk7XG5ibG9jay9nZW5oZC5jLTU4LVxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jPTgzPXN0YXRpYyBib29sIGxpbmtfdXA7XG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYzo4NDpzdGF0aWMgREVGSU5FX0lEQShxYWljX3VzcnMpO1xuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtODUtXG4tLVxuZHJpdmVycy9hY3BpL3Bmcl90ZWxlbWV0cnkuYz02OD1zdGF0aWMgY29uc3QgZ3VpZF90IHBmcnRfbG9nX2d1aWQgPVxuLS1cbmRyaXZlcnMvYWNwaS9wZnJfdGVsZW1ldHJ5LmMtNzEtXG5kcml2ZXJzL2FjcGkvcGZyX3RlbGVtZXRyeS5jOjcyOnN0YXRpYyBERUZJTkVfSURBKHBmcnRfbG9nX2lkYSk7XG5kcml2ZXJzL2FjcGkvcGZyX3RlbGVtZXRyeS5jLTczLVxuLS1cbmRyaXZlcnMvYWNwaS9wZnJfdXBkYXRlLmM9ODE9c3RydWN0IHBmcnVfZGV2aWNlIHtcbi0tXG5kcml2ZXJzL2FjcGkvcGZyX3VwZGF0ZS5jLTg2LVxuZHJpdmVycy9hY3BpL3Bmcl91cGRhdGUuYzo4NzpzdGF0aWMgREVGSU5FX0lEQShwZnJ1X2lkYSk7XG5kcml2ZXJzL2FjcGkvcGZyX3VwZGF0ZS5jLTg4LVxuLS1cbmRyaXZlcnMvYWNwaS9wbGF0Zm9ybV9wcm9maWxlLmM9NDM9c3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKHByb2ZpbGVfbmFtZXMpID09IFBMQVRGT1JNX1BST0ZJTEVfTEFTVCk7XG5kcml2ZXJzL2FjcGkvcGxhdGZvcm1fcHJvZmlsZS5jLTQ0LVxuZHJpdmVycy9hY3BpL3BsYXRmb3JtX3Byb2ZpbGUuYzo0NTpzdGF0aWMgREVGSU5FX0lEQShwbGF0Zm9ybV9wcm9maWxlX2lkYSk7XG5kcml2ZXJzL2FjcGkvcGxhdGZvcm1fcHJvZmlsZS5jLTQ2LVxuLS1cbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJmcy5jPTU4PXN0YXRpYyBERUZJTkVfTVVURVgoYmluZGVyZnNfbWlub3JzX211dGV4KTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJmcy5jOjU5OnN0YXRpYyBERUZJTkVfSURBKGJpbmRlcmZzX21pbm9ycyk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyZnMuYy02MC1cbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyZnMuYz00NT1zdGF0aWMgREVGSU5FX01VVEVYKGJpbmRlcmZzX21pbm9yc19tdXRleCk7XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyZnMuYzo0NjpzdGF0aWMgREVGSU5FX0lEQShiaW5kZXJmc19taW5vcnMpO1xuZHJpdmVycy9hbmRyb2lkL2JpbmRlcmZzLmMtNDctXG4tLVxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYz04MD1zdGF0aWMgdTY0IGF0YV9kZXZfZ2V0X3F1aXJrX3ZhbHVlKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHU2NCBxdWlyayk7XG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jLTgxLVxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYzo4MjpzdGF0aWMgREVGSU5FX0lEQShhdGFfaWRhKTtcbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMtODMtXG4tLVxuZHJpdmVycy9hdGEvcGF0YV9wYXJwb3J0L3BhdGFfcGFycG9ydC5jPTE0PXN0YXRpYyBERUZJTkVfSURSKHByb3RvY29scyk7XG5kcml2ZXJzL2F0YS9wYXRhX3BhcnBvcnQvcGF0YV9wYXJwb3J0LmM6MTU6c3RhdGljIERFRklORV9JREEocGF0YV9wYXJwb3J0X2J1c19kZXZfaWRzKTtcbmRyaXZlcnMvYXRhL3BhdGFfcGFycG9ydC9wYXRhX3BhcnBvcnQuYy0xNi1zdGF0aWMgREVGSU5FX01VVEVYKHBpX211dGV4KTtcbi0tXG5kcml2ZXJzL2F1eGRpc3BsYXkvbGluZS1kaXNwbGF5LmM9MzYyPV9fQVRUUklCVVRFX0dST1VQUyhsaW5lZGlzcCk7XG5kcml2ZXJzL2F1eGRpc3BsYXkvbGluZS1kaXNwbGF5LmMtMzYzLVxuZHJpdmVycy9hdXhkaXNwbGF5L2xpbmUtZGlzcGxheS5jOjM2NDpzdGF0aWMgREVGSU5FX0lEQShsaW5lZGlzcF9pZCk7XG5kcml2ZXJzL2F1eGRpc3BsYXkvbGluZS1kaXNwbGF5LmMtMzY1LVxuLS1cbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jLTM5LS8qIEZvciBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2UgSURzICovXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYzo0MDpzdGF0aWMgREVGSU5FX0lEQShwbGF0Zm9ybV9kZXZpZF9pZGEpO1xuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMtNDEtXG4tLVxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jPTY5PXN0YXRpYyBzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSBkZWxldGVkX3dzID0ge1xuLS1cbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy03My1cbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYzo3NDpzdGF0aWMgREVGSU5FX0lEQSh3YWtldXBfaWRhKTtcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy03NS1cbi0tXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1kZWJ1Z2ZzLmM9MTk9c3RydWN0IHJlZ21hcF9kZWJ1Z2ZzX25vZGUge1xuLS1cbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWRlYnVnZnMuYy0yMy1cbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWRlYnVnZnMuYzoyNDpzdGF0aWMgREVGSU5FX0lEQShkdW1teV9pZGEpO1xuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtZGVidWdmcy5jLTI1LXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpyZWdtYXBfZGVidWdmc19yb290O1xuLS1cbmRyaXZlcnMvYmFzZS9zb2MuYy0xOC1cbmRyaXZlcnMvYmFzZS9zb2MuYzoxOTpzdGF0aWMgREVGSU5FX0lEQShzb2NfaWRhKTtcbmRyaXZlcnMvYmFzZS9zb2MuYy0yMC1cbi0tXG5kcml2ZXJzL2Jhc2Uvc3dub2RlLmM9Mjc9c3RydWN0IHN3bm9kZSB7XG4tLVxuZHJpdmVycy9iYXNlL3N3bm9kZS5jLTQyLVxuZHJpdmVycy9iYXNlL3N3bm9kZS5jOjQzOnN0YXRpYyBERUZJTkVfSURBKHN3bm9kZV9yb290X2lkcyk7XG5kcml2ZXJzL2Jhc2Uvc3dub2RlLmMtNDQtc3RhdGljIHN0cnVjdCBrc2V0ICpzd25vZGVfa3NldDtcbi0tXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM9MTA0PXN0YXRpYyB1MzIgY3B1X3VzZVtOUl9DUFVTXTtcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0xMDUtXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM6MTA2OnN0YXRpYyBERUZJTkVfSURBKHJzc2RfaW5kZXhfaWRhKTtcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0xMDctXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NzA9c3RhdGljIGludCBudWxsX21ham9yO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NzE6c3RhdGljIERFRklORV9JREEobnVsbGJfaW5kZXhlcyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03Mi1zdGF0aWMgc3RydWN0IGJsa19tcV90YWdfc2V0IHRhZ19zZXQ7XG4tLVxuZHJpdmVycy9ibG9jay9yYmQuYz00Nzg9c3RhdGljIGludCByYmRfbWFqb3I7XG5kcml2ZXJzL2Jsb2NrL3JiZC5jOjQ3OTpzdGF0aWMgREVGSU5FX0lEQShyYmRfZGV2X2lkX2lkYSk7XG5kcml2ZXJzL2Jsb2NrL3JiZC5jLTQ4MC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYz0yND1zdGF0aWMgaW50IHJuYmRfY2xpZW50X21ham9yO1xuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtY2x0LmM6MjU6c3RhdGljIERFRklORV9JREEoaW5kZXhfaWRhKTtcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jLTI2LXN0YXRpYyBERUZJTkVfTVVURVgoc2Vzc19sb2NrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz00ND1zdGF0aWMgaW50IG1ham9yO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6NDU6c3RhdGljIERFRklORV9JREEodmRfaW5kZXhfaWRhKTtcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTQ2LVxuLS1cbmRyaXZlcnMvYnVzL21oaS9lcC9tYWluLmMtMjEtXG5kcml2ZXJzL2J1cy9taGkvZXAvbWFpbi5jOjIyOnN0YXRpYyBERUZJTkVfSURBKG1oaV9lcF9jbnRybF9pZGEpO1xuZHJpdmVycy9idXMvbWhpL2VwL21haW4uYy0yMy1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMjQtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MjU6c3RhdGljIERFRklORV9JREEobWhpX2NvbnRyb2xsZXJfaWRhKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0yNi1cbi0tXG5kcml2ZXJzL2NkeC9jZHguYy03OC0vKiBJREEgZm9yIENEWCBjb250cm9sbGVycyByZWdpc3RlcmVkIHdpdGggdGhlIENEWCBidXMgKi9cbmRyaXZlcnMvY2R4L2NkeC5jOjc5OnN0YXRpYyBERUZJTkVfSURBKGNkeF9jb250cm9sbGVyX2lkYSk7XG5kcml2ZXJzL2NkeC9jZHguYy04MC0vKiBMb2NrIHRvIHByb3RlY3QgY29udHJvbGxlciBvcHMgKi9cbi0tXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYy0xOC1cbmRyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jOjE5OnN0YXRpYyBERUZJTkVfSURBKHJuZ19pbmRleF9pZGEpO1xuZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aXJ0aW8tcm5nLmMtMjAtXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmM9MzA2Nj1zdGF0aWMgc3RydWN0IGJtY19kZXZpY2UgKmlwbWlfZmluZF9ibWNfcHJvZF9kZXZfaWQoXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtMzA4NC1cbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jOjMwODU6c3RhdGljIERFRklORV9JREEoaXBtaV9ibWNfaWRhKTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jLTMwODYtXG4tLVxuZHJpdmVycy9jaGFyL21pc2MuYz01OD1zdGF0aWMgREVGSU5FX01VVEVYKG1pc2NfbXR4KTtcbi0tXG5kcml2ZXJzL2NoYXIvbWlzYy5jLTYyLSAqL1xuZHJpdmVycy9jaGFyL21pc2MuYzo2MzpzdGF0aWMgREVGSU5FX0lEQShtaXNjX21pbm9yc19pZGEpO1xuZHJpdmVycy9jaGFyL21pc2MuYy02NC1cbi0tXG5kcml2ZXJzL2NoYXIvcHBkZXYuYz04Nz1zdGF0aWMgc3RydWN0IGRldmljZSAqZGV2aWNlc1tQQVJQT1JUX01BWF07XG5kcml2ZXJzL2NoYXIvcHBkZXYuYy04OC1cbmRyaXZlcnMvY2hhci9wcGRldi5jOjg5OnN0YXRpYyBERUZJTkVfSURBKGlkYV9pbmRleCk7XG5kcml2ZXJzL2NoYXIvcHBkZXYuYy05MC1cbi0tXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz02ND1zdHJ1Y3QgY29uc29sZSB7XG4tLVxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtODMtXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYzo4NDpzdGF0aWMgREVGSU5FX0lEQSh2dGVybW5vX2lkYSk7XG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy04NS1cbi0tXG5kcml2ZXJzL2Nsay9zcGFjZW1pdC9jY3VfY29tbW9uLmMtMTItXG5kcml2ZXJzL2Nsay9zcGFjZW1pdC9jY3VfY29tbW9uLmM6MTM6c3RhdGljIERFRklORV9JREEoYXV4aWxpYXJ5X2lkcyk7XG5kcml2ZXJzL2Nsay9zcGFjZW1pdC9jY3VfY29tbW9uLmMtMTQtc3RhdGljIGludCBzcGFjZW1pdF9jY3VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY291bnRlci9jb3VudGVyLWNvcmUuYy0yNy0vKiBQcm92aWRlcyBhIHVuaXF1ZSBJRCBmb3IgZWFjaCBjb3VudGVyIGRldmljZSAqL1xuZHJpdmVycy9jb3VudGVyL2NvdW50ZXItY29yZS5jOjI4OnN0YXRpYyBERUZJTkVfSURBKGNvdW50ZXJfaWRhKTtcbmRyaXZlcnMvY291bnRlci9jb3VudGVyLWNvcmUuYy0yOS1cbi0tXG5kcml2ZXJzL2N4bC9jb3JlL21lbWRldi5jPTIyPXN0YXRpYyBpbnQgY3hsX21lbV9tYWpvcjtcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6MjM6c3RhdGljIERFRklORV9JREEoY3hsX21lbWRldl9pZGEpO1xuZHJpdmVycy9jeGwvY29yZS9tZW1kZXYuYy0yNC1cbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BtZW0uYy0yMy1cbmRyaXZlcnMvY3hsL2NvcmUvcG1lbS5jOjI0OnN0YXRpYyBERUZJTkVfSURBKGN4bF9udmRpbW1fYnJpZGdlX2lkYSk7XG5kcml2ZXJzL2N4bC9jb3JlL3BtZW0uYy0yNS1cbi0tXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0zMy1cbmRyaXZlcnMvY3hsL2NvcmUvcG9ydC5jOjM0OnN0YXRpYyBERUZJTkVfSURBKGN4bF9wb3J0X2lkYSk7XG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0zNS1zdGF0aWMgREVGSU5FX1hBUlJBWShjeGxfcm9vdF9idXNlcyk7XG4tLVxuZHJpdmVycy9kYXgvc3VwZXIuYz00MT1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpkYXhfbW50O1xuZHJpdmVycy9kYXgvc3VwZXIuYzo0MjpzdGF0aWMgREVGSU5FX0lEQShkYXhfbWlub3JfaWRhKTtcbmRyaXZlcnMvZGF4L3N1cGVyLmMtNDMtc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkYXhfY2FjaGUgX19yZWFkX21vc3RseTtcbi0tXG5kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYz02MD1zdGF0aWMgREVGSU5FX01VVEVYKGRtYV9saXN0X211dGV4KTtcbmRyaXZlcnMvZG1hL2RtYWVuZ2luZS5jOjYxOnN0YXRpYyBERUZJTkVfSURBKGRtYV9pZGEpO1xuZHJpdmVycy9kbWEvZG1hZW5naW5lLmMtNjItc3RhdGljIExJU1RfSEVBRChkbWFfZGV2aWNlX2xpc3QpO1xuLS1cbmRyaXZlcnMvZG1hL2lkeGQvY2Rldi5jPTIwPXN0cnVjdCBpZHhkX2NkZXZfY29udGV4dCB7XG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9jZGV2LmMtMjktICovXG5kcml2ZXJzL2RtYS9pZHhkL2NkZXYuYzozMDpzdGF0aWMgREVGSU5FX0lEQShmaWxlX2lkYSk7XG5kcml2ZXJzL2RtYS9pZHhkL2NkZXYuYy0zMS1cbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYz00MD1ib29sIHN1cHBvcnRfZW5xY21kO1xuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM6NDE6REVGSU5FX0lEQShpZHhkX2lkYSk7XG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy00Mi1cbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9Mjg9c3RhdGljIFJBV19OT1RJRklFUl9IRUFEKGRwbGxfbm90aWZpZXJfY2hhaW4pO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI5OnN0YXRpYyBERUZJTkVfSURBKGRwbGxfcGluX2lkeF9pZGEpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMwLVxuLS1cbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi5jPTI0MD1zdGF0aWMgc3RydWN0IGNsYXNzICpleHRjb25fY2xhc3M7XG5kcml2ZXJzL2V4dGNvbi9leHRjb24uYy0yNDEtXG5kcml2ZXJzL2V4dGNvbi9leHRjb24uYzoyNDI6c3RhdGljIERFRklORV9JREEoZXh0Y29uX2Rldl9pZHMpO1xuZHJpdmVycy9leHRjb24vZXh0Y29uLmMtMjQzLXN0YXRpYyBMSVNUX0hFQUQoZXh0Y29uX2Rldl9saXN0KTtcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvYnVzLmMtMTktXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvYnVzLmM6MjA6c3RhdGljIERFRklORV9JREEoZmZhX2J1c19pZCk7XG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvYnVzLmMtMjEtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9idXMuYz0yMj1FWFBPUlRfU1lNQk9MX0dQTChzY21pX3JlcXVlc3RlZF9kZXZpY2VzX25oKTtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvYnVzLmMtMjMtXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2J1cy5jOjI0OnN0YXRpYyBERUZJTkVfSURBKHNjbWlfYnVzX2lkKTtcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvYnVzLmMtMjUtXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9kcml2ZXIuYy01MS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvZHJpdmVyLmM6NTI6c3RhdGljIERFRklORV9JREEoc2NtaV9pZCk7XG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2RyaXZlci5jLTUzLVxuLS1cbmRyaXZlcnMvZnBnYS9kZmwuYz0yMzU9RVhQT1JUX1NZTUJPTF9HUEwoZGZsX2ZwZ2FfY2hlY2tfcG9ydF9pZCk7XG5kcml2ZXJzL2ZwZ2EvZGZsLmMtMjM2LVxuZHJpdmVycy9mcGdhL2RmbC5jOjIzNzpzdGF0aWMgREVGSU5FX0lEQShkZmxfZGV2aWNlX2lkYSk7XG5kcml2ZXJzL2ZwZ2EvZGZsLmMtMjM4LVxuLS1cbmRyaXZlcnMvZnBnYS9mcGdhLWJyaWRnZS5jLTE1LVxuZHJpdmVycy9mcGdhL2ZwZ2EtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZnBnYV9icmlkZ2VfaWRhKTtcbmRyaXZlcnMvZnBnYS9mcGdhLWJyaWRnZS5jLTE3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgZnBnYV9icmlkZ2VfY2xhc3M7XG4tLVxuZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMtMjAtXG5kcml2ZXJzL2ZwZ2EvZnBnYS1tZ3IuYzoyMTpzdGF0aWMgREVGSU5FX0lEQShmcGdhX21ncl9pZGEpO1xuZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMtMjItc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBmcGdhX21ncl9jbGFzcztcbi0tXG5kcml2ZXJzL2ZwZ2EvZnBnYS1yZWdpb24uYy0xNy1cbmRyaXZlcnMvZnBnYS9mcGdhLXJlZ2lvbi5jOjE4OnN0YXRpYyBERUZJTkVfSURBKGZwZ2FfcmVnaW9uX2lkYSk7XG5kcml2ZXJzL2ZwZ2EvZnBnYS1yZWdpb24uYy0xOS1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGZwZ2FfcmVnaW9uX2NsYXNzO1xuLS1cbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM9NDY9c3RhdGljIGNvbnN0IGludCBlbmdpbmVfcGFnZV9zaXplID0gMHg0MDA7XG4tLVxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYy04NC1cbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM6ODU6c3RhdGljIERFRklORV9JREEobWFzdGVyX2lkYSk7XG5kcml2ZXJzL2ZzaS9mc2ktY29yZS5jLTg2LVxuLS1cbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM9OTA9c3RhdGljIGRldl90IGZzaV9iYXNlX2RldjtcbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM6OTE6c3RhdGljIERFRklORV9JREEoZnNpX21pbm9yX2lkYSk7XG5kcml2ZXJzL2ZzaS9mc2ktY29yZS5jLTkyLSNkZWZpbmUgRlNJX0NIQVJfTUFYX0RFVklDRVNcdDB4MTAwMFxuLS1cbmRyaXZlcnMvZnNpL2ZzaS1vY2MuYz02OD1zdHJ1Y3Qgb2NjX2NsaWVudCB7XG4tLVxuZHJpdmVycy9mc2kvZnNpLW9jYy5jLTc3LVxuZHJpdmVycy9mc2kvZnNpLW9jYy5jOjc4OnN0YXRpYyBERUZJTkVfSURBKG9jY19pZGEpO1xuZHJpdmVycy9mc2kvZnNpLW9jYy5jLTc5LVxuLS1cbmRyaXZlcnMvZndjdGwvbWFpbi5jPTIyPXN0YXRpYyBkZXZfdCBmd2N0bF9kZXY7XG5kcml2ZXJzL2Z3Y3RsL21haW4uYzoyMzpzdGF0aWMgREVGSU5FX0lEQShmd2N0bF9pZGEpO1xuZHJpdmVycy9md2N0bC9tYWluLmMtMjQtc3RhdGljIHVuc2lnbmVkIGxvbmcgZndjdGxfdGFpbnRlZDtcbi0tXG5kcml2ZXJzL2duc3MvY29yZS5jLTI2LVxuZHJpdmVycy9nbnNzL2NvcmUuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShnbnNzX21pbm9ycyk7XG5kcml2ZXJzL2duc3MvY29yZS5jLTI4LXN0YXRpYyBkZXZfdCBnbnNzX2ZpcnN0O1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWV4YXIuYy0zMS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWV4YXIuYzozMjpzdGF0aWMgREVGSU5FX0lEQShpZGFfaW5kZXgpO1xuZHJpdmVycy9ncGlvL2dwaW8tZXhhci5jLTMzLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1wc3NlLmM9ODQ9TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdwaW9fbXBzc2VfdGFibGUpO1xuZHJpdmVycy9ncGlvL2dwaW8tbXBzc2UuYy04NS1cbmRyaXZlcnMvZ3Bpby9ncGlvLW1wc3NlLmM6ODY6c3RhdGljIERFRklORV9JREEoZ3Bpb19tcHNzZV9pZGEpO1xuZHJpdmVycy9ncGlvL2dwaW8tbXBzc2UuYy04Ny1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1zaW0uYy00Mi1cbmRyaXZlcnMvZ3Bpby9ncGlvLXNpbS5jOjQzOnN0YXRpYyBERUZJTkVfSURBKGdwaW9fc2ltX2lkYSk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1zaW0uYy00NC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby12aXJ0dXNlci5jLTM5LVxuZHJpdmVycy9ncGlvL2dwaW8tdmlydHVzZXIuYzo0MDpzdGF0aWMgREVGSU5FX0lEQShncGlvX3ZpcnR1c2VyX2lkYSk7XG5kcml2ZXJzL2dwaW8vZ3Bpby12aXJ0dXNlci5jLTQxLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpncGlvX3ZpcnR1c2VyX2RiZ19yb290O1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvbGliLXNoYXJlZC5jPTYzPXN0YXRpYyBMSVNUX0hFQUQoZ3Bpb19zaGFyZWRfbGlzdCk7XG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zaGFyZWQuYzo2NDpzdGF0aWMgREVGSU5FX0lEQShncGlvX3NoYXJlZF9pZGEpO1xuZHJpdmVycy9ncGlvL2dwaW9saWItc2hhcmVkLmMtNjUtXG4tLVxuZHJpdmVycy9ncGlvL2dwaW9saWIuYy01Ni0vKiBEZXZpY2UgYW5kIGNoYXIgZGV2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gKi9cbmRyaXZlcnMvZ3Bpby9ncGlvbGliLmM6NTc6c3RhdGljIERFRklORV9JREEoZ3Bpb19pZGEpO1xuZHJpdmVycy9ncGlvL2dwaW9saWIuYy01OC1zdGF0aWMgZGV2X3QgZ3Bpb19kZXZ0IF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1icmlkZ2UuYy0xNS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYXV4LWJyaWRnZS5jOjE2OnN0YXRpYyBERUZJTkVfSURBKGRybV9hdXhfYnJpZGdlX2lkYSk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1icmlkZ2UuYy0xNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1ocGQtYnJpZGdlLmMtMTUtXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1ocGQtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZHJtX2F1eF9ocGRfYnJpZGdlX2lkYSk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1ocGQtYnJpZGdlLmMtMTctXG4tLVxuZHJpdmVycy9oaWQvYW1kLXNmaC1oaWQvYW1kX3NmaF9wY2llLmM9MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphbWRfc2ZoX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvaGlkL2FtZC1zZmgtaGlkL2FtZF9zZmhfcGNpZS5jLTM4NC1cbmRyaXZlcnMvaGlkL2FtZC1zZmgtaGlkL2FtZF9zZmhfcGNpZS5jOjM4NTpzdGF0aWMgREVGSU5FX0lEQShzZmhfdG1faWRhKTtcbmRyaXZlcnMvaGlkL2FtZC1zZmgtaGlkL2FtZF9zZmhfcGNpZS5jLTM4Ni1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtbmludGVuZG8uYz0yMjc3PXN0YXRpYyBpbnQgam95Y29uX2hvbWVfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtbmludGVuZG8uYy0yMjk1LVxuZHJpdmVycy9oaWQvaGlkLW5pbnRlbmRvLmM6MjI5NjpzdGF0aWMgREVGSU5FX0lEQShuaW50ZW5kb19wbGF5ZXJfaWRfYWxsb2NhdG9yKTtcbmRyaXZlcnMvaGlkL2hpZC1uaW50ZW5kby5jLTIyOTctXG4tLVxuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYz0xODc9c3RydWN0IHNoaWVsZF9kZXZpY2Uge1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1udmlkaWEtc2hpZWxkLmMtMjAzLSAqL1xuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYzoyMDQ6c3RhdGljIERFRklORV9JREEodGh1bmRlcnN0cmlrZV9pZGEpO1xuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYy0yMDUtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXBsYXlzdGF0aW9uLmM9MjY9c3RhdGljIExJU1RfSEVBRChwc19kZXZpY2VzX2xpc3QpO1xuZHJpdmVycy9oaWQvaGlkLXBsYXlzdGF0aW9uLmMtMjctXG5kcml2ZXJzL2hpZC9oaWQtcGxheXN0YXRpb24uYzoyODpzdGF0aWMgREVGSU5FX0lEQShwc19wbGF5ZXJfaWRfYWxsb2NhdG9yKTtcbmRyaXZlcnMvaGlkL2hpZC1wbGF5c3RhdGlvbi5jLTI5LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1zb255LmM9NTIzPXN0YXRpYyBMSVNUX0hFQUQoc29ueV9kZXZpY2VfbGlzdCk7XG5kcml2ZXJzL2hpZC9oaWQtc29ueS5jOjUyNDpzdGF0aWMgREVGSU5FX0lEQShzb255X2RldmljZV9pZF9hbGxvY2F0b3IpO1xuZHJpdmVycy9oaWQvaGlkLXNvbnkuYy01MjUtXG4tLVxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfY29yZS5jLTM2LS8qIEZvciBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2UgSURzICovXG5kcml2ZXJzL2hzaS9jb250cm9sbGVycy9vbWFwX3NzaV9jb3JlLmM6Mzc6c3RhdGljIERFRklORV9JREEocGxhdGZvcm1fb21hcF9zc2lfaWRhKTtcbmRyaXZlcnMvaHNpL2NvbnRyb2xsZXJzL29tYXBfc3NpX2NvcmUuYy0zOC1cbi0tXG5kcml2ZXJzL2h3bW9uL2h3bW9uLmM9MTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgaHdtb25fY2xhc3MgPSB7XG4tLVxuZHJpdmVycy9od21vbi9od21vbi5jLTE0Ny1cbmRyaXZlcnMvaHdtb24vaHdtb24uYzoxNDg6c3RhdGljIERFRklORV9JREEoaHdtb25faWRhKTtcbmRyaXZlcnMvaHdtb24vaHdtb24uYy0xNDktXG4tLVxuZHJpdmVycy9od21vbi9pYm1hZW0uYy03OC1cbmRyaXZlcnMvaHdtb24vaWJtYWVtLmM6Nzk6c3RhdGljIERFRklORV9JREEoYWVtX2lkYSk7XG5kcml2ZXJzL2h3bW9uL2libWFlbS5jLTgwLVxuLS1cbmRyaXZlcnMvaHd0cmFjaW5nL2ludGVsX3RoL2NvcmUuYz0yNT1tb2R1bGVfcGFyYW0oaG9zdF9tb2RlLCBib29sLCAwNDQ0KTtcbmRyaXZlcnMvaHd0cmFjaW5nL2ludGVsX3RoL2NvcmUuYy0yNi1cbmRyaXZlcnMvaHd0cmFjaW5nL2ludGVsX3RoL2NvcmUuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShpbnRlbF90aF9pZGEpO1xuZHJpdmVycy9od3RyYWNpbmcvaW50ZWxfdGgvY29yZS5jLTI4LVxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMtNDEtLyogSURBIHRvIGFzc2lnbiBlYWNoIHJlZ2lzdGVyZWQgZGV2aWNlIGEgdW5pcXVlIGlkICovXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jOjQyOnN0YXRpYyBERUZJTkVfSURBKGlpb19pZGEpO1xuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYy00My1cbi0tXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jLTMzLVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYzozNDpzdGF0aWMgREVGSU5FX0lEQShpaW9fdHJpZ2dlcl9pZGEpO1xuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYy0zNS1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jPTE0OT1zdGF0aWMgZGV2X3QgZHluYW1pY19pc3NtX2RldjtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMtMTUwLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYzoxNTE6c3RhdGljIERFRklORV9JREEodW1hZF9pZGEpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYy0xNTItXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYz03Nj1zdGF0aWMgZGV2X3QgZHluYW1pY191dmVyYnNfZGV2O1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYy03Ny1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmM6Nzg6c3RhdGljIERFRklORV9JREEodXZlcmJzX2lkYSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jLTc5LXN0YXRpYyBpbnQgaWJfdXZlcmJzX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTtcbi0tXG5kcml2ZXJzL2lucHV0L2lucHV0LmM9MzU9TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2lucHV0L2lucHV0LmMtMzgtI2RlZmluZSBJTlBVVF9GSVJTVF9EWU5BTUlDX0RFVlx0XHQyNTZcbmRyaXZlcnMvaW5wdXQvaW5wdXQuYzozOTpzdGF0aWMgREVGSU5FX0lEQShpbnB1dF9pZGEpO1xuZHJpdmVycy9pbnB1dC9pbnB1dC5jLTQwLVxuLS1cbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jPTE2MjY9c3RhdGljIGludCB4cGFkX2luaXRfZmYoc3RydWN0IHVzYl94cGFkICp4cGFkKSB7IHJldHVybiAwOyB9XG4tLVxuZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMtMTYzMi1cbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jOjE2MzM6c3RhdGljIERFRklORV9JREEoeHBhZF9wYWRfc2VxKTtcbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jLTE2MzQtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYz02ND1pbnQgYW1kX2lvbW11X21heF9nbHhfdmFsID0gLTE7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy02OS0gKi9cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NzA6REVGSU5FX0lEQShwZG9tX2lkcyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTcxLVxuLS1cbmRyaXZlcnMvaW9tbXUvaW50ZWwvZG1hci5jPTY0PXN0YXRpYyBpbnQgZG1hcl9kZXZfc2NvcGVfc3RhdHVzID0gMTtcbmRyaXZlcnMvaW9tbXUvaW50ZWwvZG1hci5jOjY1OnN0YXRpYyBERUZJTkVfSURBKGRtYXJfc2VxX2lkcyk7XG5kcml2ZXJzL2lvbW11L2ludGVsL2RtYXIuYy02Ni1cbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11LmM9NDI9c3RhdGljIHN0cnVjdCBrc2V0ICppb21tdV9ncm91cF9rc2V0O1xuZHJpdmVycy9pb21tdS9pb21tdS5jOjQzOnN0YXRpYyBERUZJTkVfSURBKGlvbW11X2dyb3VwX2lkYSk7XG5kcml2ZXJzL2lvbW11L2lvbW11LmM6NDQ6c3RhdGljIERFRklORV9JREEoaW9tbXVfZ2xvYmFsX3Bhc2lkX2lkYSk7XG5kcml2ZXJzL2lvbW11L2lvbW11LmMtNDUtXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM9Mzk9c3RhdGljIHN0cnVjdCBtb2NrX2J1c190eXBlIGlvbW11ZmRfbW9ja19idXNfdHlwZSA9IHtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy00NC1cbmRyaXZlcnMvaW9tbXUvaW9tbXVmZC9zZWxmdGVzdC5jOjQ1OnN0YXRpYyBERUZJTkVfSURBKG1vY2tfZGV2X2lkYSk7XG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy00Ni1cbi0tXG5kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMtNDctLyogSU9NTVUgUFNDSUQgYWxsb2NhdGlvbiBuYW1lc3BhY2UuICovXG5kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmM6NDg6c3RhdGljIERFRklORV9JREEocmlzY3ZfaW9tbXVfcHNjaWRzKTtcbmRyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuYy00OS0jZGVmaW5lIFJJU0NWX0lPTU1VX01BWF9QU0NJRFx0XHQoQklUKDIwKSAtIDEpXG4tLVxuZHJpdmVycy9pcGFjay9pcGFjay5jLTE3LVxuZHJpdmVycy9pcGFjay9pcGFjay5jOjE4OnN0YXRpYyBERUZJTkVfSURBKGlwYWNrX2lkYSk7XG5kcml2ZXJzL2lwYWNrL2lwYWNrLmMtMTktXG4tLVxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmM9MjAyPXN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHZtb3ZwX2xvY2spO1xuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMtMjAzLVxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmM6MjA0OnN0YXRpYyBERUZJTkVfSURBKGl0c192cGVpZF9pZGEpO1xuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMtMjA1LVxuLS1cbmRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXY1LmM9MzQ9c3RydWN0IGdpY3Y1X2NoaXBfZGF0YSBnaWN2NV9nbG9iYWxfZGF0YSBfX3JlYWRfbW9zdGx5O1xuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjUuYy0zNS1cbmRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXY1LmM6MzY6c3RhdGljIERFRklORV9JREEobHBpX2lkYSk7XG5kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy12NS5jLTM3LXN0YXRpYyB1MzIgbnVtX2xwaXMgX19yb19hZnRlcl9pbml0O1xuLS1cbmRyaXZlcnMvbWNiL21jYi1jb3JlLmMtMTQtXG5kcml2ZXJzL21jYi9tY2ItY29yZS5jOjE1OnN0YXRpYyBERUZJTkVfSURBKG1jYl9pZGEpO1xuZHJpdmVycy9tY2IvbWNiLWNvcmUuYy0xNi1cbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jPTQ4PXN0YXRpYyBpbnQgYmNhY2hlX21ham9yO1xuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzo0OTpzdGF0aWMgREVGSU5FX0lEQShiY2FjaGVfZGV2aWNlX2lkeCk7XG5kcml2ZXJzL21kL2JjYWNoZS9zdXBlci5jLTUwLXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB1bnJlZ2lzdGVyX3dhaXQ7XG4tLVxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTUzLVxuZHJpdmVycy9tZC9kbS1jcnlwdC5jOjU0OnN0YXRpYyBERUZJTkVfSURBKHdvcmtxdWV1ZV9pZGEpO1xuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTU1LVxuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kdmItcGxsLmM9MjE9c3RydWN0IGR2Yl9wbGxfcHJpdiB7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2R2Yi1wbGwuYy0zNy0jZGVmaW5lIERWQl9QTExfTUFYIDY0XG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZHZiLXBsbC5jOjM4OnN0YXRpYyBERUZJTkVfSURBKHBsbF9pZGEpO1xuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2R2Yi1wbGwuYy0zOS1cbi0tXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JlbmVzYXMvcmNhci12aW4vcmNhci1jb3JlLmMtNTctXG5kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3JlbmVzYXMvcmNhci12aW4vcmNhci1jb3JlLmM6NTg6c3RhdGljIERFRklORV9JREEocnZpbl9pZGEpO1xuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yZW5lc2FzL3JjYXItdmluL3JjYXItY29yZS5jLTU5LXN0YXRpYyBERUZJTkVfTVVURVgocnZpbl9ncm91cF9sb2NrKTtcbi0tXG5kcml2ZXJzL21lZGlhL3JjL2xpcmNfZGV2LmM9MjQ9c3RhdGljIGRldl90IGxpcmNfYmFzZV9kZXY7XG4tLVxuZHJpdmVycy9tZWRpYS9yYy9saXJjX2Rldi5jLTI2LS8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBhbGxvY2F0ZWQgbGlyYyBkZXZpY2VzICovXG5kcml2ZXJzL21lZGlhL3JjL2xpcmNfZGV2LmM6Mjc6c3RhdGljIERFRklORV9JREEobGlyY19pZGEpO1xuZHJpdmVycy9tZWRpYS9yYy9saXJjX2Rldi5jLTI4LVxuLS1cbmRyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jPTg1PXN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgKmxlZF9mZWVkYmFjaztcbi0tXG5kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYy04Ny0vKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgcmMgZGV2aWNlcyAqL1xuZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmM6ODg6c3RhdGljIERFRklORV9JREEocmNfaWRhKTtcbmRyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jLTg5LVxuLS1cbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYz0xMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBpbnRlbF9scHNzX3NwaV9jZWxsID0ge1xuLS1cbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYy0xMzUtXG5kcml2ZXJzL21mZC9pbnRlbC1scHNzLmM6MTM2OnN0YXRpYyBERUZJTkVfSURBKGludGVsX2xwc3NfZGV2aWRfaWRhKTtcbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYy0xMzctc3RhdGljIHN0cnVjdCBkZW50cnkgKmludGVsX2xwc3NfZGVidWdmcztcbi0tXG5kcml2ZXJzL21pc2MvYmNtLXZrL2JjbV92a19kZXYuYy0yNC1cbmRyaXZlcnMvbWlzYy9iY20tdmsvYmNtX3ZrX2Rldi5jOjI1OnN0YXRpYyBERUZJTkVfSURBKGJjbV92a19pZGEpO1xuZHJpdmVycy9taXNjL2JjbS12ay9iY21fdmtfZGV2LmMtMjYtXG4tLVxuZHJpdmVycy9taXNjL2NhcmRyZWFkZXIvYWxjb3JfcGNpLmMtMTktXG5kcml2ZXJzL21pc2MvY2FyZHJlYWRlci9hbGNvcl9wY2kuYzoyMDpzdGF0aWMgREVGSU5FX0lEQShhbGNvcl9wY2lfaWRyKTtcbmRyaXZlcnMvbWlzYy9jYXJkcmVhZGVyL2FsY29yX3BjaS5jLTIxLVxuLS1cbmRyaXZlcnMvbWlzYy9jYjcxMC9jb3JlLmMtMTQtXG5kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jOjE1OnN0YXRpYyBERUZJTkVfSURBKGNiNzEwX2lkYSk7XG5kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jLTE2LVxuLS1cbmRyaXZlcnMvbWlzYy9kdy14ZGF0YS1wY2llLmMtMjQtXG5kcml2ZXJzL21pc2MvZHcteGRhdGEtcGNpZS5jOjI1OnN0YXRpYyBERUZJTkVfSURBKHhkYXRhX2lkYSk7XG5kcml2ZXJzL21pc2MvZHcteGRhdGEtcGNpZS5jLTI2LVxuLS1cbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYz0xND1zdHJ1Y3QgYXV4X2J1c19kZXZpY2Uge1xuLS1cbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYy0xNy1cbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYzoxODpzdGF0aWMgREVGSU5FX0lEQShncF9jbGllbnRfaWRhKTtcbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYy0xOS1zdGF0aWMgY29uc3QgY2hhciBhdXhfZGV2X290cF9lMnBfbmFtZVsxNV0gPSBcJiMzNDtncF9vdHBfZTJwXCYjMzQ7O1xuLS1cbmRyaXZlcnMvbWlzYy9wY2lfZW5kcG9pbnRfdGVzdC5jLTEyMi1cbmRyaXZlcnMvbWlzYy9wY2lfZW5kcG9pbnRfdGVzdC5jOjEyMzpzdGF0aWMgREVGSU5FX0lEQShwY2lfZW5kcG9pbnRfdGVzdF9pZGEpO1xuZHJpdmVycy9taXNjL3BjaV9lbmRwb2ludF90ZXN0LmMtMTI0LVxuLS1cbmRyaXZlcnMvbWlzYy9ycG1iLWNvcmUuYy0xNC1cbmRyaXZlcnMvbWlzYy9ycG1iLWNvcmUuYzoxNTpzdGF0aWMgREVGSU5FX0lEQShycG1iX2lkYSk7XG5kcml2ZXJzL21pc2MvcnBtYi1jb3JlLmMtMTYtXG4tLVxuZHJpdmVycy9taXNjL3hpbGlueF9zZGZlYy5jLTI5LVxuZHJpdmVycy9taXNjL3hpbGlueF9zZGZlYy5jOjMwOnN0YXRpYyBERUZJTkVfSURBKGRldl9ucnMpO1xuZHJpdmVycy9taXNjL3hpbGlueF9zZGZlYy5jLTMxLVxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYz05OT1zdGF0aWMgaW50IG1heF9kZXZpY2VzO1xuLS1cbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYy0xMDItXG5kcml2ZXJzL21tYy9jb3JlL2Jsb2NrLmM6MTAzOnN0YXRpYyBERUZJTkVfSURBKG1tY19ibGtfaWRhKTtcbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYzoxMDQ6c3RhdGljIERFRklORV9JREEobW1jX3JwbWJfaWRhKTtcbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYy0xMDUtXG4tLVxuZHJpdmVycy9tbWMvY29yZS9ob3N0LmMtMzMtXG5kcml2ZXJzL21tYy9jb3JlL2hvc3QuYzozNDpzdGF0aWMgREVGSU5FX0lEQShtbWNfaG9zdF9pZGEpO1xuZHJpdmVycy9tbWMvY29yZS9ob3N0LmMtMzUtXG4tLVxuZHJpdmVycy9tdXgvY29yZS5jPTU0PXN0cnVjdCBkZXZtX211eF9zdGF0ZV9zdGF0ZSB7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MDgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSURBIEluc3RhbmNlcyBpbiB0aGUgQ29kZWJhc2UqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nOiBhbGwgdGhlc2UgaW5zdGFuY2VzIG9mIGBERUZJTkVfSURBKC4uLilgIOKAkyBhbmQgdGhlcmUgYXJlIHF1aXRlIGEgZmV3IG9mIHRoZW0g4oCTIGFyZSBkZWNsYXJlZCBhdCBmaWxlIHNjb3BlLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYSBwYXJ0aWN1bGFyIGRlc2lnbiBwYXR0ZXJuIG9yIGFwcHJvYWNoIHRvIHJlc291cmNlIG1hbmFnZW1lbnQuIFdoZXRoZXIgdGhleSYjMzk7cmUgYHN0YXRpY2Agb3IgdG9wLWxldmVsIGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgc2NvcGUsIHdoaWNoIHJlbWFpbnMgdGhlIGZpbGUuIEl0JiMzOTtzIGEgcG90ZW50aWFsIGZsYWcgZm9yIGhvdyB0aGVzZSBJREFzIGFyZSBiZWluZyB1c2VkLiBOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gaG93IGBERUZJTkVfTVRSRUVgIGlzIGJlaW5nIHVzZWQsIGFzIGl0JiMzOTtzIGxpa2VseSByZWxhdGVkLCBhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byB3aWxsIHByb3ZpZGUgdGhlIGFuc3dlciBJJiMzOTttIGxvb2tpbmcgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUZJTkVfTVRSRUVcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdD01Nz1Ob3JtYWwgQVBJXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC01OS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q6NjA6U3RhcnQgYnkgaW5pdGlhbGlzaW5nIGEgbWFwbGUgdHJlZSwgZWl0aGVyIHdpdGggREVGSU5FX01UUkVFKCkgZm9yIHN0YXRpY2FsbHlcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QtNjEtYWxsb2NhdGVkIG1hcGxlIHRyZWVzIG9yIG10X2luaXQoKSBmb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG9uZXMuICBBXG4tLVxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg9MjYxPXN0cnVjdCBtYXBsZV90cmVlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaC0yOTktXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaDozMDA6I2RlZmluZSBERUZJTkVfTVRSRUUobmFtZSlcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtMzAxLVx0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7XHRcdFxcXG4tLVxubGliL3Rlc3RfbWFwbGVfdHJlZS5jPTM2NDY9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGFsbG9jX2N5Y2xpY190ZXN0aW5nKHN0cnVjdCBtYXBsZV90cmVlICptdClcbi0tXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzcxMi1cbmxpYi90ZXN0X21hcGxlX3RyZWUuYzozNzEzOnN0YXRpYyBERUZJTkVfTVRSRUUodHJlZSk7XG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzcxNC1zdGF0aWMgaW50IF9faW5pdCBtYXBsZV90cmVlX3NlZWQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyNjEKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMzY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZyA9IGZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSB0aGUgY29kZSBhbmQgc2VlIHdoYXQgY2hhbmdlZCwgc3RhcnRpbmcgd2l0aCB0aGUgYERvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3RgIGZpbGUuIEkgdGhlbiBsb29rZWQgYXQgYGxpYi90ZXN0X21hcGxlX3RyZWUuY2AgYW5kIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgbWFjcm9zIGFyZSB1c2VkLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBERUZJTkVfTVRSRUVgIGFuZCBgREVGSU5FX0lEQWAgYXJlIG5vdyBlbmZvcmNpbmcgc3RhdGljIHN0b3JhZ2UsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIHByZXZpb3VzIHZlcnNpb25zLiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgaXMgdGhlIGtleSBoZXJlOyBpdCYjMzk7cyBhIGNvbXBpbGUtdGltZSBjaGVjayB1c2luZyBhIHN0YXRpYyB2YXJpYWJsZS4gVGhlIGVycm9yIGluIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIHdhcyB0aGF0IGl0IHVzZWQgYERFRklORV9NVFJFRWAgbG9jYWxseSwgd2hpY2ggaXMgbm93IGludmFsaWQsIGFuZCBpdCB3YXMgY29ycmVjdGVkIGJ5IGluaXRpYWxpemluZyB0aGUgYG1hcGxlX3RyZWVgIHN0cnVjdHVyZSBkaXJlY3RseS4KCkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciB0byBzZWUgaWYgYW55IGNvbXBpbGVkIGNvZGUgY2hhbmdlZCBhbmQgY2hlY2tlZCB0aGUgZGlmZiB0byBjb25maXJtLiBUaGlzIGxlZCBtZSB0byBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYCwgYGluY2x1ZGUvbGludXgvaWRyLmhgLCBhbmQgYGluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oYCwgd2hpY2ggc2hvd2VkIHRoZSBuZXcgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbWFjcm8uIFRoaXMgbWFjcm8sIGhvd2V2ZXIsIG9ubHkgZ2VuZXJhdGVzIGEgY29tcGlsZS10aW1lIGNoZWNrLCBtYWtpbmcgc3VyZSB0aGF0IHZhcmlhYmxlcyBkZWZpbmVkIHdpdGggYERFRklORV9JREFgIG9yIGBERUZJTkVfTVRSRUVgIGhhdmUgc3RhdGljIHN0b3JhZ2UuIFRoaXMgbWVhbnMgaXQgZW5mb3JjZXMgYSBjb2Rpbmcgc3R5bGUgcmF0aGVyIHRoYW4gY2hhbmdpbmcgcnVudGltZSBiZWhhdmlvci4KClRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AgaXMganVzdCByZW1vdmluZyB0aGUgdW5uZWVkZWQgaW5pdGlhbCB6ZXJvaW5nIG9mIGB0cmVlYCBvbiB0aGUgc3RhY2ssIHdoaWNoIHdhcyBpbW1lZGlhdGVseSBvdmVyd3JpdHRlbiBieSBgbXRfaW5pdF9mbGFnc2AgYmVmb3JlIHVzZS4gVGhlIGtleSBxdWVzdGlvbiBJIGFza2VkIG15c2VsZiB3YXMgd2hldGhlciB0aGUgYGludGVydmFsX3RyZWVfdGVzdC5jYCBtb2R1bGUgaXMgZXZlciBhY3R1YWxseSB1c2VkIGJ5IHNvbWV0aGluZyBsaWtlIHN5emthbGxlci4gRnJvbSBsb29raW5nIGF0IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBidWlsZCBjb25maWcgaXQgbG9va3MgbGlrZSBuby4gRXZlbiBpZiBpdCB3YXMgbG9hZGVkLCB0aGUgY2hhbmdlIG1hZGUgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGluIHRoZSB0ZXN0IG1vZHVsZSBhcyB0aGUgc3RhY2sgdmFyaWFibGUgYHRyZWVgIHdhcyBpbml0aWFsaXplZCByZWR1bmRhbnRseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc3Bhbl9pdGVyYXRpb25fY2hlY2tgIGZ1bmN0aW9uLiBUaGUgY29kZSBwYXRocyBhcmVuJiMzOTt0IHJlYWNoYWJsZSBmb3IgZnV6emluZywgd2hpY2ggbWVhbnMgdGhlIGNoYW5nZXMgd29uJiMzOTt0IGJlIGV4cG9zZWQgYnkgYSBmdXp6ZXIuIEFsbCB0aGUgY2hhbmdlcyB1bmRlciBgdG9vbHMvYCBhcmUgdXNlci1zcGFjZSB0ZXN0cywgd2hpY2ggYXJlIGlycmVsZXZhbnQgaGVyZS4KCkkgdGhlbiByZXZpc2l0ZWQgdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBpZiBzb21ldGhpbmcgc2hvdWxkIGJlIGZ1enplZCwgYXMgZGVmaW5lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gSSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlIHNlY3Rpb24gb24gd2hlbiB0byAqbm90KiByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIG1vZGlmaWNhdGlvbnMgZmFsbCBzcXVhcmVseSBpbnRvIG5vbi1rZXJuZWwgY2hhbmdlcywgYW5kIGNoYW5nZXMgaW4gdXNlci1zcGFjZSBjb2RlLiBUaGUgY29tcGlsZS10aW1lIGNoZWNrcyBhbHNvIGFyZSBhbHNvIGNhdGVnb3JpemVkIGFzIG5vdCB3b3J0aCBmdXp6aW5nLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byByZWFjaCB0aGUgY29tcGlsZS10aW1lIGNoZWNrcyB1c2luZyBhIHJ1bnRpbWUgZnV6emVyLgoKSW4gbGlnaHQgb2YgZXZlcnl0aGluZywgSSBzZWUgdGhhdCB0aGUgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbWFjcm8gaXMgYSBjb21waWxlLXRpbWUgY2hlY2s7IGl0IGRvZXNuJiMzOTt0IGVtaXQgYW55IGV4ZWN1dGFibGUgaW5zdHJ1Y3Rpb25zLCBkb2VzbiYjMzk7dCBhZmZlY3QgcnVudGltZSBjb250cm9sIGZsb3csIGRvZXNuJiMzOTt0IG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMsIGFuZCBkb2VzbiYjMzk7dCBleGVjdXRlIGF0IHJ1bnRpbWUuIFRoZSBjaGFuZ2VzIGluIGB0b29scy9gIGFyZSBpcnJlbGV2YW50IGJlY2F1c2UgdGhleSBleGlzdCB3aXRoaW4gdGhlIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AgaXMgYSBub24tZnVuY3Rpb25hbCByZWZhY3RvcmluZyBpbnNpZGUgYSB0ZXN0IG1vZHVsZSB0aGF0IGlzIG5vdCBhY2Nlc3NpYmxlIGFuZCB1bnJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgcnVudGltZSBzZXR1cC4KVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZXJlIGFyZSBubyBydW50aW1lIGNoYW5nZXMsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEFTU0VSVF9TVEFUSUNfU1RPUkFHRSgpLCB3aGljaCBpcyBhIHB1cmVseSBjb21waWxlLXRpbWUgc3RhdGljIGNoZWNrIGVuZm9yY2luZyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBvbiBERUZJTkVfSURBIGFuZCBERUZJTkVfTVRSRUUgZGVjbGFyYXRpb25zLiBJdCBlbWl0cyBubyBydW50aW1lIGluc3RydWN0aW9ucywgZGVmZW5zaXZlIGFzc2VydGlvbnMsIG9yIGNvbnRyb2wtZmxvdyBtb2RpZmljYXRpb25zLiBUaGUgY2hhbmdlcyBpbiB0b29scy8gYWZmZWN0IG9ubHkgdXNlci1zcGFjZSB0ZXN0cywgYW5kIHRoZSBjaGFuZ2UgaW4gbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGFkanVzdHMgYSBzdGFuZGFsb25lIHRlc3QgbW9kdWxlIChleGVjdXRlZCBvbmx5IG9uIG1vZHVsZSBpbml0L2Jvb3QgYW5kIGltbWVkaWF0ZWx5IHVubG9hZGVkKSB0byBjb25mb3JtIHRvIHRoZSBjb21waWxlLXRpbWUgY2hlY2sgd2l0aG91dCBhbHRlcmluZyBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuIFRodXMsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd29ydGggZnV6emluZyBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKCksIHdoaWNoIGlzIGEgcHVyZWx5IGNvbXBpbGUtdGltZSBzdGF0aWMgY2hlY2sgZW5mb3JjaW5nIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIG9uIERFRklORV9JREEgYW5kIERFRklORV9NVFJFRSBkZWNsYXJhdGlvbnMuIEl0IGVtaXRzIG5vIHJ1bnRpbWUgaW5zdHJ1Y3Rpb25zLCBkZWZlbnNpdmUgYXNzZXJ0aW9ucywgb3IgY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIHRvb2xzLyBhZmZlY3Qgb25seSB1c2VyLXNwYWNlIHRlc3RzLCBhbmQgdGhlIGNoYW5nZSBpbiBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYWRqdXN0cyBhIHN0YW5kYWxvbmUgdGVzdCBtb2R1bGUgKGV4ZWN1dGVkIG9ubHkgb24gbW9kdWxlIGluaXQvYm9vdCBhbmQgaW1tZWRpYXRlbHkgdW5sb2FkZWQpIHRvIGNvbmZvcm0gdG8gdGhlIGNvbXBpbGUtdGltZSBjaGVjayB3aXRob3V0IGFsdGVyaW5nIGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4gVGh1cywgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3b3J0aCBmdXp6aW5nIGlzIG1vZGlmaWVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjEwLjI5Njg4ODIzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzc1NDE4MjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKCksIHdoaWNoIGlzIGEgcHVyZWx5IGNvbXBpbGUtdGltZSBzdGF0aWMgY2hlY2sgZW5mb3JjaW5nIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIG9uIERFRklORV9JREEgYW5kIERFRklORV9NVFJFRSBkZWNsYXJhdGlvbnMuIEl0IGVtaXRzIG5vIHJ1bnRpbWUgaW5zdHJ1Y3Rpb25zLCBkZWZlbnNpdmUgYXNzZXJ0aW9ucywgb3IgY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIHRvb2xzLyBhZmZlY3Qgb25seSB1c2VyLXNwYWNlIHRlc3RzLCBhbmQgdGhlIGNoYW5nZSBpbiBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYWRqdXN0cyBhIHN0YW5kYWxvbmUgdGVzdCBtb2R1bGUgKGV4ZWN1dGVkIG9ubHkgb24gbW9kdWxlIGluaXQvYm9vdCBhbmQgaW1tZWRpYXRlbHkgdW5sb2FkZWQpIHRvIGNvbmZvcm0gdG8gdGhlIGNvbXBpbGUtdGltZSBjaGVjayB3aXRob3V0IGFsdGVyaW5nIGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4gVGh1cywgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3b3J0aCBmdXp6aW5nIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6MTAuMjk2ODkzODM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU2MjUzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyM2E0MGE4YWQ0M2QxZmZmOTI3ZTM4OGQxN2QyYWIyZDY3ZDdiOWJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDIyOjM3OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxcbmluZGV4IGNiMmY2MDUwYmRmN2QuLmVmOTAzNmZhNTQxM2QgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oXFxuQEAgLTI3NSw2ICsyNzUsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkICpvZmZzZXRfdG9fcHRyKGNvbnN0IGludCAqb2ZmKVxcbiAjZGVmaW5lIF9fQUREUkVTU0FCTEUoc3ltKSBcXFxcXFxuIFxcdF9fX0FERFJFU1NBQkxFKHN5bSwgX19zZWN0aW9uKFxcXCIuZGlzY2FyZC5hZGRyZXNzYWJsZVxcXCIpKVxcbiBcXG4rLyogRW5mb3JjZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gKi9cXG4rI2RlZmluZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSkgXFxcXFxcbitcXHRzdGF0aWMgdHlwZW9mKG5hbWUpICogY29uc3QgX19hbHdheXNfdW51c2VkIFxcXFxcXG4rXFx0XFx0bmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcXHUwMDI2KG5hbWUpXFxuK1xcbiAvKlxcbiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzXFxuICAqIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgbW9zdCBpbXBvcnRhbnRseSB3aXRob3V0IGV2YWx1YXRpbmcgdGhlIGFyZ3VtZW50LlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkci5oIGIvaW5jbHVkZS9saW51eC9pZHIuaFxcbmluZGV4IDc4OWUyM2U2NzQ0NDEuLmUyYTRiNjI5ODUxMWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZHIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaWRyLmhcXG5AQCAtMTYsNiArMTYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgaWRyIHtcXG4gXFx0c3RydWN0IHJhZGl4X3RyZWVfcm9vdFxcdGlkcl9ydDtcXG5AQCAtMjY5LDcgKzI3MCw5IEBAIHN0cnVjdCBpZGEge1xcbiAjZGVmaW5lIElEQV9JTklUKG5hbWUpXFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0LnhhID0gWEFSUkFZX0lOSVQobmFtZSwgSURBX0lOSVRfRkxBR1MpXFx0XFx0XFx0XFx0XFxcXFxcbiB9XFxuLSNkZWZpbmUgREVGSU5FX0lEQShuYW1lKVxcdHN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpXFxuKyNkZWZpbmUgREVGSU5FX0lEQShuYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0c3RydWN0IGlkYSBuYW1lID0gSURBX0lOSVQobmFtZSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcXG4gXFxuIGludCBpZGFfYWxsb2NfcmFuZ2Uoc3RydWN0IGlkYSAqLCB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4LCBnZnBfdCk7XFxuIHZvaWQgaWRhX2ZyZWUoc3RydWN0IGlkYSAqLCB1bnNpZ25lZCBpbnQgaWQpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXFxuaW5kZXggZTU5NWFlNWNkMGVlZC4uZTMwZTU3ZjVmM2RmOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXFxuQEAgLTksNiArOSw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbiBcXG5AQCAtMjk3LDcgKzI5OCw4IEBAIHN0cnVjdCBtYXBsZV90cmVlIHtcXG4gI2VuZGlmXFxuIFxcbiAjZGVmaW5lIERFRklORV9NVFJFRShuYW1lKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMClcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7XFx0XFx0XFxcXFxcbitcXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcXG4gXFxuICNkZWZpbmUgbXRyZWVfbG9jayhtdClcXHRcXHRzcGluX2xvY2soKFxcdTAwMjYobXQpLVxcdTAwM2VtYV9sb2NrKSlcXG4gI2RlZmluZSBtdHJlZV9sb2NrX25lc3RlZChtYXMsIHN1YmNsYXNzKSBcXFxcXFxuZGlmZiAtLWdpdCBhL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYyBiL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY1xcbmluZGV4IGIwYjA3MjcwY2U3YzMuLjA2Zjc3ZmIzMTc5ZmMgMTAwNjQ0XFxuLS0tIGEvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXFxuKysrIGIvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXFxuQEAgLTI0NCw3ICsyNDQsNyBAQCBzdGF0aWMgaW50IHNwYW5faXRlcmF0aW9uX2NoZWNrKHZvaWQpXFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGxhc3Q7XFxuIFxcdHN0cnVjdCBpbnRlcnZhbF90cmVlX3NwYW5faXRlciBzcGFuLCBtYXNfc3BhbjtcXG4gXFxuLVxcdERFRklORV9NVFJFRSh0cmVlKTtcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgdHJlZTtcXG4gXFxuIFxcdE1BX1NUQVRFKG1hcywgXFx1MDAyNnRyZWUsIDAsIDApO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oXFxuaW5kZXggZjJmNTRiMDM4MTY4MC4uMDNlY2Y5MDg2NjQzNiAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcXG4rKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcXG5AQCAtNzMsNiArNzMsMTEgQEBcXG4gIyBkZWZpbmUgX19zYW1lX3R5cGUoYSwgYikgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoYSksIHR5cGVvZihiKSlcXG4gI2VuZGlmXFxuIFxcbisvKiBFbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiAqL1xcbisjZGVmaW5lIEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKSBcXFxcXFxuK1xcdHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgXFxcXFxcbitcXHRcXHRuYW1lIyNfc3RvcmFnZV9jaGVjayA9IFxcdTAwMjYobmFtZSlcXG4rXFxuIC8qXFxuICAqIFRoaXMgcmV0dXJucyBhIGNvbnN0YW50IGV4cHJlc3Npb24gd2hpbGUgZGV0ZXJtaW5pbmcgaWYgYW4gYXJndW1lbnQgaXNcXG4gICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL2lkci10ZXN0LmNcXG5pbmRleCA5NDUxNDRlOTg1MDcyLi42ZmNiYTViNTg3MGI0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL2lkci10ZXN0LmNcXG5AQCAtNDYwLDkgKzQ2MCwxMSBAQCB2b2lkIGlkYV9kdW1wKHN0cnVjdCBpZGEgKik7XFxuICAqL1xcbiB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKVxcbiB7XFxuLVxcdERFRklORV9JREEoaWRhKTtcXG4rXFx0c3RydWN0IGlkYSBpZGE7XFxuIFxcdGludCBpZDtcXG4gXFxuK1xcdGlkYV9pbml0KFxcdTAwMjZpZGEpO1xcbitcXG4gXFx0aWQgPSBpZGFfYWxsb2NfbWluKFxcdTAwMjZpZGEsIDI1NiwgR0ZQX05PV0FJVCk7XFxuIFxcdElEQV9CVUdfT04oXFx1MDAyNmlkYSwgaWQgIT0gLUVOT01FTSk7XFxuIFxcdGlkID0gaWRhX2FsbG9jX21pbihcXHUwMDI2aWRhLCAxVUwgXFx1MDAzY1xcdTAwM2MgMzAsIEdGUF9OT1dBSVQpO1xcbkBAIC00NzUsOSArNDc3LDExIEBAIHZvaWQgaWRhX2NoZWNrX25vbWVtKHZvaWQpXFxuICAqL1xcbiB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZClcXG4ge1xcbi1cXHRERUZJTkVfSURBKGlkYSk7XFxuK1xcdHN0cnVjdCBpZGEgaWRhO1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbitcXHRpZGFfaW5pdChcXHUwMDI2aWRhKTtcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwMDAwOyBpKyspIHtcXG4gXFx0XFx0aW50IGlkID0gaWRhX2FsbG9jKFxcdTAwMjZpZGEsIEdGUF9OT1dBSVQpO1xcbiBcXHRcXHRpZiAoaWQgPT0gLUVOT01FTSkge1xcbkBAIC00OTYsMTEgKzUwMCwxMyBAQCB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZClcXG4gXFxuIHZvaWQgaWRhX2NoZWNrX3JhbmRvbSh2b2lkKVxcbiB7XFxuLVxcdERFRklORV9JREEoaWRhKTtcXG4rXFx0c3RydWN0IGlkYSBpZGE7XFxuIFxcdERFQ0xBUkVfQklUTUFQKGJpdG1hcCwgMjA0OCk7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXHR0aW1lX3QgcyA9IHRpbWUoTlVMTCk7XFxuIFxcbitcXHRpZGFfaW5pdChcXHUwMDI2aWRhKTtcXG4rXFxuICByZXBlYXQ6XFxuIFxcdG1lbXNldChiaXRtYXAsIDAsIHNpemVvZihiaXRtYXApKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDAwMDsgaSsrKSB7XFxuQEAgLTUyMiw5ICs1MjgsMTEgQEAgdm9pZCBpZGFfY2hlY2tfcmFuZG9tKHZvaWQpXFxuIFxcbiB2b2lkIGlkYV9hbGxvY19mcmVlX3Rlc3Qodm9pZClcXG4ge1xcbi1cXHRERUZJTkVfSURBKGlkYSk7XFxuK1xcdHN0cnVjdCBpZGEgaWRhO1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbitcXHRpZGFfaW5pdChcXHUwMDI2aWRhKTtcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwMDsgaSsrKVxcbiBcXHRcXHRhc3NlcnQoaWRhX2FsbG9jX21heChcXHUwMDI2aWRhLCAyMDAwMCwgR0ZQX0tFUk5FTCkgPT0gaSk7XFxuIFxcdGFzc2VydChpZGFfYWxsb2NfcmFuZ2UoXFx1MDAyNmlkYSwgNSwgMzAsIEdGUF9LRVJORUwpIFxcdTAwM2MgMCk7XFxuQEAgLTU3NiwxMCArNTg0LDEyIEBAIHN0YXRpYyB2b2lkICppZGFfbGVha19mbih2b2lkICphcmcpXFxuIFxcbiB2b2lkIGlkYV90aHJlYWRfdGVzdHModm9pZClcXG4ge1xcbi1cXHRERUZJTkVfSURBKGlkYSk7XFxuK1xcdHN0cnVjdCBpZGEgaWRhO1xcbiBcXHRwdGhyZWFkX3QgdGhyZWFkc1syMF07XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0aWRhX2luaXQoXFx1MDAyNmlkYSk7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0aHJlYWRzKTsgaSsrKVxcbiBcXHRcXHRpZiAocHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZHNbaV0sIE5VTEwsIGlkYV9yYW5kb21fZm4sIE5VTEwpKSB7XFxuIFxcdFxcdFxcdHBlcnJvcihcXFwiY3JlYXRpbmcgaWRhIHRocmVhZFxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXFxuaW5kZXggZDk2N2U3NmEzYzA2NS4uYmZlNGI4NjI2YzQyOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXFxuQEAgLTM2MDIyLDEwICszNjAyMiwxMiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfZXJhc2VfcmViYWxhbmNlKHN0cnVjdCBtYXBsZV90cmVlICptdClcXG4gXFxuIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19tdHJlZV9kdXAoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbiB7XFxuLVxcdERFRklORV9NVFJFRShuZXcpO1xcbitcXHRzdHJ1Y3QgbWFwbGVfdHJlZSBuZXc7XFxuIFxcdGludCBpLCBqLCByZXQsIGNvdW50ID0gMDtcXG4gXFx0dW5zaWduZWQgaW50IHJhbmRfc2VlZCA9IDE3LCByYW5kO1xcbiBcXG4rXFx0bXRfaW5pdChcXHUwMDI2bmV3KTtcXG4rXFxuIFxcdC8qIHN0b3JlIGEgdmFsdWUgYXQgWzAsIDBdICovXFxuIFxcdG10X2luaXRfZmxhZ3MobXQsIDApO1xcbiBcXHRtdHJlZV9zdG9yZV9yYW5nZShtdCwgMCwgMCwgeGFfbWtfdmFsdWUoMCksIEdGUF9LRVJORUwpO1xcbkBAIC0zNjMxOSw3ICszNjMyMSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3ZtYV9tb2RpZmljYXRpb24oc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbiB2b2lkIGZhcm1lcl90ZXN0cyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlO1xcbi1cXHRERUZJTkVfTVRSRUUodHJlZSk7XFxuK1xcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XFxuK1xcbitcXHRtdF9pbml0KFxcdTAwMjZ0cmVlKTtcXG4gXFxuIFxcdG10X2R1bXAoXFx1MDAyNnRyZWUsIG10X2R1bXBfZGVjKTtcXG4gXFxuQEAgLTM2NDMyLDkgKzM2NDM2LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9sYXN0X2luZGV4KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBzdGF0aWMgdm9pZCB0ZXN0X3NwYW5uaW5nX3N0b3JlX3JlZ3Jlc3Npb24odm9pZClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZyb20gPSAwLCB0byA9IDA7XFxuLVxcdERFRklORV9NVFJFRSh0cmVlKTtcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgdHJlZTtcXG4gXFx0TUFfU1RBVEUobWFzLCBcXHUwMDI2dHJlZSwgMCwgMCk7XFxuIFxcbitcXHRtdF9pbml0KFxcdTAwMjZ0cmVlKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEJ1aWxkIGEgMy1sZXZlbCB0cmVlLiBXZSByZXF1aXJlIGEgcGFyZW50IG5vZGUgYmVsb3cgdGhlIHJvb3Qgbm9kZVxcbiBcXHQgKiBhbmQgMiBsZWFmIG5vZGVzIHVuZGVyIGl0LCBzbyB3ZSBjYW4gc3BhbiB0aGUgZW50aXJldHkgb2YgdGhlIHJpZ2h0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjExLjA5MzQ3OTI2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTYyOTU3NTc2ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEFTU0VSVF9TVEFUSUNfU1RPUkFHRSgpLCB3aGljaCBpcyBhIHB1cmVseSBjb21waWxlLXRpbWUgc3RhdGljIGNoZWNrIGVuZm9yY2luZyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBvbiBERUZJTkVfSURBIGFuZCBERUZJTkVfTVRSRUUgZGVjbGFyYXRpb25zLiBJdCBlbWl0cyBubyBydW50aW1lIGluc3RydWN0aW9ucywgZGVmZW5zaXZlIGFzc2VydGlvbnMsIG9yIGNvbnRyb2wtZmxvdyBtb2RpZmljYXRpb25zLiBUaGUgY2hhbmdlcyBpbiB0b29scy8gYWZmZWN0IG9ubHkgdXNlci1zcGFjZSB0ZXN0cywgYW5kIHRoZSBjaGFuZ2UgaW4gbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGFkanVzdHMgYSBzdGFuZGFsb25lIHRlc3QgbW9kdWxlIChleGVjdXRlZCBvbmx5IG9uIG1vZHVsZSBpbml0L2Jvb3QgYW5kIGltbWVkaWF0ZWx5IHVubG9hZGVkKSB0byBjb25mb3JtIHRvIHRoZSBjb21waWxlLXRpbWUgY2hlY2sgd2l0aG91dCBhbHRlcmluZyBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuIFRodXMsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd29ydGggZnV6emluZyBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjNhNDBhOGFkNDNkMWZmZjkyN2UzODhkMTdkMmFiMmQ2N2Q3YjliZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIyOjM3OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oXG5pbmRleCBjYjJmNjA1MGJkZjdkLi5lZjkwMzZmYTU0MTNkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhcbkBAIC0yNzUsNiArMjc1LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqb2Zmc2V0X3RvX3B0cihjb25zdCBpbnQgKm9mZilcbiAjZGVmaW5lIF9fQUREUkVTU0FCTEUoc3ltKSBcXFxuIFx0X19fQUREUkVTU0FCTEUoc3ltLCBfX3NlY3Rpb24oXCIuZGlzY2FyZC5hZGRyZXNzYWJsZVwiKSlcbiBcbisvKiBFbmZvcmNlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiAqL1xuKyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXG4rXHRzdGF0aWMgdHlwZW9mKG5hbWUpICogY29uc3QgX19hbHdheXNfdW51c2VkIFxcXG4rXHRcdG5hbWUjI19zdG9yYWdlX2NoZWNrID0gXHUwMDI2KG5hbWUpXG4rXG4gLypcbiAgKiBUaGlzIHJldHVybnMgYSBjb25zdGFudCBleHByZXNzaW9uIHdoaWxlIGRldGVybWluaW5nIGlmIGFuIGFyZ3VtZW50IGlzXG4gICogYSBjb25zdGFudCBleHByZXNzaW9uLCBtb3N0IGltcG9ydGFudGx5IHdpdGhvdXQgZXZhbHVhdGluZyB0aGUgYXJndW1lbnQuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZHIuaCBiL2luY2x1ZGUvbGludXgvaWRyLmhcbmluZGV4IDc4OWUyM2U2NzQ0NDEuLmUyYTRiNjI5ODUxMWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lkci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lkci5oXG5AQCAtMTYsNiArMTYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gXG4gc3RydWN0IGlkciB7XG4gXHRzdHJ1Y3QgcmFkaXhfdHJlZV9yb290XHRpZHJfcnQ7XG5AQCAtMjY5LDcgKzI3MCw5IEBAIHN0cnVjdCBpZGEge1xuICNkZWZpbmUgSURBX0lOSVQobmFtZSlcdHtcdFx0XHRcdFx0XHRcXFxuIFx0LnhhID0gWEFSUkFZX0lOSVQobmFtZSwgSURBX0lOSVRfRkxBR1MpXHRcdFx0XHRcXFxuIH1cbi0jZGVmaW5lIERFRklORV9JREEobmFtZSlcdHN0cnVjdCBpZGEgbmFtZSA9IElEQV9JTklUKG5hbWUpXG4rI2RlZmluZSBERUZJTkVfSURBKG5hbWUpXHRcdFx0XHRcdFx0XHRcXFxuK1x0c3RydWN0IGlkYSBuYW1lID0gSURBX0lOSVQobmFtZSk7XHRcdFx0XHRcdFxcXG4rXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbiBcbiBpbnQgaWRhX2FsbG9jX3JhbmdlKHN0cnVjdCBpZGEgKiwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwgZ2ZwX3QpO1xuIHZvaWQgaWRhX2ZyZWUoc3RydWN0IGlkYSAqLCB1bnNpZ25lZCBpbnQgaWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbmluZGV4IGU1OTVhZTVjZDBlZWQuLmUzMGU1N2Y1ZjNkZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbkBAIC05LDYgKzksNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gXG5AQCAtMjk3LDcgKzI5OCw4IEBAIHN0cnVjdCBtYXBsZV90cmVlIHtcbiAjZW5kaWZcbiBcbiAjZGVmaW5lIERFRklORV9NVFJFRShuYW1lKVx0XHRcdFx0XHRcdFxcXG4tXHRzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKVxuK1x0c3RydWN0IG1hcGxlX3RyZWUgbmFtZSA9IE1UUkVFX0lOSVQobmFtZSwgMCk7XHRcdFxcXG4rXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbiBcbiAjZGVmaW5lIG10cmVlX2xvY2sobXQpXHRcdHNwaW5fbG9jaygoXHUwMDI2KG10KS1cdTAwM2VtYV9sb2NrKSlcbiAjZGVmaW5lIG10cmVlX2xvY2tfbmVzdGVkKG1hcywgc3ViY2xhc3MpIFxcXG5kaWZmIC0tZ2l0IGEvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGIvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXG5pbmRleCBiMGIwNzI3MGNlN2MzLi4wNmY3N2ZiMzE3OWZjIDEwMDY0NFxuLS0tIGEvbGliL2ludGVydmFsX3RyZWVfdGVzdC5jXG4rKysgYi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcbkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RhdGljIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKVxuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgbGFzdDtcbiBcdHN0cnVjdCBpbnRlcnZhbF90cmVlX3NwYW5faXRlciBzcGFuLCBtYXNfc3BhbjtcbiBcbi1cdERFRklORV9NVFJFRSh0cmVlKTtcbitcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XG4gXG4gXHRNQV9TVEFURShtYXMsIFx1MDAyNnRyZWUsIDAsIDApO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuaW5kZXggZjJmNTRiMDM4MTY4MC4uMDNlY2Y5MDg2NjQzNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaFxuKysrIGIvdG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oXG5AQCAtNzMsNiArNzMsMTEgQEBcbiAjIGRlZmluZSBfX3NhbWVfdHlwZShhLCBiKSBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihhKSwgdHlwZW9mKGIpKVxuICNlbmRpZlxuIFxuKy8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovXG4rI2RlZmluZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSkgXFxcbitcdHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgXFxcbitcdFx0bmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcdTAwMjYobmFtZSlcbitcbiAvKlxuICAqIFRoaXMgcmV0dXJucyBhIGNvbnN0YW50IGV4cHJlc3Npb24gd2hpbGUgZGV0ZXJtaW5pbmcgaWYgYW4gYXJndW1lbnQgaXNcbiAgKiBhIGNvbnN0YW50IGV4cHJlc3Npb24sIG1vc3QgaW1wb3J0YW50bHkgd2l0aG91dCBldmFsdWF0aW5nIHRoZSBhcmd1bWVudC5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jXG5pbmRleCA5NDUxNDRlOTg1MDcyLi42ZmNiYTViNTg3MGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL2lkci10ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jXG5AQCAtNDYwLDkgKzQ2MCwxMSBAQCB2b2lkIGlkYV9kdW1wKHN0cnVjdCBpZGEgKik7XG4gICovXG4gdm9pZCBpZGFfY2hlY2tfbm9tZW0odm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4rXHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdGludCBpZDtcbiBcbitcdGlkYV9pbml0KFx1MDAyNmlkYSk7XG4rXG4gXHRpZCA9IGlkYV9hbGxvY19taW4oXHUwMDI2aWRhLCAyNTYsIEdGUF9OT1dBSVQpO1xuIFx0SURBX0JVR19PTihcdTAwMjZpZGEsIGlkICE9IC1FTk9NRU0pO1xuIFx0aWQgPSBpZGFfYWxsb2NfbWluKFx1MDAyNmlkYSwgMVVMIFx1MDAzY1x1MDAzYyAzMCwgR0ZQX05PV0FJVCk7XG5AQCAtNDc1LDkgKzQ3NywxMSBAQCB2b2lkIGlkYV9jaGVja19ub21lbSh2b2lkKVxuICAqL1xuIHZvaWQgaWRhX2NoZWNrX2NvbnZfdXNlcih2b2lkKVxuIHtcbi1cdERFRklORV9JREEoaWRhKTtcbitcdHN0cnVjdCBpZGEgaWRhO1xuIFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuK1x0aWRhX2luaXQoXHUwMDI2aWRhKTtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwMDA7IGkrKykge1xuIFx0XHRpbnQgaWQgPSBpZGFfYWxsb2MoXHUwMDI2aWRhLCBHRlBfTk9XQUlUKTtcbiBcdFx0aWYgKGlkID09IC1FTk9NRU0pIHtcbkBAIC00OTYsMTEgKzUwMCwxMyBAQCB2b2lkIGlkYV9jaGVja19jb252X3VzZXIodm9pZClcbiBcbiB2b2lkIGlkYV9jaGVja19yYW5kb20odm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4rXHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdERFQ0xBUkVfQklUTUFQKGJpdG1hcCwgMjA0OCk7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdHRpbWVfdCBzID0gdGltZShOVUxMKTtcbiBcbitcdGlkYV9pbml0KFx1MDAyNmlkYSk7XG4rXG4gIHJlcGVhdDpcbiBcdG1lbXNldChiaXRtYXAsIDAsIHNpemVvZihiaXRtYXApKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDAwMDsgaSsrKSB7XG5AQCAtNTIyLDkgKzUyOCwxMSBAQCB2b2lkIGlkYV9jaGVja19yYW5kb20odm9pZClcbiBcbiB2b2lkIGlkYV9hbGxvY19mcmVlX3Rlc3Qodm9pZClcbiB7XG4tXHRERUZJTkVfSURBKGlkYSk7XG4rXHRzdHJ1Y3QgaWRhIGlkYTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbitcdGlkYV9pbml0KFx1MDAyNmlkYSk7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwMDsgaSsrKVxuIFx0XHRhc3NlcnQoaWRhX2FsbG9jX21heChcdTAwMjZpZGEsIDIwMDAwLCBHRlBfS0VSTkVMKSA9PSBpKTtcbiBcdGFzc2VydChpZGFfYWxsb2NfcmFuZ2UoXHUwMDI2aWRhLCA1LCAzMCwgR0ZQX0tFUk5FTCkgXHUwMDNjIDApO1xuQEAgLTU3NiwxMCArNTg0LDEyIEBAIHN0YXRpYyB2b2lkICppZGFfbGVha19mbih2b2lkICphcmcpXG4gXG4gdm9pZCBpZGFfdGhyZWFkX3Rlc3RzKHZvaWQpXG4ge1xuLVx0REVGSU5FX0lEQShpZGEpO1xuK1x0c3RydWN0IGlkYSBpZGE7XG4gXHRwdGhyZWFkX3QgdGhyZWFkc1syMF07XG4gXHRpbnQgaTtcbiBcbitcdGlkYV9pbml0KFx1MDAyNmlkYSk7XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRocmVhZHMpOyBpKyspXG4gXHRcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzW2ldLCBOVUxMLCBpZGFfcmFuZG9tX2ZuLCBOVUxMKSkge1xuIFx0XHRcdHBlcnJvcihcImNyZWF0aW5nIGlkYSB0aHJlYWRcIik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggZDk2N2U3NmEzYzA2NS4uYmZlNGI4NjI2YzQyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuQEAgLTM2MDIyLDEwICszNjAyMiwxMiBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfZXJhc2VfcmViYWxhbmNlKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiBcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfbXRyZWVfZHVwKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiB7XG4tXHRERUZJTkVfTVRSRUUobmV3KTtcbitcdHN0cnVjdCBtYXBsZV90cmVlIG5ldztcbiBcdGludCBpLCBqLCByZXQsIGNvdW50ID0gMDtcbiBcdHVuc2lnbmVkIGludCByYW5kX3NlZWQgPSAxNywgcmFuZDtcbiBcbitcdG10X2luaXQoXHUwMDI2bmV3KTtcbitcbiBcdC8qIHN0b3JlIGEgdmFsdWUgYXQgWzAsIDBdICovXG4gXHRtdF9pbml0X2ZsYWdzKG10LCAwKTtcbiBcdG10cmVlX3N0b3JlX3JhbmdlKG10LCAwLCAwLCB4YV9ta192YWx1ZSgwKSwgR0ZQX0tFUk5FTCk7XG5AQCAtMzYzMTksNyArMzYzMjEsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja192bWFfbW9kaWZpY2F0aW9uKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiB2b2lkIGZhcm1lcl90ZXN0cyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlO1xuLVx0REVGSU5FX01UUkVFKHRyZWUpO1xuK1x0c3RydWN0IG1hcGxlX3RyZWUgdHJlZTtcbitcbitcdG10X2luaXQoXHUwMDI2dHJlZSk7XG4gXG4gXHRtdF9kdW1wKFx1MDAyNnRyZWUsIG10X2R1bXBfZGVjKTtcbiBcbkBAIC0zNjQzMiw5ICszNjQzNiwxMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfbGFzdF9pbmRleChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBzdGF0aWMgdm9pZCB0ZXN0X3NwYW5uaW5nX3N0b3JlX3JlZ3Jlc3Npb24odm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZyb20gPSAwLCB0byA9IDA7XG4tXHRERUZJTkVfTVRSRUUodHJlZSk7XG4rXHRzdHJ1Y3QgbWFwbGVfdHJlZSB0cmVlO1xuIFx0TUFfU1RBVEUobWFzLCBcdTAwMjZ0cmVlLCAwLCAwKTtcbiBcbitcdG10X2luaXQoXHUwMDI2dHJlZSk7XG4rXG4gXHQvKlxuIFx0ICogQnVpbGQgYSAzLWxldmVsIHRyZWUuIFdlIHJlcXVpcmUgYSBwYXJlbnQgbm9kZSBiZWxvdyB0aGUgcm9vdCBub2RlXG4gXHQgKiBhbmQgMiBsZWFmIG5vZGVzIHVuZGVyIGl0LCBzbyB3ZSBjYW4gc3BhbiB0aGUgZW50aXJldHkgb2YgdGhlIHJpZ2h0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozNzoxMS4wOTM0ODExOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTM3NDM0MDIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRyaWFnZTogUGF0Y2ggU2VyaWVzIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSB0YXNrIGl0c2VsZiBpcyBiZW5pZ24sIGZvY3VzaW5nIG9uIGtlcm5lbCBwYXRjaCByZXZpZXcgZm9yIGZ1enppbmcgdHJpYWdlLCBzbyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLiBMZXQncyBkaWcgaW50byB0aGUgZGlmZiB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLlxuXG5UaGUgYnVsayBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAuIFRoaXMgbWFjcm8gZW5mb3JjZXMgc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gZm9yIGNlcnRhaW4gZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpY2FsbHkgYGlkYWAgYW5kIGBtYXBsZV90cmVlYCwgYXMgc2VlbiBpbiBgaW5jbHVkZS9saW51eC9pZHIuaGAgYW5kIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGAuIEl0IGxvb2tzIGxpa2UgaXQgaXMgdG8gY2hlY2sgZm9yIGFjY2lkZW50YWwgdXNlIG9mIHRoZXNlIHN0cnVjdHVyZXMgaW4gZnVuY3Rpb25zIHRoYXQgYXJlbid0IGV4cGVjdGVkIHRvIHVzZSBzdGF0aWMgc3RvcmFnZS5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0LCBpbiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCwgSSBzZWUgYSAqY2hhbmdlKiByZWxhdGVkIHRvIGBERUZJTkVfTVRSRUUodHJlZSlgLiBJdCdzIGJlZW4gYWx0ZXJlZCB0byBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZTtgLiBJbW1lZGlhdGVseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBjaGFuZ2UgaXMganVzdCBhIGRpcmVjdCByZXBsYWNlbWVudCwgb3IgaWYgc29tZXRoaW5nIGVsc2UgaXMgZ29pbmcgb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgdHJlZWAgaXMgKmluaXRpYWxpemVkKiBsYXRlciBpbiB0aGUgZmlsZSBpZiBpdCdzIG5vIGxvbmdlciBiZWluZyBpbml0aWFsaXplZCBieSB0aGUgYERFRklORV9NVFJFRWAgbWFjcm8uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIHRvIGxvb2sgZm9yIHRoYXQgaW5pdGlhbGl6YXRpb24uIEknbGwgcHJvYmFibHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBiZSBxdWljayBhYm91dCBpdC5cblxuRmluYWxseSwgdGhlcmUgYXJlIHNvbWUgdG9vbC1yZWxhdGVkIGNoYW5nZXMgaW4gYHRvb2xzL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaGAsIGB0b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvaWRyLXRlc3QuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNgLiBUaGV5J3JlIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG1hY3JvIGl0c2VsZiwgYnV0IEknbGwgbmVlZCB0byBsb29rIGF0IHRoZW0gc2VwYXJhdGVseSBpZiB0aGV5IGFyZSBuZWNlc3NhcnkgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjI2LjQ2NzgyNDk1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0XFxuIDI0MTpcXHRzdGF0aWMgaW50IHNwYW5faXRlcmF0aW9uX2NoZWNrKHZvaWQpXFxuIDI0MjpcXHR7XFxuIDI0MzpcXHRcXHRpbnQgaSwgaiwgaztcXG4gMjQ0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGxhc3Q7XFxuIDI0NTpcXHRcXHRzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9zcGFuX2l0ZXIgc3BhbiwgbWFzX3NwYW47XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdFxcdHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7XFxuIDI0ODpcXHRcXG4gMjQ5OlxcdFxcdE1BX1NUQVRFKG1hcywgXFx1MDAyNnRyZWUsIDAsIDApO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRwcmludGsoS0VSTl9BTEVSVCBcXFwiaW50ZXJ2YWwgdHJlZSBzcGFuIGl0ZXJhdGlvblxcXFxuXFxcIik7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzZWFyY2hfbG9vcHM7IGkrKykge1xcbiAyNTQ6XFx0XFx0XFx0LyogSW5pdGlhbGl6ZSBpbnRlcnZhbCB0cmVlIGZvciBlYWNoIHJvdW5kICovXFxuIDI1NTpcXHRcXHRcXHRpbml0KCk7XFxuIDI1NjpcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2Mgbm5vZGVzOyBqKyspXFxuIDI1NzpcXHRcXHRcXHRcXHRpbnRlcnZhbF90cmVlX2luc2VydChub2RlcyArIGosIFxcdTAwMjZyb290KTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0XFx0LyogUHV0IGFsbCB0aGUgcmFuZ2UgaW50byBtYXBsZSB0cmVlICovXFxuIDI2MDpcXHRcXHRcXHRtdF9pbml0X2ZsYWdzKFxcdTAwMjZ0cmVlLCBNVF9GTEFHU19BTExPQ19SQU5HRSk7XFxuIDI2MTpcXHRcXHRcXHRtdF9zZXRfaW5fcmN1KFxcdTAwMjZ0cmVlKTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ub2RlczsgaisrKVxcbiAyNjQ6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKG10cmVlX3N0b3JlX3JhbmdlKFxcdTAwMjZ0cmVlLCBub2Rlc1tqXS5zdGFydCxcXG4gMjY1OlxcdFxcdFxcdFxcdFxcdFxcdG5vZGVzW2pdLmxhc3QsIG5vZGVzICsgaiwgR0ZQX0tFUk5FTCkpO1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRcXHQvKiBMZXQncyB0cnkgbnNlYXJjaGVzIGRpZmZlcmVudCByYW5nZXMgKi9cXG4gMjY4OlxcdFxcdFxcdGZvciAoayA9IDA7IGsgXFx1MDAzYyBuc2VhcmNoZXM7IGsrKykge1xcbiAyNjk6XFx0XFx0XFx0XFx0LyogVHJ5IHdob2xlIHJhbmdlIG9uY2UgKi9cXG4gMjcwOlxcdFxcdFxcdFxcdGlmICghaykge1xcbiAyNzE6XFx0XFx0XFx0XFx0XFx0c3RhcnQgPSAwVUw7XFxuIDI3MjpcXHRcXHRcXHRcXHRcXHRsYXN0ID0gVUxPTkdfTUFYO1xcbiAyNzM6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjc0OlxcdFxcdFxcdFxcdFxcdGxhc3QgPSAocHJhbmRvbV91MzJfc3RhdGUoXFx1MDAyNnJuZCkgXFx1MDAzZVxcdTAwM2UgNCkgJSBtYXhfZW5kcG9pbnQ7XFxuIDI3NTpcXHRcXHRcXHRcXHRcXHRzdGFydCA9IChwcmFuZG9tX3UzMl9zdGF0ZShcXHUwMDI2cm5kKSBcXHUwMDNlXFx1MDAzZSA0KSAlIGxhc3Q7XFxuIDI3NjpcXHRcXHRcXHRcXHR9XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdFxcdFxcdG1hc19zcGFuLmZpcnN0X2luZGV4ID0gc3RhcnQ7XFxuIDI3OTpcXHRcXHRcXHRcXHRtYXNfc3Bhbi5sYXN0X2luZGV4ID0gbGFzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6MjYuNDY3ODk0NTE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzIzMzIyMjg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbnRlcnZhbCBUcmVlIFRlc3QgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHNwYW5faXRlcmF0aW9uX2NoZWNrYCBmdW5jdGlvbiB3aXRoaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBpbml0aWFsaXphdGlvbiBvZiBgdHJlZWAgd2l0aGluIHRoZSBsb29wOiBgbXRfaW5pdF9mbGFncyhcdTAwMjZ0cmVlLCBNVF9GTEFHU19BTExPQ19SQU5HRSlgIG9uIGxpbmUgMjYwLiAqSG9sZCBvbiBhIHNlY29uZCosIGlzbid0IGB0cmVlYCBhbHJlYWR5IGluaXRpYWxpemVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIHZhcmlhYmxlLlxuXG5GaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCB0aGlzIGZpbGUgbW9yZSB0aG9yb3VnaGx5LiBXaGF0IGV4YWN0bHkgKmlzKiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYD8gQSBxdWljayByZWZyZXNoZXIgd291bGQgYmUgaGVscGZ1bCBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGlzIGNvZGUsIGFuZCBob3cgaXTigJlzIGJlaW5nIGJ1aWx0IGFuZCB1c2VkLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaG93IGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIHB1bGwgdXAgdGhlIE1ha2VmaWxlIGFuZCBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgaG93IGBpbnRlcnZhbF90cmVlX3Rlc3RgIGlzIGJ1aWx0IGFuZCB1c2VkIHdpdGhpbiB0aGUgcHJvamVjdC4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQ2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6MjkuNzAxMTE5ODkzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzA1OTQ0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50ZXJ2YWxfdHJlZV90ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9NYWtlZmlsZT0yOTI9b2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSArPSByYnRyZWVfdGVzdC5vXFxubGliL01ha2VmaWxlOjI5MzpvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSArPSBpbnRlcnZhbF90cmVlX3Rlc3Qub1xcbmxpYi9NYWtlZmlsZS0yOTQtXFxuLS1cXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmM9MzEwPXN0YXRpYyBpbmxpbmUgaW50IHNwYW5faXRlcmF0aW9uX2NoZWNrKHZvaWQpIHtyZXR1cm4gMDsgfVxcbi0tXFxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTMxMi1cXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmM6MzEzOnN0YXRpYyBpbnQgaW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQodm9pZClcXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMzE0LXtcXG4tLVxcbmxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYy0zNTgtXFxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jOjM1OTpzdGF0aWMgdm9pZCBpbnRlcnZhbF90cmVlX3Rlc3RfZXhpdCh2b2lkKVxcbmxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYy0zNjAte1xcbi0tXFxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2My1cXG5saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmM6MzY0Om1vZHVsZV9pbml0KGludGVydmFsX3RyZWVfdGVzdF9pbml0KVxcbmxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuYzozNjU6bW9kdWxlX2V4aXQoaW50ZXJ2YWxfdHJlZV90ZXN0X2V4aXQpXFxubGliL2ludGVydmFsX3RyZWVfdGVzdC5jLTM2Ni1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL01ha2VmaWxlLTQtXFxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGU6NTpUQVJHRVRTID0gcmJ0cmVlX3Rlc3QgaW50ZXJ2YWxfdHJlZV90ZXN0XFxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGUtNi1PRklMRVMgPSAkKFNIQVJFRF9PRklMRVMpIHJidHJlZS1zaGltLm8gaW50ZXJ2YWxfdHJlZS1zaGltLm8gbWFwbGUtc2hpbS5vXFxuLS1cXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZT0yOD1pbnRlcnZhbF90cmVlLXNoaW0ubzogQ0ZMQUdTICs9IC1EQ09ORklHX0lOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxudG9vbHMvdGVzdGluZy9yYnRyZWUvTWFrZWZpbGU6Mjk6aW50ZXJ2YWxfdHJlZV90ZXN0Lm86IFxcdC4uLy4uLy4uL2xpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY1xcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL01ha2VmaWxlOjMwOmludGVydmFsX3RyZWVfdGVzdC5vOiBDRkxBR1MgKz0gLURDT05GSUdfSU5URVJWQUxfVFJFRV9TUEFOX0lURVJcXG50b29scy90ZXN0aW5nL3JidHJlZS9NYWtlZmlsZS0zMS1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTEwLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjExOiNpbmNsdWRlIFxcXCIuLi8uLi8uLi9saWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcXFwiXFxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmMtMTItXFxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmM9MTM9aW50IHVzYWdlKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYy0yNS1cXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYzoyNjp2b2lkIGludGVydmFsX3RyZWVfdGVzdHModm9pZClcXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYy0yNy17XFxudG9vbHMvdGVzdGluZy9yYnRyZWUvaW50ZXJ2YWxfdHJlZV90ZXN0LmM6Mjg6XFx0aW50ZXJ2YWxfdHJlZV90ZXN0X2luaXQoKTtcXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYzoyOTpcXHRpbnRlcnZhbF90cmVlX3Rlc3RfZXhpdCgpO1xcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTMwLX1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jPTMyPWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jLTU1LVxcdG1hcGxlX3RyZWVfaW5pdCgpO1xcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL2ludGVydmFsX3RyZWVfdGVzdC5jOjU2OlxcdGludGVydmFsX3RyZWVfdGVzdHMoKTtcXG50b29scy90ZXN0aW5nL3JidHJlZS9pbnRlcnZhbF90cmVlX3Rlc3QuYy01Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL3Rlc3QuaD0zPXZvaWQgcmJ0cmVlX3Rlc3RzKHZvaWQpO1xcbnRvb2xzL3Rlc3RpbmcvcmJ0cmVlL3Rlc3QuaDo0OnZvaWQgaW50ZXJ2YWxfdHJlZV90ZXN0cyh2b2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6MzEuODcxNzI1NzAxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgxMzEzMzQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhpcyBDb21taXQ6IERpdmluZyBpbnRvIHRoZSBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdW5kZXJzdGFuZCB0aGUgKndoeSouIEZvcmdldCBqdW1waW5nIHN0cmFpZ2h0IGludG8gdGhlIGRpZmY7IEkgbmVlZCB0aGUgY29udGV4dC4gTGV0IG1lIGNoZWNrIHRoZSBjb21taXQgZGVzY3JpcHRpb24uIFdoYXQgd2FzIHRoZSB0aGlua2luZyBiZWhpbmQgdGhpcz8gV2hhdCBwcm9ibGVtIHdhcyBpdCB0cnlpbmcgdG8gc29sdmU/IE9yIG1heWJlIHRoZXJlJ3MgYSBnb29kIEdpdCBsb2cgbWVzc2FnZSBJIGNhbiBwZXJ1c2UuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgc3RyYXRlZ3kgaGVyZSB3aWxsIGhlbHAgbWUgdG8gcXVpY2tseSBncmFzcCB3aGF0IHRoZSBkZXZlbG9wZXIgd2FzIGdvaW5nIGZvciwgYW5kIHRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcy4gV2l0aG91dCB0aGF0IGNydWNpYWwgaW5mb3JtYXRpb24sIEkgYW0ganVzdCBndWVzc2luZyBhYm91dCB0aGUgbW90aXZhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjMzLjY4NDg2MTk4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQyMTQxMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFTU0VSVF9TVEFUSUNfU1RPUkFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmg9MjU4PXN0YXRpYyBpbmxpbmUgdm9pZCAqb2Zmc2V0X3RvX3B0cihjb25zdCBpbnQgKm9mZilcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGlsZXIuaC0yNzgtLyogRW5mb3JjZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gKi9cXG5pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmg6Mjc5OiNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgtMjgwLVxcdHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9pZHIuaD0yNjQ9c3RydWN0IGlkYSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lkci5oLTI3NC1cXHRzdHJ1Y3QgaWRhIG5hbWUgPSBJREFfSU5JVChuYW1lKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9pZHIuaDoyNzU6XFx0QVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpXFxuaW5jbHVkZS9saW51eC9pZHIuaC0yNzYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaD0yNjE9c3RydWN0IG1hcGxlX3RyZWUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtMzAxLVxcdHN0cnVjdCBtYXBsZV90cmVlIG5hbWUgPSBNVFJFRV9JTklUKG5hbWUsIDApO1xcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaDozMDI6XFx0QVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpXFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtMzAzLVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oLTc2LS8qIEVuZm9yY2Ugc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICovXFxudG9vbHMvaW5jbHVkZS9saW51eC9jb21waWxlci5oOjc3OiNkZWZpbmUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKG5hbWUpIFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgtNzgtXFx0c3RhdGljIHR5cGVvZihuYW1lKSAqIGNvbnN0IF9fYWx3YXlzX3VudXNlZCBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjM1LjYyNzAxMDY3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NTI0MzcwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBBU1NFUlRfU1RBVElDX1NUT1JBR0UgTWFjcm8gYW5kIFBhdGNoIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRShuYW1lKWAgbWFjcm8uLi4gaXQncyBhIGNsZXZlciB0cmljay4gRXNzZW50aWFsbHksIGl0IGZvcmNlcyBhIGNvbXBpbGUtdGltZSBjaGVjayB0byBlbnN1cmUgYSB2YXJpYWJsZSBgbmFtZWAgaGFzIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLiBUaGUgbWFjcm8gY3JlYXRlcyBhIGBzdGF0aWNgIHBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlLiBJbiBDLCB5b3UgKmNhbid0KiBpbml0aWFsaXplIGEgYHN0YXRpY2AgcG9pbnRlciB3aXRoIHRoZSBhZGRyZXNzIG9mIGFuIGF1dG9tYXRpYyAoc3RhY2spIHZhcmlhYmxlOyB0aGF0J3MgYSBjb25zdGFudCBpbml0aWFsaXplciByZXF1aXJlbWVudC4gU28sIGlmIGBuYW1lYCBpcyBhIHN0YWNrIHZhcmlhYmxlIHdpdGhpbiBhIGZ1bmN0aW9uLCB0aGUgY29tcGlsZXIgd2lsbCByaWdodGZ1bGx5IGJhcmYgd2l0aCBhIGNvbXBsYWludCBhYm91dCBhbiBcImluaXRpYWxpemVyIGVsZW1lbnQgaXMgbm90IGNvbnN0YW50XCIuIEJyaWxsaWFudC4gSWYgYG5hbWVgIGlzIGRlY2xhcmVkIHN0YXRpYywgb3IgYXQgZmlsZSBzY29wZSwgdGhlbiBpdCBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCwgYW5kIHRoZSBjaGVjayBwYXNzZXMuXG5cblNvLCB0aGlzIG1hY3JvIGlzIGEgc3RhdGljIGFzc2VydGlvbiwgYSBjb21waWxlLXRpbWUgY2hlY2suIEl0IGRvZXNuJ3QgZ2VuZXJhdGUgYW55IHJ1bnRpbWUgY29kZSwgYXMgYF9fYWx3YXlzX3VudXNlZGAgd291bGQgZW5zdXJlIHRoZSBjb21waWxlciBvcHRpbWl6ZXMgaXQgb3V0LiBUaGUgcHJpbWFyeSBpbXBhY3QgaXMgdG8gZW5mb3JjZSBwcm9wZXIgc3RvcmFnZSBkdXJhdGlvbiBmb3IgdmFyaWFibGVzIGRlY2xhcmVkIHdpdGggYERFRklORV9JREFgIGFuZCBgREVGSU5FX01UUkVFYC5cblxuTm93LCBsb29raW5nIGF0IHRoZSBjaGFuZ2VzLCB3ZSd2ZSBnb3QgYSBuZXcgbWFjcm8sIGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgLCBpbiBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIHRoZW4gYWRkZWQgdG8gdGhlIGRlZmluaXRpb24gbWFjcm9zIGBERUZJTkVfSURBYCBpbiBgaW5jbHVkZS9saW51eC9pZHIuaGAgYW5kIGBERUZJTkVfTVRSRUVgIGluIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGAuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AuIFRoZSB0ZXN0IGNhc2UgcHJldmlvdXNseSBkZWNsYXJlZCBgREVGSU5FX01UUkVFKHRyZWUpYCBhcyBhIGxvY2FsIHZhcmlhYmxlLiBUaGUgYWRkaXRpb24gb2YgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgdG8gYERFRklORV9NVFJFRWAgbm93ICpmb3JjZXMqIHRoaXMgdG8gYmUgYSBjb21waWxlLXRpbWUgZXJyb3IhIFRoZSB0ZXN0IGNhc2UgKmhhZCogdG8gYmUgY2hhbmdlZCB0byB1c2UgYSBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZWAgdmFyaWFibGUsIGluaXRpYWxpemVkIHdpdGggYG10X2luaXRfZmxhZ3NgLiBUaGlzIGlzIGJ5IGRlc2lnbiwgYW5kIGNvcnJlY3RseSBlbmZvcmNlcyB0aGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgbWFjcm8uXG5cbkFkZGl0aW9uYWxseSwgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgdGhlIHNhbWUgaXNzdWUgd2l0aCBhdXRvbWF0aWMgc3RvcmFnZSB2YXJpYWJsZXMgaW4gdGhlIGBERUZJTkVfSURBYCBtYWNybyBjYXVzZWQgc2ltaWxhciBjaGFuZ2VzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBpbnN0cnVjdGlvbnMsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzLCBcIklzIHRoaXMgYSBjaGFuZ2UgdG8gZXhlY3V0YWJsZSBrZXJuZWwgY29kZSwgYW5kIGRvZXMgaXQgaW50cm9kdWNlIG9yIG1vZGlmeSBhc3NlcnRpb25zP1wiIFdlbGwsIGl0ICpkb2VzKiBtb2RpZnkgZXhlY3V0YWJsZSBjb2RlICh0aGUgdGVzdCBjYXNlcykgYnkgZm9yY2luZyBjaGFuZ2VzIHRvIHRoZSBkZWZpbml0aW9uIG9mIHN0b3JhZ2UuIFRoZSBhc3NlcnRpb24gaXNuJ3QgYSBydW50aW1lIGNoZWNrLCBidXQgYSBjb21waWxlLXRpbWUgYXNzZXJ0aW9uLiBJdCBzdGlsbCBmb3JjZXMgdGhlIGF1dGhvciB0byBjaG9vc2UgdGhlIGNvcnJlY3Qgc3RvcmFnZSBkdXJhdGlvbiwgd2hpY2ggbWF5IGV4cG9zZSBkZXNpZ24gY2hvaWNlcyB0aGF0IGFyZSBub3Qgb2J2aW91cyBhdCBhIGdsYW5jZS5cblxuVGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgY29kZSwgc3BlY2lmaWNhbGx5IHRlc3QgY29kZSBhbmQgc29tZSBvZiB0aGUgY29kZSBkZWZpbml0aW9ucy4gV2UndmUgZ290IGNoYW5nZXMgaW4gY29yZSBrZXJuZWwgaW5jbHVkZSBmaWxlcyB0aGF0IGludHJvZHVjZSB0aGUgY2hlY2suIFRoZSBjaGFuZ2VzIGluIHRoZSB0b29scyBkaXJlY3RvcnkgYW5kIHRoZSB0ZXN0IGNhc2UgYXJlICpkaXJlY3RseSogYSByZXN1bHQgb2YgdGhpcyBtb2RpZmljYXRpb24uIFdoaWxlIGl0IGlzIG5vdCBhIHJ1bnRpbWUgY2hlY2ssIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBuZXcgaW52YXJpYW50IChjb3JyZWN0IHN0b3JhZ2UgZHVyYXRpb24pLCBhbmQgYnkgdGhlIGluc3RydWN0aW9ucywgZXZlbiAqY29tcGlsZS10aW1lKiBhc3NlcnRpb25zIGluICpyZWFjaGFibGUqIGNvZGUgd2FycmFudCBmdXp6aW5nLiBUaGUgdXBkYXRlZCBkZWZpbml0aW9ucyBhcmUgcmVhY2hhYmxlLCBhbmQgdGhlIHRlc3QgY2FzZSBjaGFuZ2VzIHNob3cgaXQgaXMgcmVhY2hhYmxlLlxuXG5TbywgeWVzLCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGluc3RydWN0aW9ucywgdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdGhyb3VnaCBmdXp6aW5nLCBiZWNhdXNlIGl0IG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBieSBlbmZvcmNpbmcgbmV3IGludmFyaWFudHMgYW5kIHRoZSBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBjYXVzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIHRob3NlIGFyZSB2aW9sYXRlZCwgdGhlcmVmb3JlIGl0IGNvdWxkIGV4cG9zZSBkZXNpZ24gaXNzdWVzIG9yIGxhdGVudCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozNzo1MC4xNTEzODUxMzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL2ludGVydmFsX3RyZWVfdGVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZXBhcmFtLmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJ2YWxfdHJlZS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByYW5kb20uaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJpbnRrLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjYXNtL3RpbWV4LmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0bWFwLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFwbGVfdHJlZS5oXFx1MDAzZVxcbiAgMTE6XFx0XFxuICAxMjpcXHQjZGVmaW5lIF9fcGFyYW0odHlwZSwgbmFtZSwgaW5pdCwgbXNnKVxcdFxcdFxcXFxcXG4gIDEzOlxcdFxcdHN0YXRpYyB0eXBlIG5hbWUgPSBpbml0O1xcdFxcdFxcXFxcXG4gIDE0OlxcdFxcdG1vZHVsZV9wYXJhbShuYW1lLCB0eXBlLCAwNDQ0KTtcXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRNT0RVTEVfUEFSTV9ERVNDKG5hbWUsIG1zZyk7XFxuICAxNjpcXHRcXG4gIDE3OlxcdF9fcGFyYW0oaW50LCBubm9kZXMsIDEwMCwgXFxcIk51bWJlciBvZiBub2RlcyBpbiB0aGUgaW50ZXJ2YWwgdHJlZVxcXCIpO1xcbiAgMTg6XFx0X19wYXJhbShpbnQsIHBlcmZfbG9vcHMsIDEwMDAsIFxcXCJOdW1iZXIgb2YgaXRlcmF0aW9ucyBtb2RpZnlpbmcgdGhlIHRyZWVcXFwiKTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0X19wYXJhbShpbnQsIG5zZWFyY2hlcywgMTAwLCBcXFwiTnVtYmVyIG9mIHNlYXJjaGVzIHRvIHRoZSBpbnRlcnZhbCB0cmVlXFxcIik7XFxuICAyMTpcXHRfX3BhcmFtKGludCwgc2VhcmNoX2xvb3BzLCAxMDAwLCBcXFwiTnVtYmVyIG9mIGl0ZXJhdGlvbnMgc2VhcmNoaW5nIHRoZSB0cmVlXFxcIik7XFxuICAyMjpcXHRfX3BhcmFtKGJvb2wsIHNlYXJjaF9hbGwsIGZhbHNlLCBcXFwiU2VhcmNoZXMgd2lsbCBpdGVyYXRlIGFsbCBub2RlcyBpbiB0aGUgdHJlZVxcXCIpO1xcbiAgMjM6XFx0XFxuICAyNDpcXHRfX3BhcmFtKHVpbnQsIG1heF9lbmRwb2ludCwgfjAsIFxcXCJMYXJnZXN0IHZhbHVlIGZvciB0aGUgaW50ZXJ2YWwncyBlbmRwb2ludFxcXCIpO1xcbiAgMjU6XFx0X19wYXJhbSh1bGxvbmcsIHNlZWQsIDMxNDE1OTI2NTM1ODk3OTMyMzhVTEwsIFxcXCJSYW5kb20gc2VlZFxcXCIpO1xcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgc3RydWN0IHJiX3Jvb3RfY2FjaGVkIHJvb3QgPSBSQl9ST09UX0NBQ0hFRDtcXG4gIDI4OlxcdHN0YXRpYyBzdHJ1Y3QgaW50ZXJ2YWxfdHJlZV9ub2RlICpub2RlcyA9IE5VTEw7XFxuICAyOTpcXHRzdGF0aWMgdTMyICpxdWVyaWVzID0gTlVMTDtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0c3RhdGljIHN0cnVjdCBybmRfc3RhdGUgcm5kO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4gIDM0OlxcdHNlYXJjaChzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgKnJvb3QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGFzdClcXG4gIDM1OlxcdHtcXG4gIDM2OlxcdFxcdHN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKm5vZGU7XFxuICAzNzpcXHRcXHR1bnNpZ25lZCBsb25nIHJlc3VsdHMgPSAwO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHRmb3IgKG5vZGUgPSBpbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3Qocm9vdCwgc3RhcnQsIGxhc3QpOyBub2RlO1xcbiAgNDA6XFx0XFx0ICAgICBub2RlID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQobm9kZSwgc3RhcnQsIGxhc3QpKVxcbiAgNDE6XFx0XFx0XFx0cmVzdWx0cysrO1xcbiAgNDI6XFx0XFx0cmV0dXJuIHJlc3VsdHM7XFxuICA0MzpcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdHN0YXRpYyB2b2lkIGluaXQodm9pZClcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdGludCBpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbm5vZGVzOyBpKyspIHtcXG4gIDUwOlxcdFxcdFxcdHUzMiBiID0gKHByYW5kb21fdTMyX3N0YXRlKFxcdTAwMjZybmQpIFxcdTAwM2VcXHUwMDNlIDQpICUgbWF4X2VuZHBvaW50O1xcbiAgNTE6XFx0XFx0XFx0dTMyIGEgPSAocHJhbmRvbV91MzJfc3RhdGUoXFx1MDAyNnJuZCkgXFx1MDAzZVxcdTAwM2UgNCkgJSBiO1xcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHRcXHRub2Rlc1tpXS5zdGFydCA9IGE7XFxuICA1NDpcXHRcXHRcXHRub2Rlc1tpXS5sYXN0ID0gYjtcXG4gIDU1OlxcdFxcdH1cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0LypcXG4gIDU4OlxcdFxcdCAqIExpbWl0IHRoZSBzZWFyY2ggc2NvcGUgdG8gd2hhdCB0aGUgdXNlciBkZWZpbmVkLlxcbiAgNTk6XFx0XFx0ICogT3RoZXJ3aXNlIHdlIGFyZSBtZXJlbHkgbWVhc3VyaW5nIGVtcHR5IHdhbGtzLFxcbiAgNjA6XFx0XFx0ICogd2hpY2ggaXMgcG9pbnRsZXNzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozNzo1MC4xNTE0NzY2MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjgxMDAwODA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBSZW1haW5kZXIgb2YgYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgcmVzdCBvZiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYC4gSSd2ZSBhbHJlYWR5IGV4YW1pbmVkIHNvbWUgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgYW5kIEknbSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHRlc3Qgc3VpdGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkncmUgaGFuZGxpbmcgZWRnZSBjYXNlcywgYm91bmRhcnkgY29uZGl0aW9ucywgYW5kIHBvdGVudGlhbCBlcnJvciBzY2VuYXJpb3MuIEFyZSB0aGV5IHRob3JvdWdobHkgdGVzdGluZyB0aGUgaW5zZXJ0aW9uLCBkZWxldGlvbiwgc2VhcmNoaW5nLCBhbmQgb3ZlcmxhcHBpbmcgaW50ZXJ2YWwgZnVuY3Rpb25hbGl0aWVzPyBJIHdhbnQgdG8gc2VlIGlmIHRoZSB0ZXN0cyBjb3ZlciBhIHdpZGUgcmFuZ2Ugb2YgaW50ZXJ2YWwgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBlbXB0eSBpbnRlcnZhbHMsIHNpbmdsZS1wb2ludCBpbnRlcnZhbHMsIGFuZCBoZWF2aWx5IG92ZXJsYXBwaW5nIGludGVydmFscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHJvYnVzdGx5IHRoZSB0ZXN0cyB2YWxpZGF0ZSB0aGUgdHJlZSdzIGludGVybmFsIGNvbnNpc3RlbmN5IGFmdGVyIGVhY2ggb3BlcmF0aW9uLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0ZWNobmlxdWVzIHRoZXkncmUgdXNpbmcgdG8gc2ltcGxpZnkgdGhlIHRlc3QgY29kZSwgcGVyaGFwcyB0aHJvdWdoIG1hY3JvIHVzYWdlIG9yIGhlbHBlciBmdW5jdGlvbnM/IFVsdGltYXRlbHksIEknbSB0cnlpbmcgdG8gYXNzZXNzIHRoZSBjb21wbGV0ZW5lc3MgYW5kIHF1YWxpdHkgb2YgdGhlc2UgdGVzdHMuIFRoaXMgZXhhbWluYXRpb24gd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWRlbmNlIGxldmVsIHRoaXMgcHJvamVjdCBoYXMgaW4gaXRzIGludGVydmFsIHRyZWUgaW1wbGVtZW50YXRpb24uIEknbSBrZWVuIHRvIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZW5lc3Mgb2YgdGhpcyB0ZXN0aW5nIGFwcHJvYWNoLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50IG9yLCBjb252ZXJzZWx5LCBzb2xpZCBkZXNpZ24gY2hvaWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM3OjUyLjk2MTQ4Nzg3M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcbiAzMDE6XFx0XFx0XFx0LyogQ2xlYW51cCBtYXBsZSB0cmVlIGZvciBlYWNoIHJvdW5kICovXFxuIDMwMjpcXHRcXHRcXHRtdHJlZV9kZXN0cm95KFxcdTAwMjZ0cmVlKTtcXG4gMzAzOlxcdFxcdFxcdC8qIENsZWFudXAgaW50ZXJ2YWwgdHJlZSBmb3IgZWFjaCByb3VuZCAqL1xcbiAzMDQ6XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5ub2RlczsgaisrKVxcbiAzMDU6XFx0XFx0XFx0XFx0aW50ZXJ2YWxfdHJlZV9yZW1vdmUobm9kZXMgKyBqLCBcXHUwMDI2cm9vdCk7XFxuIDMwNjpcXHRcXHR9XFxuIDMwNzpcXHRcXHRyZXR1cm4gMDtcXG4gMzA4OlxcdH1cXG4gMzA5OlxcdCNlbHNlXFxuIDMxMDpcXHRzdGF0aWMgaW5saW5lIGludCBzcGFuX2l0ZXJhdGlvbl9jaGVjayh2b2lkKSB7cmV0dXJuIDA7IH1cXG4gMzExOlxcdCNlbmRpZlxcbiAzMTI6XFx0XFxuIDMxMzpcXHRzdGF0aWMgaW50IGludGVydmFsX3RyZWVfdGVzdF9pbml0KHZvaWQpXFxuIDMxNDpcXHR7XFxuIDMxNTpcXHRcXHRpZiAobm5vZGVzIFxcdTAwM2M9IDApIHtcXG4gMzE2OlxcdFxcdFxcdHByX3dhcm4oXFxcIm5ub2RlcyBtdXN0IGJlIHBvc2l0aXZlXFxcXG5cXFwiKTtcXG4gMzE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTg6XFx0XFx0fVxcbiAzMTk6XFx0XFx0aWYgKG5zZWFyY2hlcyBcXHUwMDNjPSAwKSB7XFxuIDMyMDpcXHRcXHRcXHRwcl93YXJuKFxcXCJuc2VhcmNoZXMgbXVzdCBiZSBwb3NpdGl2ZVxcXFxuXFxcIik7XFxuIDMyMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzIyOlxcdFxcdH1cXG4gMzIzOlxcdFxcdGlmIChwZXJmX2xvb3BzIFxcdTAwM2M9IDApIHtcXG4gMzI0OlxcdFxcdFxcdHByX3dhcm4oXFxcInBlcmZfbG9vcHMgbXVzdCBiZSBwb3NpdGl2ZVxcXFxuXFxcIik7XFxuIDMyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzI2OlxcdFxcdH1cXG4gMzI3OlxcdFxcdGlmIChzZWFyY2hfbG9vcHMgXFx1MDAzYz0gMCkge1xcbiAzMjg6XFx0XFx0XFx0cHJfd2FybihcXFwic2VhcmNoX2xvb3BzIG11c3QgYmUgcG9zaXRpdmVcXFxcblxcXCIpO1xcbiAzMjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzMDpcXHRcXHR9XFxuIDMzMTpcXHRcXHRpZiAobWF4X2VuZHBvaW50IFxcdTAwM2MgMikge1xcbiAzMzI6XFx0XFx0XFx0cHJfd2FybihcXFwibWF4X2VuZHBvaW50IG11c3QgYmUgYXQgbGVhc3QgMlxcXFxuXFxcIik7XFxuIDMzMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0bm9kZXMgPSBrbWFsbG9jX29ianMoc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSwgbm5vZGVzKTtcXG4gMzM3OlxcdFxcdGlmICghbm9kZXMpXFxuIDMzODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0cXVlcmllcyA9IGttYWxsb2NfYXJyYXkobnNlYXJjaGVzLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7XFxuIDM0MTpcXHRcXHRpZiAoIXF1ZXJpZXMpIHtcXG4gMzQyOlxcdFxcdFxcdGtmcmVlKG5vZGVzKTtcXG4gMzQzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRwcmFuZG9tX3NlZWRfc3RhdGUoXFx1MDAyNnJuZCwgc2VlZCk7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGJhc2ljX2NoZWNrKCk7XFxuIDM0OTpcXHRcXHRzZWFyY2hfY2hlY2soKTtcXG4gMzUwOlxcdFxcdGludGVyc2VjdGlvbl9yYW5nZV9jaGVjaygpO1xcbiAzNTE6XFx0XFx0c3Bhbl9pdGVyYXRpb25fY2hlY2soKTtcXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0a2ZyZWUocXVlcmllcyk7XFxuIDM1NDpcXHRcXHRrZnJlZShub2Rlcyk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdHJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi9cXG4gMzU3OlxcdH1cXG4gMzU4OlxcdFxcbiAzNTk6XFx0c3RhdGljIHZvaWQgaW50ZXJ2YWxfdHJlZV90ZXN0X2V4aXQodm9pZClcXG4gMzYwOlxcdHtcXG4gMzYxOlxcdFxcdHByaW50ayhLRVJOX0FMRVJUIFxcXCJ0ZXN0IGV4aXRcXFxcblxcXCIpO1xcbiAzNjI6XFx0fVxcbiAzNjM6XFx0XFxuIDM2NDpcXHRtb2R1bGVfaW5pdChpbnRlcnZhbF90cmVlX3Rlc3RfaW5pdClcXG4gMzY1OlxcdG1vZHVsZV9leGl0KGludGVydmFsX3RyZWVfdGVzdF9leGl0KVxcbiAzNjY6XFx0XFxuIDM2NzpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDM2ODpcXHRNT0RVTEVfQVVUSE9SKFxcXCJNaWNoZWwgTGVzcGluYXNzZVxcXCIpO1xcbiAzNjk6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJJbnRlcnZhbCBUcmVlIHRlc3RcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzc6NTIuOTYxNTgwNDEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc5NDEwNjgzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGludGVydmFsX3RyZWVfdGVzdC5jYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBsb29raW5nIGF0IGBpbnRlcnZhbF90cmVlX3Rlc3QuY2AuIEl0J3MgYSBzdGFuZGFsb25lIHRlc3QgbW9kdWxlLCB3aGljaCBpcyBnb29kLiBUaGUgZmFjdCB0aGF0IGBpbnRlcnZhbF90cmVlX3Rlc3RfaW5pdGAgcmV0dXJucyBgLUVBR0FJTmAgYW5kIGlzIGRlc2lnbmVkIHRvIHVubG9hZCB0aGUgbW9kdWxlIGlmIGl0IGZhaWxzIGlzIGludGVyZXN0aW5nLiBCdXQsIGlzIHRoaXMgZXZlbiBhIGZ1enppbmcgdGFyZ2V0PyBJcyBpdCAqbWVhbnQqIHRvIGJlIGhpdCBieSBzeXprYWxsZXI/IFNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFuZCB2ZXJpZnkgaWYgaW50ZW5kZWQuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoaXMgYERFRklORV9NVFJFRSh0cmVlKWAgbWFjcm8uIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGNoYW5nZWQgaXQgZnJvbSBgREVGSU5FX01UUkVFKHRyZWUpYCB0byBkZWNsYXJpbmcgaXQgYXMgYHN0cnVjdCBtYXBsZV90cmVlIHRyZWU7YC4gQWhhISBUaGUgYERFRklORV9NVFJFRWAgd2FzIHVzZWQgbG9jYWxseSwgaW4gYHNwYW5faXRlcmF0aW9uX2NoZWNrKClgLiBTbyB0aGlzIGlzIGFib3V0IGhvdyB0aGUgYHRyZWVgIHZhcmlhYmxlIGlzIGRlZmluZWQuIFRoZSBtYWNybyBub3cgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4jZGVmaW5lIERFRklORV9NVFJFRShuYW1lKVx0XHRcdFx0XHRcdFxcXG5cdHN0cnVjdCBtYXBsZV90cmVlIG5hbWUgPSBNVFJFRV9JTklUKG5hbWUsIDApO1x0XHRcXFxuXHRBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlcbmBgYFxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjaywgYW5kICpyZWFsbHkqIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBwYXRjaC4gSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIGtub3cgd2h5IGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgIHdhcyBhZGRlZC4gTGV0J3MgbGlzdCB0aGUgKmVudGlyZSogc2V0IG9mIGZpbGVzIHRoaXMgcGF0Y2ggdG91Y2hlcywgYmVjYXVzZSB0aGF0J3MgYWx3YXlzIGNydWNpYWw6XG5cbjEuICBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYFxuMi4gIGBpbmNsdWRlL2xpbnV4L2lkci5oYFxuMy4gIGBpbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaGBcbjQuICBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYFxuNS4gIGB0b29scy9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmhgXG42LiAgYHRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9pZHItdGVzdC5jYFxuNy4gIGB0b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY2BcblxuT2theSwgdGhpcyB0b3VjaGVzIGNvbXBpbGVyIGhlYWRlcnMsIElEUiwgTWFwbGUgVHJlZSwgdGhlIHRlc3QgZmlsZSwgYW5kIHNvbWUgdG9vbHMuIFRoZSBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBhZGRpdGlvbiBpcyBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoYXQncyB0aGVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvbW1pdCBtZXNzYWdlLCBoaXN0b3J5LCBhbmQgc2ltaWxhciBvY2N1cnJlbmNlcyBvZiB0aGF0IG1hY3JvLiBJZiBJIGNvdWxkLCBJJ2QgcnVuIGEgYGdpdCBsb2cgLW4gNWAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEJ1dCwgc2luY2UgSSBjYW4ndCBkbyB0aGF0IGRpcmVjdGx5LCBJJ2xsIHNlYXJjaCBmb3Igc2ltaWxhciBjb21waWxlLXRpbWUgY2hlY2tzIHdpdGhpbiB0aGUgYGluY2x1ZGUvbGludXhgIGRpcmVjdG9yeSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24sIGhvcGVmdWxseSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozODowMC45MDI2NTE1NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjU4Njg4NzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFRklORV8uKlNUQVRJQ19TVE9SQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozODowMy4yMjg1MzA4NjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjIzNTg2MDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBsZW1lbnRhdGlvbiBvZiBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyBiZWluZyB1dGlsaXplZCBhbmQgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHRvIGp1bXAgc3RyYWlnaHQgaW50byBzZWFyY2hpbmcgdGhlIGdpdCBsb2cgYW5kIGNvbW1lbnRzIGZvciB0aGF0IHNwZWNpZmljIHRlcm0sIGJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHRoYXQgbWlnaHQgYmUgdG9vIGRpcmVjdC4gTGV0J3MgYnJvYWRlbiB0aGUgc2VhcmNoIGEgYml0LiBQZXJoYXBzIGBERUZJTkVfSURBYCBpcyByZWxhdGVkLCBnaXZlbiBpdHMgbmFtaW5nIGNvbnZlbnRpb24uIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBjaGVjayB3aGVyZSBhIG1hY3JvIGlzICp1c2VkKiByYXRoZXIgdGhhbiBqdXN0IHdoZXJlIGl0J3MgZGVmaW5lZC4gVGhlcmVmb3JlLCBJIHdpbGwgY2hlY2sgd2hlcmUgYERFRklORV9JREFgIGlzIGJlaW5nIGNhbGxlZCBhbmQgd2hlcmUgaXQncyB1c2VkOyB0aGF0IHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgdGhhdCBJIG1heSBiZSBtaXNzaW5nIGlmIEkganVzdCBzZWFyY2ggZm9yIHRoZSBzcGVjaWZpYyB0ZXJtLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBob3cgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzg6MDUuNDY0Mzk0MzA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1MzM2NzExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgdHlwZW9mLipfc3RvcmFnZV9jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzg6MDguMTE5NzQxNTM5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcwNjQ0NjgwMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQVNTRVJUX1NUQVRJQ19TVE9SQUdFIE1hY3JvIGFuZCBpdHMgSW1wYWN0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBBU1NFUlRfU1RBVElDX1NUT1JBR0UobmFtZSlgIG1hY3JvLi4uIEkgc2VlIGl0J3MgZGVzaWduZWQgdG8gZW5mb3JjZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBmb3IgY2VydGFpbiBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgd2l0aCBgREVGSU5FX0lEQWAgb3IgYERFRklORV9NVFJFRWAuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgdGhlc2UgZnJvbSBiZWluZyBkZWNsYXJlZCBhcyBhdXRvbWF0aWMgKHN0YWNrKSB2YXJpYWJsZXMsIHdoaWNoIGlzIGdlbmVyYWxseSBpbmNvcnJlY3QgdXNhZ2UgZm9yIHRoZXNlIG1hY3JvcyBpbiB0aGUgTGludXgga2VybmVsIGNvbnZlbnRpb25zLlxuXG5UaGUgY29yZSBvZiB0aGUgbWFjcm8gaXMgdGhpczogYHN0YXRpYyB0eXBlb2YobmFtZSkgKiBjb25zdCBfX2Fsd2F5c191bnVzZWQgbmFtZSMjX3N0b3JhZ2VfY2hlY2sgPSBcdTAwMjYobmFtZSk7YC4gSXQncyBhIGNvbXBpbGUtdGltZSBjaGVjaywgcHVyZWx5LiBJdCBkb2VzICpub3QqIGdlbmVyYXRlIGFueSBydW50aW1lIGluc3RydWN0aW9ucy4gSXQgZGVjbGFyZXMgYSBzdGF0aWMgcG9pbnRlciBuYW1lZCBgbmFtZSMjX3N0b3JhZ2VfY2hlY2tgIGluaXRpYWxpemVkIHRvIHRoZSBhZGRyZXNzIG9mIGBuYW1lYC4gVGhlIGBfX2Fsd2F5c191bnVzZWRgIGF0dHJpYnV0ZSB0ZWxscyB0aGUgY29tcGlsZXIgdG8gbm90IHdhcm4gaWYgdGhpcyBzdGF0aWMgdmFyaWFibGUgaXMgbmV2ZXIgdXNlZCAod2hpY2ggaXQgaXNuJ3QsIGFzIHRoZSBjaGVjayBoYXBwZW5zIGF0IGNvbXBpbGUgdGltZSkuIElmIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGBERUZJTkVfSURBYCBvciBgREVGSU5FX01UUkVFYCBvbiB0aGUgc3RhY2ssIHRoaXMgaW5pdGlhbGl6YXRpb24gd2lsbCBmYWlsLCB0cmlnZ2VyaW5nIGFuIFwiaW5pdGlhbGl6ZXIgZWxlbWVudCBpcyBub3QgYSBjb25zdGFudFwiIGVycm9yLlxuXG5Ob3csIHRoYXQgYnJpbmdzIG1lIHRvIHRoZSByZWNlbnQgY2hhbmdlIGluIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgLiBUaGUgdGVzdCB1c2VkIHRvIGluaXRpYWxpemUgYSBgbWFwbGVfdHJlZSB0cmVlYCB3aXRoIGBNVFJFRV9JTklUKHRyZWUsIDApYCwgd2hpY2ggZXhwYW5kZWQgdG8gc29tZXRoaW5nIGxpa2UgYHN0cnVjdCBtYXBsZV90cmVlIHRyZWUgPSBNVFJFRV9JTklUKHRyZWUsIDApO2AuIFRoYXQncyBiZWVuIHJlbW92ZWQgaW4gdGhlIHJlZmFjdG9yLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gSXQgdHVybnMgb3V0IHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtYXBsZV90cmVlYCBpcyAqcmVkdW5kYW50KiwgYmVjYXVzZSBpbnNpZGUgdGhlIGxvb3AgaW4gYHNwYW5faXRlcmF0aW9uX2NoZWNrYCwgZm9yIGV2ZXJ5IHJvdW5kLCBgbXRfaW5pdF9mbGFncyhcdTAwMjZ0cmVlLCBNVF9GTEFHU19BTExPQ19SQU5HRSlgIGlzIGNhbGxlZCBhbnl3YXkgKmJlZm9yZSogYHRyZWVgIGlzIGFjY2Vzc2VkIGZvciB0aGUgZmlyc3QgdGltZS4gVGhlIGBtdHJlZV9kZXN0cm95YCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGxvb3AgdG8gY2xlYW4gaXQgdXAuXG5cblNvLCB0aGUgb3JpZ2luYWwgYD0gTVRSRUVfSU5JVCh0cmVlLCAwKWAgd2FzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnksIGFuZCByZW1vdmluZyBpdCBtYWtlcyBubyBkaWZmZXJlbmNlIGF0IHJ1bnRpbWUuIFRoaXMgd2hvbGUgZmlsZSBpcyBhICp0ZXN0IG1vZHVsZSosIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDY3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM5OjE4Ljc2NDQyNDE3NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NzAxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5URVJWQUxfVFJFRV9URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0yMzk4PWNvbmZpZyBSRUVEX1NPTE9NT05fVEVTVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjQwOS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyNDEwOmNvbmZpZyBJTlRFUlZBTF9UUkVFX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNDExLVxcdHRyaXN0YXRlIFxcXCJJbnRlcnZhbCB0cmVlIHRlc3RcXFwiXFxuLS1cXG5saWIvTWFrZWZpbGU9MjkyPW9iai0kKENPTkZJR19SQlRSRUVfVEVTVCkgKz0gcmJ0cmVlX3Rlc3Qub1xcbmxpYi9NYWtlZmlsZToyOTM6b2JqLSQoQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCkgKz0gaW50ZXJ2YWxfdHJlZV90ZXN0Lm9cXG5saWIvTWFrZWZpbGUtMjk0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozOToxOC44MjMzMDMzNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjExNjE5ODk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIERlYnVnIENvbmZpZ3VyYXRpb24gaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgZGVidWdnaW5nIGlzc3VlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIGF0IHRoZSBgbGliL0tjb25maWcuZGVidWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNDEwLiBUaGF0IGxvY2F0aW9uIHR5cGljYWxseSBob3VzZXMgY29uZmlndXJhdGlvbnMgdGhhdCBjb250cm9sIHZhcmlvdXMgZGVidWctcmVsYXRlZCBmZWF0dXJlcyB3aXRoaW4gdGhlIGtlcm5lbCwgc28gaXQncyBhIHByaW1lIHN1c3BlY3QgZm9yIGZpbmRpbmcgdGhlIHJlbGV2YW50IG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGJlaGF2aW9yLiBJdCdzIGEgc3lzdGVtYXRpYyBhcHByb2FjaDogc3RhcnQgd2l0aCB0aGUgbGlrZWx5IGNhbmRpZGF0ZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHRoZSBhcmVhIHRoYXQgSSBhbnRpY2lwYXRlIHdvdWxkIGJlIG1vc3QgcmVsZXZhbnQuIFRpbWUgdG8gc2VlIHdoYXQncyBzZXQgdXAgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzk6MjAuOTM5NTA1ODk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDA1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDA1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgc2VsZi10ZXN0IGZ1bmN0aW9uIG9mIHJzbGliIGF0IGJvb3QsXFxuMjQwNjpcXHRcXHQgIG9yIGF0IG1vZHVsZSBsb2FkIHRpbWUuXFxuMjQwNzpcXHRcXG4yNDA4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4yNDA5OlxcdFxcbjI0MTA6XFx0Y29uZmlnIElOVEVSVkFMX1RSRUVfVEVTVFxcbjI0MTE6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVydmFsIHRyZWUgdGVzdFxcXCJcXG4yNDEyOlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxuMjQxMzpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbjI0MTQ6XFx0XFx0aGVscFxcbjI0MTU6XFx0XFx0ICBBIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnRlcnZhbCB0cmVlIGxpYnJhcnlcXG4yNDE2OlxcdFxcbjI0MTc6XFx0Y29uZmlnIFBFUkNQVV9URVNUXFxuMjQxODpcXHRcXHR0cmlzdGF0ZSBcXFwiUGVyIGNwdSBvcGVyYXRpb25zIHRlc3RcXFwiXFxuMjQxOTpcXHRcXHRkZXBlbmRzIG9uIG0gXFx1MDAyNlxcdTAwMjYgREVCVUdfS0VSTkVMXFxuMjQyMDpcXHRcXHRoZWxwXFxuMjQyMTpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBidWlsZCB0ZXN0IG1vZHVsZSB3aGljaCB2YWxpZGF0ZXMgcGVyLWNwdVxcbjI0MjI6XFx0XFx0ICBvcGVyYXRpb25zLlxcbjI0MjM6XFx0XFxuMjQyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMjQyNTpcXHRcXG4yNDI2OlxcdGNvbmZpZyBBVE9NSUM2NF9TRUxGVEVTVFxcbjI0Mjc6XFx0XFx0dHJpc3RhdGUgXFxcIlBlcmZvcm0gYW4gYXRvbWljNjRfdCBzZWxmLXRlc3RcXFwiXFxuMjQyODpcXHRcXHRoZWxwXFxuMjQyOTpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IHRoZSBhdG9taWM2NF90IGZ1bmN0aW9ucyBhdCBib290IG9yXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM5OjIwLjkzOTc0MzEzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTA5NDEzMjQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgSW50ZXJ2YWwgVHJlZSBUZXN0IGFuZCBXb3J0aEZ1enppbmcgRGV0ZXJtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQncyBcIldvcnRoRnV6emluZ1wiLiBGaXJzdCwgbGV0J3MgYnJlYWsgZG93biB0aGUgYElOVEVSVkFMX1RSRUVfVEVTVGAuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiZW5jaG1hcmssIGJ1aWx0IGVpdGhlciBhcyBhIG1vZHVsZSBvciBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBgV29ydGhGdXp6aW5nYCBiZWNhdXNlIHRoaXMgdGVzdCBpcyBpbiBgbGliL2AuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc2F5cyB0aGUgZm9sbG93aW5nOiBgVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5gXG5cblNvLCBpcyBpdD9cblxuT2theSwgc28gbGV0J3MgY2hlY2sgdGhlIGNvZGU6IGBtb2R1bGVfaW5pdChpbnRlcnZhbF90cmVlX3Rlc3RfaW5pdClgIHNheXMgdGhhdCBpdCdzIGEgbW9kdWxlLiBCdXQgZXZlbiBiZXR0ZXIgdGhhbiB0aGF0LCBpdCBpcyBpbiBgbGliL2Agd2hpY2ggdGVsbHMgbWUgaXQncyBub3QgdXNlci1zcGFjZS5cblxuQWgsIHRoZSB0ZXN0IGltbWVkaWF0ZWx5IHVubG9hZHMgaXRzZWxmIHdpdGggYC1FQUdBSU5gLiBObyBzeXNjYWxscywgbm90aGluZyBleHBvc2VkLiBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGNoYW5nZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYERFRklORV9NVFJFRSh0cmVlKWAgd2l0aCBgc3RydWN0IG1hcGxlX3RyZWUgdHJlZTtgLiBOb3csIHRoaXMgY2hhbmdlIHdhcyBkb25lIHRvIG1ha2UgdGhpcyB0ZXN0IGNvbXBpbGUgd2hlbiBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCB3YXMgYWRkZWQgdG8gYERFRklORV9NVFJFRWAuXG5cbk9rYXksIHNvIGxvb2tpbmcgdGhyb3VnaCB0aGUgY2hhbmdlLCBgTUFfU1RBVEUobWFzLCBcdTAwMjZ0cmVlLCAwLCAwKWAgc2V0cyB0aGUgbWFwbGUgdHJlZSBzdGF0ZSB0byBwb2ludCB0byB0aGUgYWRkcmVzcyBvZiBgdHJlZWAsIGJ1dCBkb2Vzbid0IGRlcmVmZXJlbmNlIGl0LiBTbywgdGhlcmUgaXMgbm8gaXNzdWUgb2YgdGhlIHN0cnVjdHVyZSBiZWluZyB1bmluaXRpYWxpemVkLlxuXG5UaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBpczogV2FzIHRoZSBjaGFuZ2UgbWFkZSBvbiBleGVjdXRhYmxlIGNvZGU/XG5cbkkgbmVlZCB0byByZWZlciB0byBzZWN0aW9uIDMgbm93LiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBydW50aW1lIGFzc2VydGlvbnMsIHN1Y2ggYXMgYFdBUk5fT04qYCBvciBgQlVHX09OKmAsIHdhcnJhbnQgZnV6emluZy4gQnV0IHRoZSBrZXkgdGhpbmcgaXMgdGhhdCBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyBOT1QgYSBydW50aW1lIGFzc2VydGlvbi4gSXQncyBhICpjb21waWxlLXRpbWUqIGFzc2VydGlvbi4gSXQgcHJvZHVjZXMgbm8gYWN0dWFsIGV4ZWN1dGFibGUgY29kZS4gSXQncyBhIGNvbXBpbGUtdGltZSBjaGVjayB0aGF0IGVuc3VyZXMgdGhlIHZhcmlhYmxlIGhhcyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gVGhlIGNoYW5nZSBhZmZlY3RzIGluY2x1ZGUgZmlsZXMgKGBjb21waWxlci5oYCwgYGlkci5oYCwgYW5kIGBtYXBsZV90cmVlLmhgKSwgYW5kIHVzZXItc3BhY2UgdGVzdHMsIGJ1dCB3aGF0IGFib3V0IHRoZSBrZXJuZWw/XG5cbkxvb2tpbmcgYmFjayBhdCB0aGUgc2VjdGlvbnMsIEkgbmVlZCB0byBzZWUgaWYgdGhlIGNoYW5nZXMgYXJlICpyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlKi4gSXMgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbW9kaWZ5aW5nIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGU/IEkgbmVlZCB0byBjaGVjazogd2hhdCBjb2RlIGlzIGdlbmVyYXRlZD8gU2luY2UgdGhpcyBpcyBhIGNoZWNrIGF0IGNvbXBpbGUgdGltZSB1c2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgaXQgd2lsbCBub3QgcHJvZHVjZSBhbnkgZXhlY3V0YWJsZSBjb2RlLiBTbyBpdCdzIG5vdCBhIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZ1enplZC5cblxuQW5kIHRoZW4gSSBsb29rIGF0IHRoZSB3b3JkaW5nIGZyb20gdGhlIHByb21wdC4gSXQgc2F5czogXCJOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOiBbLi4uXSB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIgU28sIGJlY2F1c2UgdGhlIGNoYW5nZSBpcyBub3QgaW4gZXhlY3V0YWJsZSBjb2RlIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLCBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGlzIGlzIG5vdCBzb21ldGhpbmcgSSBuZWVkIHRvIGV2YWx1YXRlLiBGaW5hbGx5LCBpdCBtYWtlcyBzdXJlIHRvIGFzayBhYm91dCBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYDogRG9lcyBzeXprYWxsZXIgZnV6eiBgQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVGA/IEdpdmVuIHdoYXQgSSBoYXZlIGRlc2NyaWJlZCBJIHdvdWxkIGFzc3VtZSBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTY5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjM5OjMyLjAzMzg3NzkxMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMTgwMTEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUZJTkVfSURBXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTMxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9ODM9c3RhdGljIGVudW0gY3B1aHBfc3RhdGUgY3B1aHBfbW1kY19zdGF0ZTtcXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6ODQ6c3RhdGljIERFRklORV9JREEobW1kY19pZGEpO1xcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy04NS1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIzODg9aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjU4MS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoyNTgyOnN0YXRpYyBERUZJTkVfSURBKGxwaWRfaW51c2UpO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI1ODMtc3RhdGljIHVuc2lnbmVkIGxvbmcgbnJfbHBpZHM7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0yNi1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShtbXVfY29udGV4dF9pZGEpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTI4LVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTU4PXN0YXRpYyB1MzIgdGR4X25yX2d1ZXN0X2tleWlkcyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTU5LVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzo2MDpzdGF0aWMgREVGSU5FX0lEQSh0ZHhfZ3Vlc3Rfa2V5aWRfcG9vbCk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTYxLVxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYz02Mj1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGJsb2NrX3JxX2luc2VydCk7XFxuYmxvY2svYmxrLWNvcmUuYy02My1cXG5ibG9jay9ibGstY29yZS5jOjY0OnN0YXRpYyBERUZJTkVfSURBKGJsa19xdWV1ZV9pZGEpO1xcbmJsb2NrL2Jsay1jb3JlLmMtNjUtXFxuLS1cXG5ibG9jay9ic2cuYz0zNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBic2dfZGV2aWNlICp0b19ic2dfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5ibG9jay9ic2cuYy00Mi1cXG5ibG9jay9ic2cuYzo0MzpzdGF0aWMgREVGSU5FX0lEQShic2dfbWlub3JfaWRhKTtcXG5ibG9jay9ic2cuYy00NC1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGJzZ19jbGFzcztcXG4tLVxcbmJsb2NrL2dlbmhkLmM9NTM9c3RhdGljIGF0b21pYzY0X3QgZGlza3NlcTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNTYtI2RlZmluZSBOUl9FWFRfREVWVFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIE1JTk9SQklUUylcXG5ibG9jay9nZW5oZC5jOjU3OnN0YXRpYyBERUZJTkVfSURBKGV4dF9kZXZ0X2lkYSk7XFxuYmxvY2svZ2VuaGQuYy01OC1cXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jPTgzPXN0YXRpYyBib29sIGxpbmtfdXA7XFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM6ODQ6c3RhdGljIERFRklORV9JREEocWFpY191c3JzKTtcXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYy04NS1cXG4tLVxcbmRyaXZlcnMvYWNwaS9wZnJfdGVsZW1ldHJ5LmM9Njg9c3RhdGljIGNvbnN0IGd1aWRfdCBwZnJ0X2xvZ19ndWlkID1cXG4tLVxcbmRyaXZlcnMvYWNwaS9wZnJfdGVsZW1ldHJ5LmMtNzEtXFxuZHJpdmVycy9hY3BpL3Bmcl90ZWxlbWV0cnkuYzo3MjpzdGF0aWMgREVGSU5FX0lEQShwZnJ0X2xvZ19pZGEpO1xcbmRyaXZlcnMvYWNwaS9wZnJfdGVsZW1ldHJ5LmMtNzMtXFxuLS1cXG5kcml2ZXJzL2FjcGkvcGZyX3VwZGF0ZS5jPTgxPXN0cnVjdCBwZnJ1X2RldmljZSB7XFxuLS1cXG5kcml2ZXJzL2FjcGkvcGZyX3VwZGF0ZS5jLTg2LVxcbmRyaXZlcnMvYWNwaS9wZnJfdXBkYXRlLmM6ODc6c3RhdGljIERFRklORV9JREEocGZydV9pZGEpO1xcbmRyaXZlcnMvYWNwaS9wZnJfdXBkYXRlLmMtODgtXFxuLS1cXG5kcml2ZXJzL2FjcGkvcGxhdGZvcm1fcHJvZmlsZS5jPTQzPXN0YXRpY19hc3NlcnQoQVJSQVlfU0laRShwcm9maWxlX25hbWVzKSA9PSBQTEFURk9STV9QUk9GSUxFX0xBU1QpO1xcbmRyaXZlcnMvYWNwaS9wbGF0Zm9ybV9wcm9maWxlLmMtNDQtXFxuZHJpdmVycy9hY3BpL3BsYXRmb3JtX3Byb2ZpbGUuYzo0NTpzdGF0aWMgREVGSU5FX0lEQShwbGF0Zm9ybV9wcm9maWxlX2lkYSk7XFxuZHJpdmVycy9hY3BpL3BsYXRmb3JtX3Byb2ZpbGUuYy00Ni1cXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJmcy5jPTU4PXN0YXRpYyBERUZJTkVfTVVURVgoYmluZGVyZnNfbWlub3JzX211dGV4KTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3J1c3RfYmluZGVyZnMuYzo1OTpzdGF0aWMgREVGSU5FX0lEQShiaW5kZXJmc19taW5vcnMpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcnVzdF9iaW5kZXJmcy5jLTYwLVxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcmZzLmM9NDU9c3RhdGljIERFRklORV9NVVRFWChiaW5kZXJmc19taW5vcnNfbXV0ZXgpO1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJmcy5jOjQ2OnN0YXRpYyBERUZJTkVfSURBKGJpbmRlcmZzX21pbm9ycyk7XFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcmZzLmMtNDctXFxuLS1cXG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jPTgwPXN0YXRpYyB1NjQgYXRhX2Rldl9nZXRfcXVpcmtfdmFsdWUoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdTY0IHF1aXJrKTtcXG5kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jLTgxLVxcbmRyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmM6ODI6c3RhdGljIERFRklORV9JREEoYXRhX2lkYSk7XFxuZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYy04My1cXG4tLVxcbmRyaXZlcnMvYXRhL3BhdGFfcGFycG9ydC9wYXRhX3BhcnBvcnQuYz0xND1zdGF0aWMgREVGSU5FX0lEUihwcm90b2NvbHMpO1xcbmRyaXZlcnMvYXRhL3BhdGFfcGFycG9ydC9wYXRhX3BhcnBvcnQuYzoxNTpzdGF0aWMgREVGSU5FX0lEQShwYXRhX3BhcnBvcnRfYnVzX2Rldl9pZHMpO1xcbmRyaXZlcnMvYXRhL3BhdGFfcGFycG9ydC9wYXRhX3BhcnBvcnQuYy0xNi1zdGF0aWMgREVGSU5FX01VVEVYKHBpX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9saW5lLWRpc3BsYXkuYz0zNjI9X19BVFRSSUJVVEVfR1JPVVBTKGxpbmVkaXNwKTtcXG5kcml2ZXJzL2F1eGRpc3BsYXkvbGluZS1kaXNwbGF5LmMtMzYzLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9saW5lLWRpc3BsYXkuYzozNjQ6c3RhdGljIERFRklORV9JREEobGluZWRpc3BfaWQpO1xcbmRyaXZlcnMvYXV4ZGlzcGxheS9saW5lLWRpc3BsYXkuYy0zNjUtXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYy0zOS0vKiBGb3IgYXV0b21hdGljYWxseSBhbGxvY2F0ZWQgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jOjQwOnN0YXRpYyBERUZJTkVfSURBKHBsYXRmb3JtX2RldmlkX2lkYSk7XFxuZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMtNDEtXFxuLS1cXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmM9Njk9c3RhdGljIHN0cnVjdCB3YWtldXBfc291cmNlIGRlbGV0ZWRfd3MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMtNzMtXFxuZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jOjc0OnN0YXRpYyBERUZJTkVfSURBKHdha2V1cF9pZGEpO1xcbmRyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYy03NS1cXG4tLVxcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWRlYnVnZnMuYz0xOT1zdHJ1Y3QgcmVnbWFwX2RlYnVnZnNfbm9kZSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1kZWJ1Z2ZzLmMtMjMtXFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtZGVidWdmcy5jOjI0OnN0YXRpYyBERUZJTkVfSURBKGR1bW15X2lkYSk7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtZGVidWdmcy5jLTI1LXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpyZWdtYXBfZGVidWdmc19yb290O1xcbi0tXFxuZHJpdmVycy9iYXNlL3NvYy5jLTE4LVxcbmRyaXZlcnMvYmFzZS9zb2MuYzoxOTpzdGF0aWMgREVGSU5FX0lEQShzb2NfaWRhKTtcXG5kcml2ZXJzL2Jhc2Uvc29jLmMtMjAtXFxuLS1cXG5kcml2ZXJzL2Jhc2Uvc3dub2RlLmM9Mjc9c3RydWN0IHN3bm9kZSB7XFxuLS1cXG5kcml2ZXJzL2Jhc2Uvc3dub2RlLmMtNDItXFxuZHJpdmVycy9iYXNlL3N3bm9kZS5jOjQzOnN0YXRpYyBERUZJTkVfSURBKHN3bm9kZV9yb290X2lkcyk7XFxuZHJpdmVycy9iYXNlL3N3bm9kZS5jLTQ0LXN0YXRpYyBzdHJ1Y3Qga3NldCAqc3dub2RlX2tzZXQ7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmM9MTA0PXN0YXRpYyB1MzIgY3B1X3VzZVtOUl9DUFVTXTtcXG5kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMtMTA1LVxcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYzoxMDY6c3RhdGljIERFRklORV9JREEocnNzZF9pbmRleF9pZGEpO1xcbmRyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYy0xMDctXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz03MD1zdGF0aWMgaW50IG51bGxfbWFqb3I7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NzE6c3RhdGljIERFRklORV9JREEobnVsbGJfaW5kZXhlcyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzItc3RhdGljIHN0cnVjdCBibGtfbXFfdGFnX3NldCB0YWdfc2V0O1xcbi0tXFxuZHJpdmVycy9ibG9jay9yYmQuYz00Nzg9c3RhdGljIGludCByYmRfbWFqb3I7XFxuZHJpdmVycy9ibG9jay9yYmQuYzo0Nzk6c3RhdGljIERFRklORV9JREEocmJkX2Rldl9pZF9pZGEpO1xcbmRyaXZlcnMvYmxvY2svcmJkLmMtNDgwLVxcbi0tXFxuZHJpdmVycy9ibG9jay9ybmJkL3JuYmQtY2x0LmM9MjQ9c3RhdGljIGludCBybmJkX2NsaWVudF9tYWpvcjtcXG5kcml2ZXJzL2Jsb2NrL3JuYmQvcm5iZC1jbHQuYzoyNTpzdGF0aWMgREVGSU5FX0lEQShpbmRleF9pZGEpO1xcbmRyaXZlcnMvYmxvY2svcm5iZC9ybmJkLWNsdC5jLTI2LXN0YXRpYyBERUZJTkVfTVVURVgoc2Vzc19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTQ0PXN0YXRpYyBpbnQgbWFqb3I7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6NDU6c3RhdGljIERFRklORV9JREEodmRfaW5kZXhfaWRhKTtcXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy00Ni1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9lcC9tYWluLmMtMjEtXFxuZHJpdmVycy9idXMvbWhpL2VwL21haW4uYzoyMjpzdGF0aWMgREVGSU5FX0lEQShtaGlfZXBfY250cmxfaWRhKTtcXG5kcml2ZXJzL2J1cy9taGkvZXAvbWFpbi5jLTIzLVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTI0LVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYzoyNTpzdGF0aWMgREVGSU5FX0lEQShtaGlfY29udHJvbGxlcl9pZGEpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0yNi1cXG4tLVxcbmRyaXZlcnMvY2R4L2NkeC5jLTc4LS8qIElEQSBmb3IgQ0RYIGNvbnRyb2xsZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgQ0RYIGJ1cyAqL1xcbmRyaXZlcnMvY2R4L2NkeC5jOjc5OnN0YXRpYyBERUZJTkVfSURBKGNkeF9jb250cm9sbGVyX2lkYSk7XFxuZHJpdmVycy9jZHgvY2R4LmMtODAtLyogTG9jayB0byBwcm90ZWN0IGNvbnRyb2xsZXIgb3BzICovXFxuLS1cXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYy0xOC1cXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYzoxOTpzdGF0aWMgREVGSU5FX0lEQShybmdfaW5kZXhfaWRhKTtcXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYy0yMC1cXG4tLVxcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jPTMwNjY9c3RhdGljIHN0cnVjdCBibWNfZGV2aWNlICppcG1pX2ZpbmRfYm1jX3Byb2RfZGV2X2lkKFxcbi0tXFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtMzA4NC1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYzozMDg1OnN0YXRpYyBERUZJTkVfSURBKGlwbWlfYm1jX2lkYSk7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMtMzA4Ni1cXG4tLVxcbmRyaXZlcnMvY2hhci9taXNjLmM9NTg9c3RhdGljIERFRklORV9NVVRFWChtaXNjX210eCk7XFxuLS1cXG5kcml2ZXJzL2NoYXIvbWlzYy5jLTYyLSAqL1xcbmRyaXZlcnMvY2hhci9taXNjLmM6NjM6c3RhdGljIERFRklORV9JREEobWlzY19taW5vcnNfaWRhKTtcXG5kcml2ZXJzL2NoYXIvbWlzYy5jLTY0LVxcbi0tXFxuZHJpdmVycy9jaGFyL3BwZGV2LmM9ODc9c3RhdGljIHN0cnVjdCBkZXZpY2UgKmRldmljZXNbUEFSUE9SVF9NQVhdO1xcbmRyaXZlcnMvY2hhci9wcGRldi5jLTg4LVxcbmRyaXZlcnMvY2hhci9wcGRldi5jOjg5OnN0YXRpYyBERUZJTkVfSURBKGlkYV9pbmRleCk7XFxuZHJpdmVycy9jaGFyL3BwZGV2LmMtOTAtXFxuLS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYz02ND1zdHJ1Y3QgY29uc29sZSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYy04My1cXG5kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYzo4NDpzdGF0aWMgREVGSU5FX0lEQSh2dGVybW5vX2lkYSk7XFxuZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMtODUtXFxuLS1cXG5kcml2ZXJzL2Nsay9zcGFjZW1pdC9jY3VfY29tbW9uLmMtMTItXFxuZHJpdmVycy9jbGsvc3BhY2VtaXQvY2N1X2NvbW1vbi5jOjEzOnN0YXRpYyBERUZJTkVfSURBKGF1eGlsaWFyeV9pZHMpO1xcbmRyaXZlcnMvY2xrL3NwYWNlbWl0L2NjdV9jb21tb24uYy0xNC1zdGF0aWMgaW50IHNwYWNlbWl0X2NjdV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2NvdW50ZXIvY291bnRlci1jb3JlLmMtMjctLyogUHJvdmlkZXMgYSB1bmlxdWUgSUQgZm9yIGVhY2ggY291bnRlciBkZXZpY2UgKi9cXG5kcml2ZXJzL2NvdW50ZXIvY291bnRlci1jb3JlLmM6Mjg6c3RhdGljIERFRklORV9JREEoY291bnRlcl9pZGEpO1xcbmRyaXZlcnMvY291bnRlci9jb3VudGVyLWNvcmUuYy0yOS1cXG4tLVxcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM9MjI9c3RhdGljIGludCBjeGxfbWVtX21ham9yO1xcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmM6MjM6c3RhdGljIERFRklORV9JREEoY3hsX21lbWRldl9pZGEpO1xcbmRyaXZlcnMvY3hsL2NvcmUvbWVtZGV2LmMtMjQtXFxuLS1cXG5kcml2ZXJzL2N4bC9jb3JlL3BtZW0uYy0yMy1cXG5kcml2ZXJzL2N4bC9jb3JlL3BtZW0uYzoyNDpzdGF0aWMgREVGSU5FX0lEQShjeGxfbnZkaW1tX2JyaWRnZV9pZGEpO1xcbmRyaXZlcnMvY3hsL2NvcmUvcG1lbS5jLTI1LVxcbi0tXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmMtMzMtXFxuZHJpdmVycy9jeGwvY29yZS9wb3J0LmM6MzQ6c3RhdGljIERFRklORV9JREEoY3hsX3BvcnRfaWRhKTtcXG5kcml2ZXJzL2N4bC9jb3JlL3BvcnQuYy0zNS1zdGF0aWMgREVGSU5FX1hBUlJBWShjeGxfcm9vdF9idXNlcyk7XFxuLS1cXG5kcml2ZXJzL2RheC9zdXBlci5jPTQxPXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmRheF9tbnQ7XFxuZHJpdmVycy9kYXgvc3VwZXIuYzo0MjpzdGF0aWMgREVGSU5FX0lEQShkYXhfbWlub3JfaWRhKTtcXG5kcml2ZXJzL2RheC9zdXBlci5jLTQzLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGF4X2NhY2hlIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYz02MD1zdGF0aWMgREVGSU5FX01VVEVYKGRtYV9saXN0X211dGV4KTtcXG5kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYzo2MTpzdGF0aWMgREVGSU5FX0lEQShkbWFfaWRhKTtcXG5kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYy02Mi1zdGF0aWMgTElTVF9IRUFEKGRtYV9kZXZpY2VfbGlzdCk7XFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2NkZXYuYz0yMD1zdHJ1Y3QgaWR4ZF9jZGV2X2NvbnRleHQge1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9jZGV2LmMtMjktICovXFxuZHJpdmVycy9kbWEvaWR4ZC9jZGV2LmM6MzA6c3RhdGljIERFRklORV9JREEoZmlsZV9pZGEpO1xcbmRyaXZlcnMvZG1hL2lkeGQvY2Rldi5jLTMxLVxcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM9NDA9Ym9vbCBzdXBwb3J0X2VucWNtZDtcXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo0MTpERUZJTkVfSURBKGlkeGRfaWRhKTtcXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy00Mi1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0yOD1zdGF0aWMgUkFXX05PVElGSUVSX0hFQUQoZHBsbF9ub3RpZmllcl9jaGFpbik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI5OnN0YXRpYyBERUZJTkVfSURBKGRwbGxfcGluX2lkeF9pZGEpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMC1cXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi5jPTI0MD1zdGF0aWMgc3RydWN0IGNsYXNzICpleHRjb25fY2xhc3M7XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLmMtMjQxLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi5jOjI0MjpzdGF0aWMgREVGSU5FX0lEQShleHRjb25fZGV2X2lkcyk7XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLmMtMjQzLXN0YXRpYyBMSVNUX0hFQUQoZXh0Y29uX2Rldl9saXN0KTtcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9idXMuYy0xOS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvYnVzLmM6MjA6c3RhdGljIERFRklORV9JREEoZmZhX2J1c19pZCk7XFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2J1cy5jLTIxLVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9idXMuYz0yMj1FWFBPUlRfU1lNQk9MX0dQTChzY21pX3JlcXVlc3RlZF9kZXZpY2VzX25oKTtcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2J1cy5jLTIzLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvYnVzLmM6MjQ6c3RhdGljIERFRklORV9JREEoc2NtaV9idXNfaWQpO1xcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvYnVzLmMtMjUtXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL2RyaXZlci5jLTUxLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvZHJpdmVyLmM6NTI6c3RhdGljIERFRklORV9JREEoc2NtaV9pZCk7XFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS9kcml2ZXIuYy01My1cXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwuYz0yMzU9RVhQT1JUX1NZTUJPTF9HUEwoZGZsX2ZwZ2FfY2hlY2tfcG9ydF9pZCk7XFxuZHJpdmVycy9mcGdhL2RmbC5jLTIzNi1cXG5kcml2ZXJzL2ZwZ2EvZGZsLmM6MjM3OnN0YXRpYyBERUZJTkVfSURBKGRmbF9kZXZpY2VfaWRhKTtcXG5kcml2ZXJzL2ZwZ2EvZGZsLmMtMjM4LVxcbi0tXFxuZHJpdmVycy9mcGdhL2ZwZ2EtYnJpZGdlLmMtMTUtXFxuZHJpdmVycy9mcGdhL2ZwZ2EtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZnBnYV9icmlkZ2VfaWRhKTtcXG5kcml2ZXJzL2ZwZ2EvZnBnYS1icmlkZ2UuYy0xNy1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGZwZ2FfYnJpZGdlX2NsYXNzO1xcbi0tXFxuZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMtMjAtXFxuZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmM6MjE6c3RhdGljIERFRklORV9JREEoZnBnYV9tZ3JfaWRhKTtcXG5kcml2ZXJzL2ZwZ2EvZnBnYS1tZ3IuYy0yMi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGZwZ2FfbWdyX2NsYXNzO1xcbi0tXFxuZHJpdmVycy9mcGdhL2ZwZ2EtcmVnaW9uLmMtMTctXFxuZHJpdmVycy9mcGdhL2ZwZ2EtcmVnaW9uLmM6MTg6c3RhdGljIERFRklORV9JREEoZnBnYV9yZWdpb25faWRhKTtcXG5kcml2ZXJzL2ZwZ2EvZnBnYS1yZWdpb24uYy0xOS1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGZwZ2FfcmVnaW9uX2NsYXNzO1xcbi0tXFxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYz00Nj1zdGF0aWMgY29uc3QgaW50IGVuZ2luZV9wYWdlX3NpemUgPSAweDQwMDtcXG4tLVxcbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmMtODQtXFxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYzo4NTpzdGF0aWMgREVGSU5FX0lEQShtYXN0ZXJfaWRhKTtcXG5kcml2ZXJzL2ZzaS9mc2ktY29yZS5jLTg2LVxcbi0tXFxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYz05MD1zdGF0aWMgZGV2X3QgZnNpX2Jhc2VfZGV2O1xcbmRyaXZlcnMvZnNpL2ZzaS1jb3JlLmM6OTE6c3RhdGljIERFRklORV9JREEoZnNpX21pbm9yX2lkYSk7XFxuZHJpdmVycy9mc2kvZnNpLWNvcmUuYy05Mi0jZGVmaW5lIEZTSV9DSEFSX01BWF9ERVZJQ0VTXFx0MHgxMDAwXFxuLS1cXG5kcml2ZXJzL2ZzaS9mc2ktb2NjLmM9Njg9c3RydWN0IG9jY19jbGllbnQge1xcbi0tXFxuZHJpdmVycy9mc2kvZnNpLW9jYy5jLTc3LVxcbmRyaXZlcnMvZnNpL2ZzaS1vY2MuYzo3ODpzdGF0aWMgREVGSU5FX0lEQShvY2NfaWRhKTtcXG5kcml2ZXJzL2ZzaS9mc2ktb2NjLmMtNzktXFxuLS1cXG5kcml2ZXJzL2Z3Y3RsL21haW4uYz0yMj1zdGF0aWMgZGV2X3QgZndjdGxfZGV2O1xcbmRyaXZlcnMvZndjdGwvbWFpbi5jOjIzOnN0YXRpYyBERUZJTkVfSURBKGZ3Y3RsX2lkYSk7XFxuZHJpdmVycy9md2N0bC9tYWluLmMtMjQtc3RhdGljIHVuc2lnbmVkIGxvbmcgZndjdGxfdGFpbnRlZDtcXG4tLVxcbmRyaXZlcnMvZ25zcy9jb3JlLmMtMjYtXFxuZHJpdmVycy9nbnNzL2NvcmUuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShnbnNzX21pbm9ycyk7XFxuZHJpdmVycy9nbnNzL2NvcmUuYy0yOC1zdGF0aWMgZGV2X3QgZ25zc19maXJzdDtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWV4YXIuYy0zMS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1leGFyLmM6MzI6c3RhdGljIERFRklORV9JREEoaWRhX2luZGV4KTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1leGFyLmMtMzMtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1tcHNzZS5jPTg0PU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBncGlvX21wc3NlX3RhYmxlKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1tcHNzZS5jLTg1LVxcbmRyaXZlcnMvZ3Bpby9ncGlvLW1wc3NlLmM6ODY6c3RhdGljIERFRklORV9JREEoZ3Bpb19tcHNzZV9pZGEpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLW1wc3NlLmMtODctXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1zaW0uYy00Mi1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1zaW0uYzo0MzpzdGF0aWMgREVGSU5FX0lEQShncGlvX3NpbV9pZGEpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXNpbS5jLTQ0LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tdmlydHVzZXIuYy0zOS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby12aXJ0dXNlci5jOjQwOnN0YXRpYyBERUZJTkVfSURBKGdwaW9fdmlydHVzZXJfaWRhKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby12aXJ0dXNlci5jLTQxLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpncGlvX3ZpcnR1c2VyX2RiZ19yb290O1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW9saWItc2hhcmVkLmM9NjM9c3RhdGljIExJU1RfSEVBRChncGlvX3NoYXJlZF9saXN0KTtcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zaGFyZWQuYzo2NDpzdGF0aWMgREVGSU5FX0lEQShncGlvX3NoYXJlZF9pZGEpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvbGliLXNoYXJlZC5jLTY1LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW9saWIuYy01Ni0vKiBEZXZpY2UgYW5kIGNoYXIgZGV2aWNlLXJlbGF0ZWQgaW5mb3JtYXRpb24gKi9cXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jOjU3OnN0YXRpYyBERUZJTkVfSURBKGdwaW9faWRhKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jLTU4LXN0YXRpYyBkZXZfdCBncGlvX2RldnQgX19yb19hZnRlcl9pbml0O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hdXgtYnJpZGdlLmMtMTUtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hdXgtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZHJtX2F1eF9icmlkZ2VfaWRhKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1icmlkZ2UuYy0xNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYXV4LWhwZC1icmlkZ2UuYy0xNS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2F1eC1ocGQtYnJpZGdlLmM6MTY6c3RhdGljIERFRklORV9JREEoZHJtX2F1eF9ocGRfYnJpZGdlX2lkYSk7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hdXgtaHBkLWJyaWRnZS5jLTE3LVxcbi0tXFxuZHJpdmVycy9oaWQvYW1kLXNmaC1oaWQvYW1kX3NmaF9wY2llLmM9MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphbWRfc2ZoX2dyb3Vwc1tdID0ge1xcbi0tXFxuZHJpdmVycy9oaWQvYW1kLXNmaC1oaWQvYW1kX3NmaF9wY2llLmMtMzg0LVxcbmRyaXZlcnMvaGlkL2FtZC1zZmgtaGlkL2FtZF9zZmhfcGNpZS5jOjM4NTpzdGF0aWMgREVGSU5FX0lEQShzZmhfdG1faWRhKTtcXG5kcml2ZXJzL2hpZC9hbWQtc2ZoLWhpZC9hbWRfc2ZoX3BjaWUuYy0zODYtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtbmludGVuZG8uYz0yMjc3PXN0YXRpYyBpbnQgam95Y29uX2hvbWVfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1uaW50ZW5kby5jLTIyOTUtXFxuZHJpdmVycy9oaWQvaGlkLW5pbnRlbmRvLmM6MjI5NjpzdGF0aWMgREVGSU5FX0lEQShuaW50ZW5kb19wbGF5ZXJfaWRfYWxsb2NhdG9yKTtcXG5kcml2ZXJzL2hpZC9oaWQtbmludGVuZG8uYy0yMjk3LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYz0xODc9c3RydWN0IHNoaWVsZF9kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYy0yMDMtICovXFxuZHJpdmVycy9oaWQvaGlkLW52aWRpYS1zaGllbGQuYzoyMDQ6c3RhdGljIERFRklORV9JREEodGh1bmRlcnN0cmlrZV9pZGEpO1xcbmRyaXZlcnMvaGlkL2hpZC1udmlkaWEtc2hpZWxkLmMtMjA1LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXBsYXlzdGF0aW9uLmM9MjY9c3RhdGljIExJU1RfSEVBRChwc19kZXZpY2VzX2xpc3QpO1xcbmRyaXZlcnMvaGlkL2hpZC1wbGF5c3RhdGlvbi5jLTI3LVxcbmRyaXZlcnMvaGlkL2hpZC1wbGF5c3RhdGlvbi5jOjI4OnN0YXRpYyBERUZJTkVfSURBKHBzX3BsYXllcl9pZF9hbGxvY2F0b3IpO1xcbmRyaXZlcnMvaGlkL2hpZC1wbGF5c3RhdGlvbi5jLTI5LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXNvbnkuYz01MjM9c3RhdGljIExJU1RfSEVBRChzb255X2RldmljZV9saXN0KTtcXG5kcml2ZXJzL2hpZC9oaWQtc29ueS5jOjUyNDpzdGF0aWMgREVGSU5FX0lEQShzb255X2RldmljZV9pZF9hbGxvY2F0b3IpO1xcbmRyaXZlcnMvaGlkL2hpZC1zb255LmMtNTI1LVxcbi0tXFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfY29yZS5jLTM2LS8qIEZvciBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlZCBkZXZpY2UgSURzICovXFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfY29yZS5jOjM3OnN0YXRpYyBERUZJTkVfSURBKHBsYXRmb3JtX29tYXBfc3NpX2lkYSk7XFxuZHJpdmVycy9oc2kvY29udHJvbGxlcnMvb21hcF9zc2lfY29yZS5jLTM4LVxcbi0tXFxuZHJpdmVycy9od21vbi9od21vbi5jPTE0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGh3bW9uX2NsYXNzID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9od21vbi5jLTE0Ny1cXG5kcml2ZXJzL2h3bW9uL2h3bW9uLmM6MTQ4OnN0YXRpYyBERUZJTkVfSURBKGh3bW9uX2lkYSk7XFxuZHJpdmVycy9od21vbi9od21vbi5jLTE0OS1cXG4tLVxcbmRyaXZlcnMvaHdtb24vaWJtYWVtLmMtNzgtXFxuZHJpdmVycy9od21vbi9pYm1hZW0uYzo3OTpzdGF0aWMgREVGSU5FX0lEQShhZW1faWRhKTtcXG5kcml2ZXJzL2h3bW9uL2libWFlbS5jLTgwLVxcbi0tXFxuZHJpdmVycy9od3RyYWNpbmcvaW50ZWxfdGgvY29yZS5jPTI1PW1vZHVsZV9wYXJhbShob3N0X21vZGUsIGJvb2wsIDA0NDQpO1xcbmRyaXZlcnMvaHd0cmFjaW5nL2ludGVsX3RoL2NvcmUuYy0yNi1cXG5kcml2ZXJzL2h3dHJhY2luZy9pbnRlbF90aC9jb3JlLmM6Mjc6c3RhdGljIERFRklORV9JREEoaW50ZWxfdGhfaWRhKTtcXG5kcml2ZXJzL2h3dHJhY2luZy9pbnRlbF90aC9jb3JlLmMtMjgtXFxuLS1cXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jLTQxLS8qIElEQSB0byBhc3NpZ24gZWFjaCByZWdpc3RlcmVkIGRldmljZSBhIHVuaXF1ZSBpZCAqL1xcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1jb3JlLmM6NDI6c3RhdGljIERFRklORV9JREEoaWlvX2lkYSk7XFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYy00My1cXG4tLVxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMtMzMtXFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYzozNDpzdGF0aWMgREVGSU5FX0lEQShpaW9fdHJpZ2dlcl9pZGEpO1xcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMtMzUtXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jPTE0OT1zdGF0aWMgZGV2X3QgZHluYW1pY19pc3NtX2RldjtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jLTE1MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jOjE1MTpzdGF0aWMgREVGSU5FX0lEQSh1bWFkX2lkYSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYy0xNTItXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jPTc2PXN0YXRpYyBkZXZfdCBkeW5hbWljX3V2ZXJic19kZXY7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYy03Ny1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jOjc4OnN0YXRpYyBERUZJTkVfSURBKHV2ZXJic19pZGEpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMtNzktc3RhdGljIGludCBpYl91dmVyYnNfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9pbnB1dC5jPTM1PU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvaW5wdXQuYy0zOC0jZGVmaW5lIElOUFVUX0ZJUlNUX0RZTkFNSUNfREVWXFx0XFx0MjU2XFxuZHJpdmVycy9pbnB1dC9pbnB1dC5jOjM5OnN0YXRpYyBERUZJTkVfSURBKGlucHV0X2lkYSk7XFxuZHJpdmVycy9pbnB1dC9pbnB1dC5jLTQwLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmM9MTYyNj1zdGF0aWMgaW50IHhwYWRfaW5pdF9mZihzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jLTE2MzItXFxuZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmM6MTYzMzpzdGF0aWMgREVGSU5FX0lEQSh4cGFkX3BhZF9zZXEpO1xcbmRyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jLTE2MzQtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTY0PWludCBhbWRfaW9tbXVfbWF4X2dseF92YWwgPSAtMTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNjktICovXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo3MDpERUZJTkVfSURBKHBkb21faWRzKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTcxLVxcbi0tXFxuZHJpdmVycy9pb21tdS9pbnRlbC9kbWFyLmM9NjQ9c3RhdGljIGludCBkbWFyX2Rldl9zY29wZV9zdGF0dXMgPSAxO1xcbmRyaXZlcnMvaW9tbXUvaW50ZWwvZG1hci5jOjY1OnN0YXRpYyBERUZJTkVfSURBKGRtYXJfc2VxX2lkcyk7XFxuZHJpdmVycy9pb21tdS9pbnRlbC9kbWFyLmMtNjYtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11LmM9NDI9c3RhdGljIHN0cnVjdCBrc2V0ICppb21tdV9ncm91cF9rc2V0O1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYzo0MzpzdGF0aWMgREVGSU5FX0lEQShpb21tdV9ncm91cF9pZGEpO1xcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYzo0NDpzdGF0aWMgREVGSU5FX0lEQShpb21tdV9nbG9iYWxfcGFzaWRfaWRhKTtcXG5kcml2ZXJzL2lvbW11L2lvbW11LmMtNDUtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYz0zOT1zdGF0aWMgc3RydWN0IG1vY2tfYnVzX3R5cGUgaW9tbXVmZF9tb2NrX2J1c190eXBlID0ge1xcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmMtNDQtXFxuZHJpdmVycy9pb21tdS9pb21tdWZkL3NlbGZ0ZXN0LmM6NDU6c3RhdGljIERFRklORV9JREEobW9ja19kZXZfaWRhKTtcXG5kcml2ZXJzL2lvbW11L2lvbW11ZmQvc2VsZnRlc3QuYy00Ni1cXG4tLVxcbmRyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuYy00Ny0vKiBJT01NVSBQU0NJRCBhbGxvY2F0aW9uIG5hbWVzcGFjZS4gKi9cXG5kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmM6NDg6c3RhdGljIERFRklORV9JREEocmlzY3ZfaW9tbXVfcHNjaWRzKTtcXG5kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMtNDktI2RlZmluZSBSSVNDVl9JT01NVV9NQVhfUFNDSURcXHRcXHQoQklUKDIwKSAtIDEpXFxuLS1cXG5kcml2ZXJzL2lwYWNrL2lwYWNrLmMtMTctXFxuZHJpdmVycy9pcGFjay9pcGFjay5jOjE4OnN0YXRpYyBERUZJTkVfSURBKGlwYWNrX2lkYSk7XFxuZHJpdmVycy9pcGFjay9pcGFjay5jLTE5LVxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmM9MjAyPXN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHZtb3ZwX2xvY2spO1xcbmRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXYzLWl0cy5jLTIwMy1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy12My1pdHMuYzoyMDQ6c3RhdGljIERFRklORV9JREEoaXRzX3ZwZWlkX2lkYSk7XFxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjMtaXRzLmMtMjA1LVxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjUuYz0zND1zdHJ1Y3QgZ2ljdjVfY2hpcF9kYXRhIGdpY3Y1X2dsb2JhbF9kYXRhIF9fcmVhZF9tb3N0bHk7XFxuZHJpdmVycy9pcnFjaGlwL2lycS1naWMtdjUuYy0zNS1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy12NS5jOjM2OnN0YXRpYyBERUZJTkVfSURBKGxwaV9pZGEpO1xcbmRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLXY1LmMtMzctc3RhdGljIHUzMiBudW1fbHBpcyBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5kcml2ZXJzL21jYi9tY2ItY29yZS5jLTE0LVxcbmRyaXZlcnMvbWNiL21jYi1jb3JlLmM6MTU6c3RhdGljIERFRklORV9JREEobWNiX2lkYSk7XFxuZHJpdmVycy9tY2IvbWNiLWNvcmUuYy0xNi1cXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL3N1cGVyLmM9NDg9c3RhdGljIGludCBiY2FjaGVfbWFqb3I7XFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYzo0OTpzdGF0aWMgREVGSU5FX0lEQShiY2FjaGVfZGV2aWNlX2lkeCk7XFxuZHJpdmVycy9tZC9iY2FjaGUvc3VwZXIuYy01MC1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgdW5yZWdpc3Rlcl93YWl0O1xcbi0tXFxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTUzLVxcbmRyaXZlcnMvbWQvZG0tY3J5cHQuYzo1NDpzdGF0aWMgREVGSU5FX0lEQSh3b3JrcXVldWVfaWRhKTtcXG5kcml2ZXJzL21kL2RtLWNyeXB0LmMtNTUtXFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZHZiLXBsbC5jPTIxPXN0cnVjdCBkdmJfcGxsX3ByaXYge1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2R2Yi1wbGwuYy0zNy0jZGVmaW5lIERWQl9QTExfTUFYIDY0XFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2R2Yi1wbGwuYzozODpzdGF0aWMgREVGSU5FX0lEQShwbGxfaWRhKTtcXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZHZiLXBsbC5jLTM5LVxcbi0tXFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yZW5lc2FzL3JjYXItdmluL3JjYXItY29yZS5jLTU3LVxcbmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcmVuZXNhcy9yY2FyLXZpbi9yY2FyLWNvcmUuYzo1ODpzdGF0aWMgREVGSU5FX0lEQShydmluX2lkYSk7XFxuZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yZW5lc2FzL3JjYXItdmluL3JjYXItY29yZS5jLTU5LXN0YXRpYyBERUZJTkVfTVVURVgocnZpbl9ncm91cF9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYz0yND1zdGF0aWMgZGV2X3QgbGlyY19iYXNlX2RldjtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYy0yNi0vKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgYWxsb2NhdGVkIGxpcmMgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYzoyNzpzdGF0aWMgREVGSU5FX0lEQShsaXJjX2lkYSk7XFxuZHJpdmVycy9tZWRpYS9yYy9saXJjX2Rldi5jLTI4LVxcbi0tXFxuZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmM9ODU9c3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciAqbGVkX2ZlZWRiYWNrO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMtODctLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIHJjIGRldmljZXMgKi9cXG5kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYzo4ODpzdGF0aWMgREVGSU5FX0lEQShyY19pZGEpO1xcbmRyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jLTg5LVxcbi0tXFxuZHJpdmVycy9tZmQvaW50ZWwtbHBzcy5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIGludGVsX2xwc3Nfc3BpX2NlbGwgPSB7XFxuLS1cXG5kcml2ZXJzL21mZC9pbnRlbC1scHNzLmMtMTM1LVxcbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYzoxMzY6c3RhdGljIERFRklORV9JREEoaW50ZWxfbHBzc19kZXZpZF9pZGEpO1xcbmRyaXZlcnMvbWZkL2ludGVsLWxwc3MuYy0xMzctc3RhdGljIHN0cnVjdCBkZW50cnkgKmludGVsX2xwc3NfZGVidWdmcztcXG4tLVxcbmRyaXZlcnMvbWlzYy9iY20tdmsvYmNtX3ZrX2Rldi5jLTI0LVxcbmRyaXZlcnMvbWlzYy9iY20tdmsvYmNtX3ZrX2Rldi5jOjI1OnN0YXRpYyBERUZJTkVfSURBKGJjbV92a19pZGEpO1xcbmRyaXZlcnMvbWlzYy9iY20tdmsvYmNtX3ZrX2Rldi5jLTI2LVxcbi0tXFxuZHJpdmVycy9taXNjL2NhcmRyZWFkZXIvYWxjb3JfcGNpLmMtMTktXFxuZHJpdmVycy9taXNjL2NhcmRyZWFkZXIvYWxjb3JfcGNpLmM6MjA6c3RhdGljIERFRklORV9JREEoYWxjb3JfcGNpX2lkcik7XFxuZHJpdmVycy9taXNjL2NhcmRyZWFkZXIvYWxjb3JfcGNpLmMtMjEtXFxuLS1cXG5kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jLTE0LVxcbmRyaXZlcnMvbWlzYy9jYjcxMC9jb3JlLmM6MTU6c3RhdGljIERFRklORV9JREEoY2I3MTBfaWRhKTtcXG5kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jLTE2LVxcbi0tXFxuZHJpdmVycy9taXNjL2R3LXhkYXRhLXBjaWUuYy0yNC1cXG5kcml2ZXJzL21pc2MvZHcteGRhdGEtcGNpZS5jOjI1OnN0YXRpYyBERUZJTkVfSURBKHhkYXRhX2lkYSk7XFxuZHJpdmVycy9taXNjL2R3LXhkYXRhLXBjaWUuYy0yNi1cXG4tLVxcbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYz0xND1zdHJ1Y3QgYXV4X2J1c19kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9taXNjL21jaHBfcGNpMXh4eHgvbWNocF9wY2kxeHh4eF9ncC5jLTE3LVxcbmRyaXZlcnMvbWlzYy9tY2hwX3BjaTF4eHh4L21jaHBfcGNpMXh4eHhfZ3AuYzoxODpzdGF0aWMgREVGSU5FX0lEQShncF9jbGllbnRfaWRhKTtcXG5kcml2ZXJzL21pc2MvbWNocF9wY2kxeHh4eC9tY2hwX3BjaTF4eHh4X2dwLmMtMTktc3RhdGljIGNvbnN0IGNoYXIgYXV4X2Rldl9vdHBfZTJwX25hbWVbMTVdID0gXFxcImdwX290cF9lMnBcXFwiO1xcbi0tXFxuZHJpdmVycy9taXNjL3BjaV9lbmRwb2ludF90ZXN0LmMtMTIyLVxcbmRyaXZlcnMvbWlzYy9wY2lfZW5kcG9pbnRfdGVzdC5jOjEyMzpzdGF0aWMgREVGSU5FX0lEQShwY2lfZW5kcG9pbnRfdGVzdF9pZGEpO1xcbmRyaXZlcnMvbWlzYy9wY2lfZW5kcG9pbnRfdGVzdC5jLTEyNC1cXG4tLVxcbmRyaXZlcnMvbWlzYy9ycG1iLWNvcmUuYy0xNC1cXG5kcml2ZXJzL21pc2MvcnBtYi1jb3JlLmM6MTU6c3RhdGljIERFRklORV9JREEocnBtYl9pZGEpO1xcbmRyaXZlcnMvbWlzYy9ycG1iLWNvcmUuYy0xNi1cXG4tLVxcbmRyaXZlcnMvbWlzYy94aWxpbnhfc2RmZWMuYy0yOS1cXG5kcml2ZXJzL21pc2MveGlsaW54X3NkZmVjLmM6MzA6c3RhdGljIERFRklORV9JREEoZGV2X25ycyk7XFxuZHJpdmVycy9taXNjL3hpbGlueF9zZGZlYy5jLTMxLVxcbi0tXFxuZHJpdmVycy9tbWMvY29yZS9ibG9jay5jPTk5PXN0YXRpYyBpbnQgbWF4X2RldmljZXM7XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL2Jsb2NrLmMtMTAyLVxcbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYzoxMDM6c3RhdGljIERFRklORV9JREEobW1jX2Jsa19pZGEpO1xcbmRyaXZlcnMvbW1jL2NvcmUvYmxvY2suYzoxMDQ6c3RhdGljIERFRklORV9JREEobW1jX3JwbWJfaWRhKTtcXG5kcml2ZXJzL21tYy9jb3JlL2Jsb2NrLmMtMTA1LVxcbi0tXFxuZHJpdmVycy9tbWMvY29yZS9ob3N0LmMtMzMtXFxuZHJpdmVycy9tbWMvY29yZS9ob3N0LmM6MzQ6c3RhdGljIERFRklORV9JREEobW1jX2hvc3RfaWRhKTtcXG5kcml2ZXJzL21tYy9jb3JlL2hvc3QuYy0zNS1cXG4tLVxcbmRyaXZlcnMvbXV4L2NvcmUuYz01ND1zdHJ1Y3QgZGV2bV9tdXhfc3RhdGVfc3RhdGUge1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozOTozNC4zNDU2ODc5NDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk2MzkyNzkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSURBIEluc3RhbmNlcyBpbiB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nOiBhbGwgdGhlc2UgaW5zdGFuY2VzIG9mIGBERUZJTkVfSURBKC4uLilgIOKAkyBhbmQgdGhlcmUgYXJlIHF1aXRlIGEgZmV3IG9mIHRoZW0g4oCTIGFyZSBkZWNsYXJlZCBhdCBmaWxlIHNjb3BlLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyBhIHBhcnRpY3VsYXIgZGVzaWduIHBhdHRlcm4gb3IgYXBwcm9hY2ggdG8gcmVzb3VyY2UgbWFuYWdlbWVudC4gV2hldGhlciB0aGV5J3JlIGBzdGF0aWNgIG9yIHRvcC1sZXZlbCBkb2Vzbid0IGNoYW5nZSB0aGUgc2NvcGUsIHdoaWNoIHJlbWFpbnMgdGhlIGZpbGUuIEl0J3MgYSBwb3RlbnRpYWwgZmxhZyBmb3IgaG93IHRoZXNlIElEQXMgYXJlIGJlaW5nIHVzZWQuIE5vdywgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGhvdyBgREVGSU5FX01UUkVFYCBpcyBiZWluZyB1c2VkLCBhcyBpdCdzIGxpa2VseSByZWxhdGVkLCBhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byB3aWxsIHByb3ZpZGUgdGhlIGFuc3dlciBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzA4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzk6MzYuMzA5NjIwMzM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQzNTAzMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFRklORV9NVFJFRVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q9NTc9Tm9ybWFsIEFQSVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC01OS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0OjYwOlN0YXJ0IGJ5IGluaXRpYWxpc2luZyBhIG1hcGxlIHRyZWUsIGVpdGhlciB3aXRoIERFRklORV9NVFJFRSgpIGZvciBzdGF0aWNhbGx5XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC02MS1hbGxvY2F0ZWQgbWFwbGUgdHJlZXMgb3IgbXRfaW5pdCgpIGZvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgb25lcy4gIEFcXG4tLVxcbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oPTI2MT1zdHJ1Y3QgbWFwbGVfdHJlZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaC0yOTktXFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg6MzAwOiNkZWZpbmUgREVGSU5FX01UUkVFKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oLTMwMS1cXHRzdHJ1Y3QgbWFwbGVfdHJlZSBuYW1lID0gTVRSRUVfSU5JVChuYW1lLCAwKTtcXHRcXHRcXFxcXFxuLS1cXG5saWIvdGVzdF9tYXBsZV90cmVlLmM9MzY0Nj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgYWxsb2NfY3ljbGljX3Rlc3Rpbmcoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbi0tXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jLTM3MTItXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jOjM3MTM6c3RhdGljIERFRklORV9NVFJFRSh0cmVlKTtcXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzcxNC1zdGF0aWMgaW50IF9faW5pdCBtYXBsZV90cmVlX3NlZWQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzk6MzguNTUzMTMxODE1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NDk3ODk0MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaDogV29ydGhGdXp6aW5nID0gZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSB0aGUgY29kZSBhbmQgc2VlIHdoYXQgY2hhbmdlZCwgc3RhcnRpbmcgd2l0aCB0aGUgYERvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3RgIGZpbGUuIEkgdGhlbiBsb29rZWQgYXQgYGxpYi90ZXN0X21hcGxlX3RyZWUuY2AgYW5kIGBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgbWFjcm9zIGFyZSB1c2VkLiBJdCdzIGNsZWFyIHRoYXQgYERFRklORV9NVFJFRWAgYW5kIGBERUZJTkVfSURBYCBhcmUgbm93IGVuZm9yY2luZyBzdGF0aWMgc3RvcmFnZSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgdmVyc2lvbnMuIFRoZSBhZGRpdGlvbiBvZiBgQVNTRVJUX1NUQVRJQ19TVE9SQUdFYCBpcyB0aGUga2V5IGhlcmU7IGl0J3MgYSBjb21waWxlLXRpbWUgY2hlY2sgdXNpbmcgYSBzdGF0aWMgdmFyaWFibGUuIFRoZSBlcnJvciBpbiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCB3YXMgdGhhdCBpdCB1c2VkIGBERUZJTkVfTVRSRUVgIGxvY2FsbHksIHdoaWNoIGlzIG5vdyBpbnZhbGlkLCBhbmQgaXQgd2FzIGNvcnJlY3RlZCBieSBpbml0aWFsaXppbmcgdGhlIGBtYXBsZV90cmVlYCBzdHJ1Y3R1cmUgZGlyZWN0bHkuXG5cbkkgc3RhcnRlZCBkaWdnaW5nIGRlZXBlciB0byBzZWUgaWYgYW55IGNvbXBpbGVkIGNvZGUgY2hhbmdlZCBhbmQgY2hlY2tlZCB0aGUgZGlmZiB0byBjb25maXJtLiBUaGlzIGxlZCBtZSB0byBgaW5jbHVkZS9saW51eC9jb21waWxlci5oYCwgYGluY2x1ZGUvbGludXgvaWRyLmhgLCBhbmQgYGluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oYCwgd2hpY2ggc2hvd2VkIHRoZSBuZXcgYEFTU0VSVF9TVEFUSUNfU1RPUkFHRWAgbWFjcm8uIFRoaXMgbWFjcm8sIGhvd2V2ZXIsIG9ubHkgZ2VuZXJhdGVzIGEgY29tcGlsZS10aW1lIGNoZWNrLCBtYWtpbmcgc3VyZSB0aGF0IHZhcmlhYmxlcyBkZWZpbmVkIHdpdGggYERFRklORV9JREFgIG9yIGBERUZJTkVfTVRSRUVgIGhhdmUgc3RhdGljIHN0b3JhZ2UuIFRoaXMgbWVhbnMgaXQgZW5mb3JjZXMgYSBjb2Rpbmcgc3R5bGUgcmF0aGVyIHRoYW4gY2hhbmdpbmcgcnVudGltZSBiZWhhdmlvci5cblxuVGhlIGNoYW5nZSBpbiBgbGliL2ludGVydmFsX3RyZWVfdGVzdC5jYCBpcyBqdXN0IHJlbW92aW5nIHRoZSB1bm5lZWRlZCBpbml0aWFsIHplcm9pbmcgb2YgYHRyZWVgIG9uIHRoZSBzdGFjaywgd2hpY2ggd2FzIGltbWVkaWF0ZWx5IG92ZXJ3cml0dGVuIGJ5IGBtdF9pbml0X2ZsYWdzYCBiZWZvcmUgdXNlLiBUaGUga2V5IHF1ZXN0aW9uIEkgYXNrZWQgbXlzZWxmIHdhcyB3aGV0aGVyIHRoZSBgaW50ZXJ2YWxfdHJlZV90ZXN0LmNgIG1vZHVsZSBpcyBldmVyIGFjdHVhbGx5IHVzZWQgYnkgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBGcm9tIGxvb2tpbmcgYXQgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGJ1aWxkIGNvbmZpZyBpdCBsb29rcyBsaWtlIG5vLiBFdmVuIGlmIGl0IHdhcyBsb2FkZWQsIHRoZSBjaGFuZ2UgbWFkZSBubyBmdW5jdGlvbmFsIGRpZmZlcmVuY2UgaW4gdGhlIHRlc3QgbW9kdWxlIGFzIHRoZSBzdGFjayB2YXJpYWJsZSBgdHJlZWAgd2FzIGluaXRpYWxpemVkIHJlZHVuZGFudGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGBzcGFuX2l0ZXJhdGlvbl9jaGVja2AgZnVuY3Rpb24uIFRoZSBjb2RlIHBhdGhzIGFyZW4ndCByZWFjaGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBjaGFuZ2VzIHdvbid0IGJlIGV4cG9zZWQgYnkgYSBmdXp6ZXIuIEFsbCB0aGUgY2hhbmdlcyB1bmRlciBgdG9vbHMvYCBhcmUgdXNlci1zcGFjZSB0ZXN0cywgd2hpY2ggYXJlIGlycmVsZXZhbnQgaGVyZS5cblxuSSB0aGVuIHJldmlzaXRlZCB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIHNvbWV0aGluZyBzaG91bGQgYmUgZnV6emVkLCBhcyBkZWZpbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJIGNhcmVmdWxseSByZXZpZXdlZCB0aGUgc2VjdGlvbiBvbiB3aGVuIHRvICpub3QqIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgbW9kaWZpY2F0aW9ucyBmYWxsIHNxdWFyZWx5IGludG8gbm9uLWtlcm5lbCBjaGFuZ2VzLCBhbmQgY2hhbmdlcyBpbiB1c2VyLXNwYWNlIGNvZGUuIFRoZSBjb21waWxlLXRpbWUgY2hlY2tzIGFsc28gYXJlIGFsc28gY2F0ZWdvcml6ZWQgYXMgbm90IHdvcnRoIGZ1enppbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIHJlYWNoIHRoZSBjb21waWxlLXRpbWUgY2hlY2tzIHVzaW5nIGEgcnVudGltZSBmdXp6ZXIuXG5cbkluIGxpZ2h0IG9mIGV2ZXJ5dGhpbmcsIEkgc2VlIHRoYXQgdGhlIGBBU1NFUlRfU1RBVElDX1NUT1JBR0VgIG1hY3JvIGlzIGEgY29tcGlsZS10aW1lIGNoZWNrOyBpdCBkb2Vzbid0IGVtaXQgYW55IGV4ZWN1dGFibGUgaW5zdHJ1Y3Rpb25zLCBkb2Vzbid0IGFmZmVjdCBydW50aW1lIGNvbnRyb2wgZmxvdywgZG9lc24ndCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgZG9lc24ndCBleGVjdXRlIGF0IHJ1bnRpbWUuIFRoZSBjaGFuZ2VzIGluIGB0b29scy9gIGFyZSBpcnJlbGV2YW50IGJlY2F1c2UgdGhleSBleGlzdCB3aXRoaW4gdGhlIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2UgaW4gYGxpYi9pbnRlcnZhbF90cmVlX3Rlc3QuY2AgaXMgYSBub24tZnVuY3Rpb25hbCByZWZhY3RvcmluZyBpbnNpZGUgYSB0ZXN0IG1vZHVsZSB0aGF0IGlzIG5vdCBhY2Nlc3NpYmxlIGFuZCB1bnJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgcnVudGltZSBzZXR1cC5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBwYXRjaCBkb2Vzbid0IHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZXJlIGFyZSBubyBydW50aW1lIGNoYW5nZXMsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNjEsIk91dHB1dFRva2VucyI6MTUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjozOTo1NC4wNTEwMjkwMDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEFTU0VSVF9TVEFUSUNfU1RPUkFHRSgpLCB3aGljaCBpcyBhIHB1cmVseSBjb21waWxlLXRpbWUgc3RhdGljIGNoZWNrIGVuZm9yY2luZyBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBvbiBERUZJTkVfSURBIGFuZCBERUZJTkVfTVRSRUUgZGVjbGFyYXRpb25zLiBJdCBlbWl0cyBubyBydW50aW1lIGluc3RydWN0aW9ucywgZGVmZW5zaXZlIGFzc2VydGlvbnMsIG9yIGNvbnRyb2wtZmxvdyBtb2RpZmljYXRpb25zLiBUaGUgY2hhbmdlcyBpbiB0b29scy8gYWZmZWN0IG9ubHkgdXNlci1zcGFjZSB0ZXN0cywgYW5kIHRoZSBjaGFuZ2UgaW4gbGliL2ludGVydmFsX3RyZWVfdGVzdC5jIGFkanVzdHMgYSBzdGFuZGFsb25lIHRlc3QgbW9kdWxlIChleGVjdXRlZCBvbmx5IG9uIG1vZHVsZSBpbml0L2Jvb3QgYW5kIGltbWVkaWF0ZWx5IHVubG9hZGVkKSB0byBjb25mb3JtIHRvIHRoZSBjb21waWxlLXRpbWUgY2hlY2sgd2l0aG91dCBhbHRlcmluZyBhbnkgZnVuY3Rpb25hbCBrZXJuZWwgbG9naWMuIFRodXMsIG5vIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd29ydGggZnV6emluZyBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgQVNTRVJUX1NUQVRJQ19TVE9SQUdFKCksIHdoaWNoIGlzIGEgcHVyZWx5IGNvbXBpbGUtdGltZSBzdGF0aWMgY2hlY2sgZW5mb3JjaW5nIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIG9uIERFRklORV9JREEgYW5kIERFRklORV9NVFJFRSBkZWNsYXJhdGlvbnMuIEl0IGVtaXRzIG5vIHJ1bnRpbWUgaW5zdHJ1Y3Rpb25zLCBkZWZlbnNpdmUgYXNzZXJ0aW9ucywgb3IgY29udHJvbC1mbG93IG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGluIHRvb2xzLyBhZmZlY3Qgb25seSB1c2VyLXNwYWNlIHRlc3RzLCBhbmQgdGhlIGNoYW5nZSBpbiBsaWIvaW50ZXJ2YWxfdHJlZV90ZXN0LmMgYWRqdXN0cyBhIHN0YW5kYWxvbmUgdGVzdCBtb2R1bGUgKGV4ZWN1dGVkIG9ubHkgb24gbW9kdWxlIGluaXQvYm9vdCBhbmQgaW1tZWRpYXRlbHkgdW5sb2FkZWQpIHRvIGNvbmZvcm0gdG8gdGhlIGNvbXBpbGUtdGltZSBjaGVjayB3aXRob3V0IGFsdGVyaW5nIGFueSBmdW5jdGlvbmFsIGtlcm5lbCBsb2dpYy4gVGh1cywgbm8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3b3J0aCBmdXp6aW5nIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6Mzk6NTQuMDUxMDU4NzI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkhx2r[1] Phase: Running StartedAt: 2026-09-11 22:40:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkhx2r[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 22:40:04 +0000 UTC FinishedAt: 2026-09-11 22:40:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}