ZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvLnN2IGIvdmVyaWxvZy9ydGwvbGliL2FzeW5jX2ZpZm8uc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ2ZGMyOQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvLnN2CkBAIC0wLDAgKzEsMzIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBBU1lOQyBGSUZPCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKKyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEZXNjcmlwdGlvbjogQVNZTkMgRklGTyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIGFzeW5jIEZJRk8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vYHRpbWVzY2FsZSAgMW5zLzFwcworCittb2R1bGUgYXN5bmNfZmlmbyAod3JfY2xrLAorICAgICAgICAgICAgICAgICAgIHdyX3Jlc2V0X24sCisgICAgICAgICAgICAgICAgICAgd3JfZW4sCisgICAgICAgICAgICAgICAgICAgd3JfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBmdWxsLCAgICAgICAgICAgICAgICAgLy8gc3luYydlZCB0byB3cl9jbGsKKyAgICAgICAgICAgICAgICAgICBhZnVsbCwgICAgICAgICAgICAgICAgIC8vIHN5bmMnZWQgdG8gd3JfY2xrCisgICAgICAgICAgICAgICAgICAgcmRfY2xrLAorICAgICAgICAgICAgICAgICAgIHJkX3Jlc2V0X24sCisgICAgICAgICAgICAgICAgICAgcmRfZW4sCisgICAgICAgICAgICAgICAgICAgZW1wdHksICAgICAgICAgICAgICAgIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgYWVtcHR5LCAgICAgICAgICAgICAgICAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIHJkX2RhdGEpOworCisgICBwYXJhbWV0ZXIgVyA9IDQnZDg7CisgICBwYXJhbWV0ZXIgRFAgPSAzJ2Q0OworICAgcGFyYW1ldGVyIFdSX0ZBU1QgPSAxJ2IxOworICAgcGFyYW1ldGVyIFJEX0ZBU1QgPSAxJ2IxOworICAgcGFyYW1ldGVyIEZVTExfRFAgPSBEUDsKKyAgIHBhcmFtZXRlciBFTVBUWV9EUCA9IDEnYjA7CisKKyAgIHBhcmFtZXRlciBBVyA9IChEUCA9PSAyKSAgID8gMSA6IAorCQkgIChEUCA9PSA0KSAgID8gMiA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gOCkgICA/IDMgOgorICAgICAgICAgICAgICAgICAgKERQID09IDE2KSAgPyA0IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAzMikgID8gNSA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gNjQpICA/IDYgOgorICAgICAgICAgICAgICAgICAgKERQID09IDEyOCkgPyA3IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAyNTYpID8gOCA6IDA7CisKKyAgIG91dHB1dCBbVy0xIDogMF0gIHJkX2RhdGE7CisgICBpbnB1dCBbVy0xIDogMF0gICB3cl9kYXRhOworICAgaW5wdXQgICAgICAgICAgICAgd3JfY2xrLCB3cl9yZXNldF9uLCB3cl9lbiwgcmRfY2xrLCByZF9yZXNldF9uLAorICAgICAgICAgICAgICAgICAgICAgcmRfZW47CisgICBvdXRwdXQgICAgICAgICAgICBmdWxsLCBlbXB0eTsKKyAgIG91dHB1dCAgICAgICAgICAgIGFmdWxsLCBhZW1wdHk7ICAgICAgIC8vIGFib3V0IGZ1bGwgYW5kIGFib3V0IHRvIGVtcHR5CisKKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorCisgICBpbml0aWFsIGJlZ2luCisgICAgICBpZiAoQVcgPT0gMCkgYmVnaW4KKyAgICAgICAgICRkaXNwbGF5ICgiJW0gOiBFUlJPUiEhISBGaWZvIGRlcHRoICVkIG5vdCBpbiByYW5nZSAyIHRvIDI1NiIsIERQKTsKKyAgICAgIGVuZCAvLyBpZiAoQVcgPT0gMCkKKyAgIGVuZCAvLyBpbml0aWFsIGJlZ2luCisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCisgICByZWcgW1ctMSA6IDBdICAgIG1lbVtEUC0xIDogMF07CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiB3cml0ZSBzaWRlICoqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gc3luY19yZF9wdHJfMCwgc3luY19yZF9wdHJfMTsgCisgICB3aXJlIFtBVzowXSBzeW5jX3JkX3B0cjsKKyAgIHJlZyBbQVc6MF0gd3JfcHRyLCBncmV5X3dyX3B0cjsKKyAgIHJlZyBbQVc6MF0gZ3JleV9yZF9wdHI7CisgICByZWcgZnVsbF9xOworICAgd2lyZSBmdWxsX2M7CisgICB3aXJlIGFmdWxsX2M7CisgICB3aXJlIFtBVzowXSB3cl9wdHJfaW5jID0gd3JfcHRyICsgMSdiMTsKKyAgIHdpcmUgW0FXOjBdIHdyX2NudCA9IGdldF9jbnQod3JfcHRyLCBzeW5jX3JkX3B0cik7CisKKyAgIGFzc2lnbiBmdWxsX2MgID0gKHdyX2NudCA9PSBGVUxMX0RQKSA/IDEnYjEgOiAxJ2IwOworICAgYXNzaWduIGFmdWxsX2MgPSAod3JfY250ID09IEZVTExfRFAtMSkgPyAxJ2IxIDogMSdiMDsKKworCisgICBhbHdheXMgQChwb3NlZGdlIHdyX2NsayBvciBuZWdlZGdlIHdyX3Jlc2V0X24pIGJlZ2luCisJaWYgKCF3cl9yZXNldF9uKSBiZWdpbgorCQl3cl9wdHIgPD0gMDsKKwkJZ3JleV93cl9wdHIgPD0gMDsKKwkJZnVsbF9xIDw9IDA7CQorCWVuZAorCWVsc2UgaWYgKHdyX2VuKSBiZWdpbgorCQl3cl9wdHIgPD0gd3JfcHRyX2luYzsKKwkJZ3JleV93cl9wdHIgPD0gYmluMmdyZXkod3JfcHRyX2luYyk7CisJCWlmICh3cl9jbnQgPT0gKEZVTExfRFAtMSkpIGJlZ2luCisJCQlmdWxsX3EgPD0gMSdiMTsKKwkJZW5kCisJZW5kCisJZWxzZSBiZWdpbgorCSAgICAJaWYgKGZ1bGxfcSAmJiAod3JfY250PEZVTExfRFApKSBiZWdpbgorCQkJZnVsbF9xIDw9IDEnYjA7CisJICAgICAJZW5kCisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gZnVsbCAgPSAoV1JfRkFTVCA9PSAxKSA/IGZ1bGxfYyA6IGZ1bGxfcTsKKyAgICBhc3NpZ24gYWZ1bGwgPSBhZnVsbF9jOworCisgICAgYWx3YXlzIEAocG9zZWRnZSB3cl9jbGspIGJlZ2luCisJaWYgKHdyX2VuKSBiZWdpbgorCQltZW1bd3JfcHRyW0FXLTE6MF1dIDw9IHdyX2RhdGE7CisJZW5kCisgICAgZW5kCisKKyAgICB3aXJlIFtBVzowXSBncmV5X3JkX3B0cl9kbHkgOworICAgIGFzc2lnbiAjMSBncmV5X3JkX3B0cl9kbHkgPSBncmV5X3JkX3B0cjsKKworICAgIC8vIHJlYWQgcG9pbnRlciBzeW5jaHJvbml6ZXIKKyAgICBhbHdheXMgQChwb3NlZGdlIHdyX2NsayBvciBuZWdlZGdlIHdyX3Jlc2V0X24pIGJlZ2luCisJaWYgKCF3cl9yZXNldF9uKSBiZWdpbgorCQlzeW5jX3JkX3B0cl8wIDw9IDA7CisJCXN5bmNfcmRfcHRyXzEgPD0gMDsKKwllbmQKKwllbHNlIGJlZ2luCisJCXN5bmNfcmRfcHRyXzAgPD0gZ3JleV9yZF9wdHJfZGx5OwkJCisJCXN5bmNfcmRfcHRyXzEgPD0gc3luY19yZF9wdHJfMDsKKwllbmQKKyAgICBlbmQKKworICAgIGFzc2lnbiBzeW5jX3JkX3B0ciA9IGdyZXkyYmluKHN5bmNfcmRfcHRyXzEpOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqIHJlYWQgc2lkZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gc3luY193cl9wdHJfMCwgc3luY193cl9wdHJfMTsgCisgICB3aXJlIFtBVzowXSBzeW5jX3dyX3B0cjsKKyAgIHJlZyBbQVc6MF0gcmRfcHRyOworICAgcmVnIGVtcHR5X3E7CisgICB3aXJlIGVtcHR5X2M7CisgICB3aXJlIGFlbXB0eV9jOworICAgd2lyZSBbQVc6MF0gcmRfcHRyX2luYyA9IHJkX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXSBzeW5jX3dyX3B0cl9kZWMgPSBzeW5jX3dyX3B0ciAtIDEnYjE7CisgICB3aXJlIFtBVzowXSByZF9jbnQgPSBnZXRfY250KHN5bmNfd3JfcHRyLCByZF9wdHIpOworIAorICAgYXNzaWduIGVtcHR5X2MgID0gKHJkX2NudCA9PSAwKSA/IDEnYjEgOiAxJ2IwOworICAgYXNzaWduIGFlbXB0eV9jID0gKHJkX2NudCA9PSAxKSA/IDEnYjEgOiAxJ2IwOworCisgICBhbHdheXMgQChwb3NlZGdlIHJkX2NsayBvciBuZWdlZGdlIHJkX3Jlc2V0X24pIGJlZ2luCisgICAgICBpZiAoIXJkX3Jlc2V0X24pIGJlZ2luCisgICAgICAgICByZF9wdHIgPD0gMDsKKwkgZ3JleV9yZF9wdHIgPD0gMDsKKwkgZW1wdHlfcSA8PSAxJ2IxOworICAgICAgZW5kCisgICAgICBlbHNlIGJlZ2luCisgICAgICAgICBpZiAocmRfZW4pIGJlZ2luCisgICAgICAgICAgICByZF9wdHIgPD0gcmRfcHRyX2luYzsKKyAgICAgICAgICAgIGdyZXlfcmRfcHRyIDw9IGJpbjJncmV5KHJkX3B0cl9pbmMpOworICAgICAgICAgICAgaWYgKHJkX2NudD09KEVNUFRZX0RQKzEpKSBiZWdpbgorICAgICAgICAgICAgICAgZW1wdHlfcSA8PSAxJ2IxOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgIGlmIChlbXB0eV9xICYmIChyZF9jbnQhPUVNUFRZX0RQKSkgYmVnaW4KKwkgICAgICBlbXB0eV9xIDw9IDEnYjA7CisJICAgIGVuZAorICAgICAgICAgZW5kCisgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gZW1wdHkgID0gKFJEX0ZBU1QgPT0gMSkgPyBlbXB0eV9jIDogZW1wdHlfcTsKKyAgICBhc3NpZ24gYWVtcHR5ID0gYWVtcHR5X2M7CisKKyAgICByZWcgW1ctMSA6IDBdICByZF9kYXRhX3E7CisKKyAgIHdpcmUgW1ctMSA6IDBdIHJkX2RhdGFfYyA9IG1lbVtyZF9wdHJbQVctMTowXV07CisgICBhbHdheXMgQChwb3NlZGdlIHJkX2NsaykgYmVnaW4KKwlyZF9kYXRhX3EgPD0gcmRfZGF0YV9jOworICAgZW5kCisgICBhc3NpZ24gcmRfZGF0YSAgPSAoUkRfRkFTVCA9PSAxKSA/IHJkX2RhdGFfYyA6IHJkX2RhdGFfcTsKKworICAgIHdpcmUgW0FXOjBdIGdyZXlfd3JfcHRyX2RseSA7CisgICAgYXNzaWduICMxIGdyZXlfd3JfcHRyX2RseSA9ICBncmV5X3dyX3B0cjsKKworICAgIC8vIHdyaXRlIHBvaW50ZXIgc3luY2hyb25pemVyCisgICAgYWx3YXlzIEAocG9zZWRnZSByZF9jbGsgb3IgbmVnZWRnZSByZF9yZXNldF9uKSBiZWdpbgorCWlmICghcmRfcmVzZXRfbikgYmVnaW4KKwkgICBzeW5jX3dyX3B0cl8wIDw9IDA7CisJICAgc3luY193cl9wdHJfMSA8PSAwOworCWVuZAorCWVsc2UgYmVnaW4KKwkgICBzeW5jX3dyX3B0cl8wIDw9IGdyZXlfd3JfcHRyX2RseTsJCQorCSAgIHN5bmNfd3JfcHRyXzEgPD0gc3luY193cl9wdHJfMDsKKwllbmQKKyAgICBlbmQKKyAgICBhc3NpZ24gc3luY193cl9wdHIgPSBncmV5MmJpbihzeW5jX3dyX3B0cl8xKTsKKworCQorLyoqKioqKioqKioqKioqKioqKioqKioqKiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZnVuY3Rpb24gW0FXOjBdIGJpbjJncmV5OworaW5wdXQgW0FXOjBdIGJpbjsKK3JlZyBbODowXSBiaW5fODsKK3JlZyBbODowXSBncmV5Xzg7CitiZWdpbgorCWJpbl84ID0gYmluOworCWdyZXlfOFsxOjBdID0gZG9fZ3JleShiaW5fOFsyOjBdKTsKKwlncmV5XzhbMzoyXSA9IGRvX2dyZXkoYmluXzhbNDoyXSk7CisJZ3JleV84WzU6NF0gPSBkb19ncmV5KGJpbl84WzY6NF0pOworCWdyZXlfOFs3OjZdID0gZG9fZ3JleShiaW5fOFs4OjZdKTsKKwlncmV5XzhbOF0gPSBiaW5fOFs4XTsKKwliaW4yZ3JleSA9IGdyZXlfODsKK2VuZAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gW0FXOjBdIGdyZXkyYmluOworaW5wdXQgW0FXOjBdIGdyZXk7CityZWcgWzg6MF0gZ3JleV84OworcmVnIFs4OjBdIGJpbl84OworYmVnaW4KKwlncmV5XzggPSBncmV5OworCWJpbl84WzhdID0gZ3JleV84WzhdOworCWJpbl84Wzc6Nl0gPSBkb19iaW4oe2Jpbl84WzhdLCBncmV5XzhbNzo2XX0pOworCWJpbl84WzU6NF0gPSBkb19iaW4oe2Jpbl84WzZdLCBncmV5XzhbNTo0XX0pOworCWJpbl84WzM6Ml0gPSBkb19iaW4oe2Jpbl84WzRdLCBncmV5XzhbMzoyXX0pOworCWJpbl84WzE6MF0gPSBkb19iaW4oe2Jpbl84WzJdLCBncmV5XzhbMTowXX0pOworCWdyZXkyYmluID0gYmluXzg7CitlbmQKK2VuZGZ1bmN0aW9uCisKKworZnVuY3Rpb24gWzE6MF0gZG9fZ3JleTsKK2lucHV0IFsyOjBdIGJpbjsKK2JlZ2luCisJaWYgKGJpblsyXSkgYmVnaW4gIC8vIGRvIHJldmVyc2UgZ3JleQorCQljYXNlIChiaW5bMTowXSkgCisJCQkyJ2IwMDogZG9fZ3JleSA9IDInYjEwOworCQkJMidiMDE6IGRvX2dyZXkgPSAyJ2IxMTsKKwkJCTInYjEwOiBkb19ncmV5ID0gMidiMDE7CisJCQkyJ2IxMTogZG9fZ3JleSA9IDInYjAwOworCQllbmRjYXNlCisJZW5kCisJZWxzZSBiZWdpbgorCQljYXNlIChiaW5bMTowXSkgCisJCQkyJ2IwMDogZG9fZ3JleSA9IDInYjAwOworCQkJMidiMDE6IGRvX2dyZXkgPSAyJ2IwMTsKKwkJCTInYjEwOiBkb19ncmV5ID0gMidiMTE7CisJCQkyJ2IxMTogZG9fZ3JleSA9IDInYjEwOworCQllbmRjYXNlCisJZW5kCitlbmQKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIFsxOjBdIGRvX2JpbjsKK2lucHV0IFsyOjBdIGdyZXk7CitiZWdpbgorCWlmIChncmV5WzJdKSBiZWdpbgkvLyBhY3R1YWxseSBiaW5bMl0KKwkJY2FzZSAoZ3JleVsxOjBdKQorCQkJMidiMTA6IGRvX2JpbiA9IDInYjAwOworCQkJMidiMTE6IGRvX2JpbiA9IDInYjAxOworCQkJMidiMDE6IGRvX2JpbiA9IDInYjEwOworCQkJMidiMDA6IGRvX2JpbiA9IDInYjExOworCQllbmRjYXNlCisJZW5kCisJZWxzZSBiZWdpbgorCQljYXNlIChncmV5WzE6MF0pCisJCQkyJ2IwMDogZG9fYmluID0gMidiMDA7CisJCQkyJ2IwMTogZG9fYmluID0gMidiMDE7CisJCQkyJ2IxMTogZG9fYmluID0gMidiMTA7CisJCQkyJ2IxMDogZG9fYmluID0gMidiMTE7CisJCWVuZGNhc2UKKwllbmQKK2VuZAorZW5kZnVuY3Rpb24KKwkJCQorZnVuY3Rpb24gW0FXOjBdIGdldF9jbnQ7CitpbnB1dCBbQVc6MF0gd3JfcHRyLCByZF9wdHI7CitiZWdpbgorCWlmICh3cl9wdHIgPj0gcmRfcHRyKSBiZWdpbgorCQlnZXRfY250ID0gKHdyX3B0ciAtIHJkX3B0cik7CQorCWVuZAorCWVsc2UgYmVnaW4KKwkJZ2V0X2NudCA9IERQKjIgLSAocmRfcHRyIC0gd3JfcHRyKTsKKwllbmQKK2VuZAorZW5kZnVuY3Rpb24KKworLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYWx3YXlzIEAocG9zZWRnZSB3cl9jbGspIGJlZ2luCisgICBpZiAod3JfZW4gJiYgZnVsbCkgYmVnaW4KKyAgICAgICRkaXNwbGF5KCR0aW1lLCAiJW0gRXJyb3IhIGFmaWZvIG92ZXJmbG93ISIpOworICAgICAgJHN0b3A7CisgICBlbmQKK2VuZAorCithbHdheXMgQChwb3NlZGdlIHJkX2NsaykgYmVnaW4KKyAgIGlmIChyZF9lbiAmJiBlbXB0eSkgYmVnaW4KKyAgICAgICRkaXNwbGF5KCR0aW1lLCAiJW0gZXJyb3IhIGFmaWZvIHVuZGVyZmxvdyEiKTsKKyAgICAgICRzdG9wOworICAgZW5kCitlbmQKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX2ZpZm8uc3YgYi92ZXJpbG9nL3J0bC9saWIvc3luY19maWZvLnN2CmluZGV4IGZiOTM0YTIuLjJiOTZiZmMgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX2ZpZm8uc3YKKysrIGIvdmVyaWxvZy9ydGwvbGliL3N5bmNfZmlmby5zdgpAQCAtMSwxNDIgKzEsMTQ4IEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBZaUZpdmUgY29yZXMgY29tbW9uIGxpYnJhcnkgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICBTeW5jIEZpZm8gd2l0aCBmdWxsIGFuZCBlbXB0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi0vLy8vICBSZXZpc2lvbiA6IEp1bmUgNywgMjAyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vIAotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLwotLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLwotLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLwotLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLwotLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLwotLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLwotLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLwotLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLwotLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLwotLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLwotLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLwotLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLwotLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLwotLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1tb2R1bGUgc3luY19maWZvICMoCi0gICAgICBwYXJhbWV0ZXIgIERBVEFfV0lEVEggID0gMzIsIC8vIERhdGEgV2lkdGgKLSAgICAgIHBhcmFtZXRlciAgQUREUl9XSURUSCAgID0gMSwgIC8vIEFkZHJlc3MgV2lkdGgKLSAgICAgIHBhcmFtZXRlciAgRklGT19ERVBUSCAgID0gMiAvLyBGSUZPIERFUFRICi0JCi0pKAotICAgICAgIG91dHB1dCBbREFUQV9XSURUSC0xOjBdIGRvdXQsCi0gICAgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgIHJzdG4sCi0gICAgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgIGNsaywKLSAgICAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgd3JfZW4sIC8vIFdyaXRlCi0gICAgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgIHJkX2VuLCAvLyBSZWFkCi0gICAgICAgaW5wdXQgW0RBVEFfV0lEVEgtMTowXSAgZGluLAotICAgICAgIG91dHB1dCAgICAgICAgICAgICAgICAgIGZ1bGwsCi0gICAgICAgb3V0cHV0ICAgICAgICAgICAgICAgICAgZW1wdHkKLSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKKyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEZXNjcmlwdGlvbjogU1lOQyBGSUZPIAorICBQYXJhbWV0ZXJzOgorICAgICAgVyA6IFdpZHRoIChpbnRlZ2VyKQorICAgICAgRCA6IERlcHRoIChpbnRlZ2VyLCBwb3dlciBvZiAyLCA0IHRvIDI1NikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLXJlZyBbREFUQV9XSURUSC0xOjBdICByYW0gW0ZJRk9fREVQVEgtMTowXTsKLXJlZyBbQUREUl9XSURUSC0xOjBdICB3cHRyOyAvLyB3cml0ZSBwdHIKLXJlZyBbQUREUl9XSURUSC0xOjBdICBycHRyOyAvLyB3cml0ZSBwdHIKLXJlZyBbQUREUl9XSURUSDowXSAgICBzdGF0dXNfY250OyAvLyBzdGF0dXMgY291bnRlcgotcmVnICAgICAgICAgICAgICAgICAgIGVtcHR5OwotcmVnICAgICAgICAgICAgICAgICAgIGZ1bGw7Cittb2R1bGUgc3luY19maWZvIChjbGssCisJICAgICAgICAgIHJlc2V0X24sCisJCSAgd3JfZW4sCisJCSAgd3JfZGF0YSwKKwkJICBmdWxsLAorCQkgIGVtcHR5LAorCQkgIHJkX2VuLAorCQkgIHJkX2RhdGEpOwogCi0gCi0gLy8tLS0tLS0tLS0tLUNvZGUgU3RhcnQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBhbHdheXMgQCAobmVnZWRnZSByc3RuIG9yIHBvc2VkZ2UgY2xrKQotIGJlZ2luIDogV1JJVEVfUE9JTlRFUgotICAgaWYgKHJzdG49PTEnYjApIGJlZ2luCi0gICAgIHdwdHIgPD0gMDsKLSAgIGVuZCBlbHNlIGlmICh3cl9lbiApIGJlZ2luCi0gICAgIHdwdHIgPD0gd3B0ciArIDE7CisgICBwYXJhbWV0ZXIgVyA9IDg7CisgICBwYXJhbWV0ZXIgRCA9IDQ7CisKKyAgIHBhcmFtZXRlciBBVyA9IChEID09IDQpICAgPyAyIDoKKwkJICAoRCA9PSA4KSAgID8gMyA6CisJCSAgKEQgPT0gMTYpICA/IDQgOgorCQkgIChEID09IDMyKSAgPyA1IDoKKwkJICAoRCA9PSA2NCkgID8gNiA6CisJCSAgKEQgPT0gMTI4KSA/IDcgOgorCQkgIChEID09IDI1NikgPyA4IDogMDsKKyAgIAorICAgb3V0cHV0IFtXLTEgOiAwXSAgcmRfZGF0YTsKKyAgIGlucHV0IFtXLTEgOiAwXSAgIHdyX2RhdGE7CisgICBpbnB1dCAJICAgICBjbGssIHJlc2V0X24sIHdyX2VuLCByZF9lbjsKKyAgIG91dHB1dCAJICAgICBmdWxsLCBlbXB0eTsKKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorCisgICBpbml0aWFsIGJlZ2luCisgICAgICBpZiAoQVcgPT0gMCkgYmVnaW4KKwkgJGRpc3BsYXkgKCIlbSA6IEVSUk9SISEhIEZpZm8gZGVwdGggJWQgbm90IGluIHJhbmdlIDQgdG8gMjU2IiwgRCk7CisgICAgICBlbmQgLy8gaWYgKEFXID09IDApCisgICBlbmQgLy8gaW5pdGlhbCBiZWdpbgorCisgICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworCisgICByZWcgW1ctMSA6IDBdICAgIG1lbVtELTEgOiAwXTsKKyAgIHJlZyBbQVctMSA6IDBdICAgcmRfcHRyLCB3cl9wdHI7CisgICByZWcJIAkgICAgZnVsbCwgZW1wdHk7CisKKyAgIHdpcmUgW1ctMSA6IDBdICAgcmRfZGF0YTsKKyAgIAorICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgd3JfcHRyIDw9IHtBV3sxJ2IwfX0gOworICAgICAgZW5kCisgICAgICBlbHNlIGJlZ2luCisgICAgICAgICBpZiAod3JfZW4gJiAhZnVsbCkgYmVnaW4KKyAgICAgICAgICAgIHdyX3B0ciA8PSB3cl9wdHIgKyAxJ2IxIDsKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pIAorICAgICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgIHJkX3B0ciA8PSB7QVd7MSdiMH19IDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgaWYgKHJkX2VuICYgIWVtcHR5KSBiZWdpbgorICAgICAgICAgICAgcmRfcHRyIDw9IHJkX3B0ciArIDEnYjEgOworICAgICAgICAgZW5kCisgICAgICBlbmQKKworCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSAKKyAgICAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICAgICBlbXB0eSA8PSAxJ2IxIDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgZW1wdHkgPD0gKCgod3JfcHRyIC0gcmRfcHRyKSA9PSB7eyhBVy0xKXsxJ2IwfX0sIDEnYjF9KSAmIHJkX2VuICYgfndyX2VuKSA/IDEnYjEgOiAKKyAgICAgICAgICAgICAgICAgICAoKHdyX3B0ciA9PSByZF9wdHIpICYgfnJkX2VuICYgd3JfZW4pID8gMSdiMCA6IGVtcHR5IDsKKyAgICAgIGVuZAorCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSAKKyAgICAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICAgICBmdWxsIDw9IDEnYjAgOworICAgICAgZW5kCisgICAgICBlbHNlIGJlZ2luCisgICAgICAgICBmdWxsIDw9ICgoKHdyX3B0ciAtIHJkX3B0cikgPT0ge3soQVctMSl7MSdiMX19LCAxJ2IwfSkgJiB+cmRfZW4gJiB3cl9lbikgPyAxJ2IxIDogCisgICAgICAgICAgICAgICAgICgoKHdyX3B0ciAtIHJkX3B0cikgPT0ge0FXezEnYjF9fSkgJiByZF9lbiAmIH53cl9lbikgPyAxJ2IwIDogZnVsbCA7CisgICAgICBlbmQKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKSAKKyAgICAgIGlmICh3cl9lbikKKwkgbWVtW3dyX3B0cl0gPD0gd3JfZGF0YTsKKworYXNzaWduICByZF9kYXRhID0gbWVtW3JkX3B0cl07CisKKworLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorICAgYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgICBpZiAod3JfZW4gJiYgZnVsbCkgYmVnaW4KKyAgICAgICAgICRkaXNwbGF5KCIlbSA6IEVycm9yISBzZmlmbyBvdmVyZmxvdyEiKTsKKyAgICAgIGVuZAogICAgZW5kCi0gZW5kCiAKLWFsd2F5cyBAIChuZWdlZGdlIHJzdG4gb3IgcG9zZWRnZSBjbGspCi1iZWdpbiA6IFJFQURfUE9JTlRFUgotICBpZiAocnN0bj09MSdiMCkgYmVnaW4KLSAgICBycHRyIDw9IDA7Ci0gIGVuZCBlbHNlIGlmIChyZF9lbikgYmVnaW4KLSAgICBycHRyIDw9IHJwdHIgKyAxOwotICBlbmQKLWVuZAorICAgYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgICBpZiAocmRfZW4gJiYgZW1wdHkpIGJlZ2luCisgICAgICAgICAkZGlzcGxheSgiJW0gOiBlcnJvciEgc2ZpZm8gdW5kZXJmbG93ISIpOworICAgICAgZW5kCisgICBlbmQKIAotYWx3YXlzIEAgKG5lZ2VkZ2UgcnN0biBvciBwb3NlZGdlIGNsaykKLWJlZ2luIDogU1RBVFVTX0NPVU5URVIKLSAgaWYgKHJzdG49PTEnYjApIGJlZ2luCi0gICAgICAgc3RhdHVzX2NudCA8PSAwOwotICAvLyBSZWFkIGJ1dCBubyB3cml0ZS4KLSAgZW5kIGVsc2UgaWYgKHJkX2VuICYmICAgKCF3cl9lbikgJiYgKHN0YXR1c19jbnQgICE9IDApKSBiZWdpbgotICAgIHN0YXR1c19jbnQgPD0gc3RhdHVzX2NudCAtIDE7Ci0gIC8vIFdyaXRlIGJ1dCBubyByZWFkLgotICBlbmQgZWxzZSBpZiAod3JfZW4gJiYgICghcmRfZW4pICYmIChzdGF0dXNfY250ICAhPSBGSUZPX0RFUFRIKSkgYmVnaW4KLSAgICBzdGF0dXNfY250IDw9IHN0YXR1c19jbnQgKyAxOwotICBlbmQKLWVuZAotCi0vLyB1bmRlcmZsb3cgaXMgbm90IGhhbmRsZWQKLWFsd2F5cyBAIChuZWdlZGdlIHJzdG4gb3IgcG9zZWRnZSBjbGspCi1iZWdpbiA6IEVNUFRZX0ZMQUcKLSAgaWYgKHJzdG49PTEnYjApIGJlZ2luCi0gICAgICAgZW1wdHkgPD0gMTsKLSAgLy8gUmVhZCBidXQgbm8gd3JpdGUuCi0gIGVuZCBlbHNlIGlmIChyZF9lbiAmJiAgICghd3JfZW4pICYmIChzdGF0dXNfY250ICA9PSAxKSkgYmVnaW4KLSAgICBlbXB0eSA8PSAxOwotICAvLyBXcml0ZSAKLSAgZW5kIGVsc2UgaWYgKHdyX2VuKSBiZWdpbgotICAgIGVtcHR5IDw9IDA7Ci0gIGVuZCBlbHNlIGlmIChzdGF0dXNfY250ICA9PSAwKSBiZWdpbgotICAgICBlbXB0eSA8PSAxOwotICBlbmQKLWVuZAotCi0vLyBvdmVyZmxvdyBpcyBub3QgaGFuZGxlZAotYWx3YXlzIEAgKG5lZ2VkZ2UgcnN0biBvciBwb3NlZGdlIGNsaykKLWJlZ2luIDogRlVMTF9GTEFHCi0gIGlmIChyc3RuPT0xJ2IwKSBiZWdpbgotICAgICAgIGZ1bGwgPD0gMDsKLSAgLy8gV3JpdGUgYnV0IG5vIHJlYWQuCi0gIGVuZCBlbHNlIGlmICh3cl9lbiAmJiAgKCFyZF9lbikgJiYgKHN0YXR1c19jbnQgID09IChGSUZPX0RFUFRILTEpKSkgYmVnaW4KLSAgICBmdWxsIDw9IDE7Ci0gIC8vIFJlYWQgCi0gIGVuZCBlbHNlIGlmIChyZF9lbiAmJiAgKCF3cl9lbikgKSBiZWdpbgotICAgIGZ1bGwgPD0gMDsKLSAgZW5kIGVsc2UgaWYgKHN0YXR1c19jbnQgID09IEZJRk9fREVQVEgpIGJlZ2luCi0gICAgIGZ1bGwgPD0gMTsKLSAgZW5kCi1lbmQKLWFzc2lnbiBkb3V0ID0gcmFtW3JwdHJdOwotCi1hbHdheXMgQCAocG9zZWRnZSBjbGspCi1iZWdpbgotICBpZiAod3JfZW4pIHJhbVt3cHRyXSA8PSBkaW47Ci1lbmQKLQorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBlbmRtb2R1bGUKKworCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYmFua19jdGwudiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19iYW5rX2N0bC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyMDZkYjYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYmFua19jdGwudgpAQCAtMCwwICsxLDU3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgU0RSQU0gQ29udHJvbGxlciBCYW5rIENvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAorICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvc2RyX2N0cmwvICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIERlc2NyaXB0aW9uOiAKKyAgICBUaGlzIG1vZHVsZSB0YWtlcyByZXF1ZXN0cyBmcm9tIHNkcmNfcmVxX2dlbiwgY2hlY2tzIGZvciBwYWdlIGhpdC9taXNzIGFuZAorICAgIGlzc3VlcyBwcmVjaGFyZ2UvYWN0aXZhdGUgY29tbWFuZHMgYW5kIHRoZW4gcGFzc2VzIHRoZSByZXF1ZXN0IHRvIHNkcmNfeGZyX2N0bC4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgCisgIFZlcnNpb24gIDogIDEuMCAgLSA4dGggSmFuIDIwMTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCisgcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAorIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKK2xhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCisgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKKyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitgaW5jbHVkZSAic2RyY19kZWZpbmUudiIKKworbW9kdWxlIHNkcmNfYmFua19jdGwgKGNsaywKKwkJICAgICByZXNldF9uLAorCQkgICAgIGEyYl9yZXFfZGVwdGgsICAvLyBOdW1iZXIgb2YgcmVxdWVzdHMgd2UgY2FuIGJ1ZmZlcgorCisJCSAgICAgLyogUmVxIGZyb20gcmVxX2dlbiAqLworCQkgICAgIHIyYl9yZXEsCSAgIC8vIHJlcXVlc3QKKwkJICAgICByMmJfcmVxX2lkLCAgIC8vIElECisJCSAgICAgcjJiX3N0YXJ0LAkgICAvLyBGaXJzdCBjaHVuayBvZiBidXJzdAorCQkgICAgIHIyYl9sYXN0LAkgICAvLyBMYXN0IGNodW5rIG9mIGJ1cnN0CisJCSAgICAgcjJiX3dyYXAsCisJCSAgICAgcjJiX2JhLAkgICAvLyBiYW5rIGFkZHJlc3MKKwkJICAgICByMmJfcmFkZHIsCSAgIC8vIHJvdyBhZGRyZXNzCisJCSAgICAgcjJiX2NhZGRyLAkgICAvLyBjb2wgYWRkcmVzcworCQkgICAgIHIyYl9sZW4sCSAgIC8vIGxlbmd0aAorCQkgICAgIHIyYl93cml0ZSwJICAgLy8gd3JpdGUgcmVxdWVzdAorCQkgICAgIGIycl9hcmJfb2ssICAgLy8gT0sgdG8gYXJiaXRyYXRlIGZvciBuZXh0IHhmcgorCQkgICAgIGIycl9hY2ssCisKKwkJICAgICAvKiBUcmFuc2ZlciByZXF1ZXN0IHRvIHhmcl9jdGwgKi8KKwkJICAgICBiMnhfaWRsZSwJICAgLy8gQWxsIGJhbmtzIGFyZSBpZGxlCisJCSAgICAgYjJ4X3JlcSwJICAgLy8gUmVxdWVzdCB0byB4ZnJfY3RsCisJCSAgICAgYjJ4X3N0YXJ0LAkgICAvLyBmaXJzdCBjaHVuayBvZiB0cmFuc2ZlcgorCQkgICAgIGIyeF9sYXN0LAkgICAvLyBsYXN0IGNodW5rIG9mIHRyYW5zZmVyCisJCSAgICAgYjJ4X3dyYXAsCisJCSAgICAgYjJ4X2lkLAkgICAvLyBUcmFuc2ZlciBJRAorCQkgICAgIGIyeF9iYSwJICAgLy8gYmFuayBhZGRyZXNzCisJCSAgICAgYjJ4X2FkZHIsCSAgIC8vIHJvdy9jb2wgYWRkcmVzcworCQkgICAgIGIyeF9sZW4sCSAgIC8vIHRyYW5zZmVyIGxlbmd0aAorCQkgICAgIGIyeF9jbWQsCSAgIC8vIHRyYW5zZmVyIGNvbW1hbmQKKwkJICAgICB4MmJfYWNrLAkgICAvLyBjb21tYW5kIGFjY2VwdGVkCisJCSAgICAgCisJCSAgICAgLyogU3RhdHVzIHRvL2Zyb20geGZyX2N0bCAqLworCQkgICAgIGIyeF90cmFzX29rLCAgLy8gVFJBUyBPSyBmb3IgYWxsIGJhbmtzCisJCSAgICAgeDJiX3JlZnJlc2gsICAvLyBXZSBkaWQgYSByZWZyZXNoCisJCSAgICAgeDJiX3ByZV9vaywgICAvLyBPSyB0byBkbyBhIHByZWNoYXJnZSAocGVyIGJhbmspCisJCSAgICAgeDJiX2FjdF9vaywgICAvLyBPSyB0byBkbyBhbiBhY3RpdmF0ZQorCQkgICAgIHgyYl9yZG9rLAkgICAvLyBPSyB0byBkbyBhIHJlYWQKKwkJICAgICB4MmJfd3JvaywJICAgLy8gT0sgdG8gZG8gYSB3cml0ZQorCisJCSAgICAgLyogeGZyIG1zYiBhZGRyZXNzICovCisJCSAgICAgeGZyX2Jhbmtfc2VsLAorICAgICAgICAgICAgICAgICAgICAgc2RyX3JlcV9ub3JtX2RtYV9sYXN0LAorCisJCSAgICAgLyogU0RSQU0gVGltaW5nICovCisJCSAgICAgdHJhc19kZWxheSwgICAvLyBBY3RpdmUgdG8gcHJlY2hhcmdlIGRlbGF5CisJCSAgICAgdHJwX2RlbGF5LAkgICAvLyBQcmVjaGFyZ2UgdG8gYWN0aXZlIGRlbGF5CisJCSAgICAgdHJjZF9kZWxheSk7ICAvLyBBY3RpdmUgdG8gUi9XIGRlbGF5CisgICAKK3BhcmFtZXRlciAgU0RSX0RXICAgPSAxNjsgIC8vIFNEUiBEYXRhIFdpZHRoIAorcGFyYW1ldGVyICBTRFJfQlcgICA9IDI7ICAgLy8gU0RSIEJ5dGUgV2lkdGgKKyAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgY2xrLCByZXNldF9uOworCisgICBpbnB1dCBbMTowXSAJCQlhMmJfcmVxX2RlcHRoOworICAgCisgICAvKiBSZXEgZnJvbSBiYW5rX2N0bCAqLworICAgaW5wdXQgCQkJcjJiX3JlcSwgcjJiX3N0YXJ0LCByMmJfbGFzdCwKKwkJCQlyMmJfd3JpdGUsIHIyYl93cmFwOworICAgaW5wdXQgW2BTRFJfUkVRX0lEX1ctMTowXSAJcjJiX3JlcV9pZDsKKyAgIGlucHV0IFsxOjBdIAkJCXIyYl9iYTsKKyAgIGlucHV0IFsxMjowXSAJCXIyYl9yYWRkcjsKKyAgIGlucHV0IFsxMjowXSAJCXIyYl9jYWRkcjsKKyAgIGlucHV0IFtgUkVRX0JXLTE6MF0gCSAgICAgICAgcjJiX2xlbjsKKyAgIG91dHB1dCAJCQliMnJfYXJiX29rLCBiMnJfYWNrOworICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICBzZHJfcmVxX25vcm1fZG1hX2xhc3Q7CisKKyAgIC8qIFJlcSB0byB4ZnJfY3RsICovCisgICBvdXRwdXQgCQkJYjJ4X2lkbGUsIGIyeF9yZXEsIGIyeF9zdGFydCwgYjJ4X2xhc3QsCisJCQkJYjJ4X3RyYXNfb2ssIGIyeF93cmFwOworICAgb3V0cHV0IFtgU0RSX1JFUV9JRF9XLTE6MF0gCWIyeF9pZDsKKyAgIG91dHB1dCBbMTowXSAJCWIyeF9iYTsKKyAgIG91dHB1dCBbMTI6MF0gCQliMnhfYWRkcjsKKyAgIG91dHB1dCBbYFJFUV9CVy0xOjBdIAliMnhfbGVuOworICAgb3V0cHV0IFsxOjBdIAkJYjJ4X2NtZDsKKyAgIGlucHV0IAkJCXgyYl9hY2s7CisKKyAgIC8qIFN0YXR1cyBmcm9tIHhmcl9jdGwgKi8KKyAgIGlucHV0IFszOjBdIAkJCXgyYl9wcmVfb2s7CisgICBpbnB1dCAJCQl4MmJfcmVmcmVzaCwgeDJiX2FjdF9vaywgeDJiX3Jkb2ssCisJCQkJeDJiX3dyb2s7CisgICAKKyAgIGlucHV0IFszOjBdIAkJCXRyYXNfZGVsYXksIHRycF9kZWxheSwgdHJjZF9kZWxheTsKKworICAgaW5wdXQgWzE6MF0geGZyX2Jhbmtfc2VsOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEludGVybmFsIE5ldHMKKworICAgd2lyZSBbMzowXSAJCQlyMmlfcmVxLCBpMnJfYWNrLCBpMnhfcmVxLCAKKwkJCQlpMnhfc3RhcnQsIGkyeF9sYXN0LCBpMnhfd3JhcCwgdHJhc19vazsKKyAgIHdpcmUgWzEyOjBdIAkJCWkyeF9hZGRyMCwgaTJ4X2FkZHIxLCBpMnhfYWRkcjIsIGkyeF9hZGRyMzsKKyAgIHdpcmUgW2BSRVFfQlctMTowXSAJaTJ4X2xlbjAsIGkyeF9sZW4xLCBpMnhfbGVuMiwgaTJ4X2xlbjM7CisgICB3aXJlIFsxOjBdIAkJCWkyeF9jbWQwLCBpMnhfY21kMSwgaTJ4X2NtZDIsIGkyeF9jbWQzOworICAgd2lyZSBbYFNEUl9SRVFfSURfVy0xOjBdIAlpMnhfaWQwLCBpMnhfaWQxLCBpMnhfaWQyLCBpMnhfaWQzOworCisgICByZWcgCQkJCWIyeF9yZXE7CisgICB3aXJlIAkJCWIyeF9pZGxlLCBiMnhfc3RhcnQsIGIyeF9sYXN0LCBiMnhfd3JhcDsKKyAgIHdpcmUgW2BTRFJfUkVRX0lEX1ctMTowXSAJYjJ4X2lkOworICAgd2lyZSBbMTI6MF0gCQkJYjJ4X2FkZHI7CisgICB3aXJlIFtgUkVRX0JXLTE6MF0gCWIyeF9sZW47CisgICB3aXJlIFsxOjBdIAkJCWIyeF9jbWQ7CisgICB3aXJlIFszOjBdIAkJCXgyaV9hY2s7CisgICByZWcgWzE6MF0gCQkJYjJ4X2JhOworICAgCisgICByZWcgW2BTRFJfUkVRX0lEX1ctMTowXSAJY3Vycl9pZDsKKworICAgd2lyZSBbMTowXSAJCQl4ZnJfYmE7CisgICB3aXJlICAJCQl4ZnJfYmFfbGFzdDsKKyAgIHdpcmUgWzM6MF0gCQkJeGZyX29rOworCisgICAvLyBUaGlzIDggYml0IHJlZ2lzdGVyIHN0b3JlcyB0aGUgYmFuayBhZGRyZXNzZXMgZm9yIHVwdG8gNCByZXF1ZXN0cy4KKyAgIHJlZyBbNzowXSAJCQlyYW5rX2JhOworICAgcmVnIFszOjBdIAkJCXJhbmtfYmFfbGFzdDsKKyAgIC8vIFRoaXMgMyBiaXQgY291bnRlciBjb3VudHMgdGhlIG51bWJlciBvZiByZXF1ZXN0cyB3ZSBoYXZlCisgICAvLyBidWZmZXJlZCBzbyBmYXIsIGxlZ2FsIHZhbHVlcyBhcmUgMCwgMSwgMiwgMywgb3IgNC4KKyAgIHJlZyBbMjowXSAJCQlyYW5rX2NudDsKKyAgIHdpcmUgWzM6MF0gCQkJcmFua19yZXEsIHJhbmtfd3Jfc2VsOworICAgd2lyZSAJCQlyYW5rX2ZpZm9fd3IsIHJhbmtfZmlmb19yZDsKKyAgIHdpcmUgCQkJcmFua19maWZvX2Z1bGwsIHJhbmtfZmlmb19tdDsKKyAgIAorICAgd2lyZSBbMTI6MF0gYmFuazBfcm93LCBiYW5rMV9yb3csIGJhbmsyX3JvdywgYmFuazNfcm93OworCisgICBhc3NpZ24gIGIyeF90cmFzX29rICAgICAgICA9ICZ0cmFzX29rOworCisKKyAgIC8vIERpc3RyaWJ1dGUgdGhlIHJlcXVlc3QgZnJvbSByZXFfZ2VuCisKKyAgIGFzc2lnbiByMmlfcmVxWzBdID0gKHIyYl9iYSA9PSAyJ2IwMCkgPyByMmJfcmVxICYgfnJhbmtfZmlmb19mdWxsIDogMSdiMDsKKyAgIGFzc2lnbiByMmlfcmVxWzFdID0gKHIyYl9iYSA9PSAyJ2IwMSkgPyByMmJfcmVxICYgfnJhbmtfZmlmb19mdWxsIDogMSdiMDsKKyAgIGFzc2lnbiByMmlfcmVxWzJdID0gKHIyYl9iYSA9PSAyJ2IxMCkgPyByMmJfcmVxICYgfnJhbmtfZmlmb19mdWxsIDogMSdiMDsKKyAgIGFzc2lnbiByMmlfcmVxWzNdID0gKHIyYl9iYSA9PSAyJ2IxMSkgPyByMmJfcmVxICYgfnJhbmtfZmlmb19mdWxsIDogMSdiMDsKKworICAgLyoqKioqKioqKioqKioqKioqKgorICAgTW9kaWZpZWQgdGhlIEJldHRlciBGUEdBIFRpbWluZyBQdXJwb3NlCisgICBhc3NpZ24gYjJyX2FjayA9IChyMmJfYmEgPT0gMidiMDApID8gaTJyX2Fja1swXSA6CisJCSAgICAocjJiX2JhID09IDInYjAxKSA/IGkycl9hY2tbMV0gOgorCQkgICAgKHIyYl9iYSA9PSAyJ2IxMCkgPyBpMnJfYWNrWzJdIDoKKwkJICAgIChyMmJfYmEgPT0gMidiMTEpID8gaTJyX2Fja1szXSA6IDEnYjA7CisgICAqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEFzc3VtcHRpb246IE9ubHkgb25lIEFjayBXaWxsIGJlIGFzc2VydGVkIGF0IGEgdGltZS4KKyAgIGFzc2lnbiBiMnJfYWNrICA9fGkycl9hY2s7IAorCisgICBhc3NpZ24gYjJyX2FyYl9vayA9IH5yYW5rX2ZpZm9fZnVsbDsKKyAgIAorICAgLy8gUHV0IHRoZSByZXF1ZXN0cyBmcm9tIHRoZSA0IGJhbmtfZnNtcyBpbnRvIGEgNCBkZWVwIHNoaWZ0CisgICAvLyByZWdpc3RlciBmaWxlLiBUaGUgZWFybGllc3QgcmVxdWVzdCBpcyBwcmlvcml0aXplZCBvdmVyIHRoZQorICAgLy8gbGF0ZXIgcmVxdWVzdHMuIEFsc28gdGhlIG51bWJlciBvZiByZXF1ZXN0cyB3ZSBhcmUgYWxsb3dlZCB0bworICAgLy8gYnVmZmVyIGlzIGxpbWl0ZWQgYnkgYSAyIGJpdCBleHRlcm5hbCBpbnB1dAorICAgCisgICAvLyBNdXggdGhlIHJlcS9jbWQgdG8geGZyX2N0bC4gQWxsb3cgUkQvV1IgY29tbWFuZHMgZnJvbSB0aGUgcmVxdWVzdCBpbgorICAgLy8gcmFuazAsIGFsbG93IG9ubHkgUFIvQUNUIGNvbW1hbmRzIGZyb20gdGhlIHJlcXVlc3RzIGluIG90aGVyIHJhbmtzCisgICAvLyBJZiB0aGUgcmFua19maWZvIGlzIGVtcHR5LCBzZW5kIHRoZSByZXF1ZXN0IGZyb20gdGhlIGJhbmsgYWRkcmVzc2VkIGJ5CisgICAvLyByMmJfYmEgCisKKyAgIC8vIEluIEZQR0EgTW9kZSwgdG8gaW1wcm92ZSB0aGUgdGltaW5nLCBhbHNvIHNlbmQgdGhlIHJhbmtfYmEKKyAgIGFzc2lnbiB4ZnJfYmEgPSAoYFRBUkdFVF9ERVNJR04gPT0gYEZQR0EpID8gcmFua19iYVsxOjBdOgorCSAgICAgICAgICAgKChyYW5rX2ZpZm9fbXQpID8gcjJiX2JhIDogcmFua19iYVsxOjBdKTsKKyAgIGFzc2lnbiB4ZnJfYmFfbGFzdCA9IChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyByYW5rX2JhX2xhc3RbMF06CisJICAgICAgICAgICAgICAgICgocmFua19maWZvX210KSA/IHNkcl9yZXFfbm9ybV9kbWFfbGFzdCA6IHJhbmtfYmFfbGFzdFswXSk7CisgICAKKyAgIGFzc2lnbiByYW5rX3JlcVswXSA9IGkyeF9yZXFbeGZyX2JhXTsgICAgIC8vIGVhY2ggcmFuayBnZW5lcmF0ZXMgcmVxdWVzdHMKKwkJCQorICAgYXNzaWduIHJhbmtfcmVxWzFdID0gKHJhbmtfY250IDwgMydoMikgPyAxJ2IwIDoKKwkJCShyYW5rX2JhWzM6Ml0gPT0gMidiMDApID8gaTJ4X3JlcVswXSAmIH5pMnhfY21kMFsxXSA6CisJCQkocmFua19iYVszOjJdID09IDInYjAxKSA/IGkyeF9yZXFbMV0gJiB+aTJ4X2NtZDFbMV0gOgorCQkJKHJhbmtfYmFbMzoyXSA9PSAyJ2IxMCkgPyBpMnhfcmVxWzJdICYgfmkyeF9jbWQyWzFdIDogCisJCQlpMnhfcmVxWzNdICYgfmkyeF9jbWQzWzFdOworCQkJCisgICBhc3NpZ24gcmFua19yZXFbMl0gPSAocmFua19jbnQgPCAzJ2gzKSA/IDEnYjAgOgorCQkJKHJhbmtfYmFbNTo0XSA9PSAyJ2IwMCkgPyBpMnhfcmVxWzBdICYgfmkyeF9jbWQwWzFdIDoKKwkJCShyYW5rX2JhWzU6NF0gPT0gMidiMDEpID8gaTJ4X3JlcVsxXSAmIH5pMnhfY21kMVsxXSA6CisJCQkocmFua19iYVs1OjRdID09IDInYjEwKSA/IGkyeF9yZXFbMl0gJiB+aTJ4X2NtZDJbMV0gOiAKKwkJCWkyeF9yZXFbM10gJiB+aTJ4X2NtZDNbMV07CisJCQkKKyAgIGFzc2lnbiByYW5rX3JlcVszXSA9IChyYW5rX2NudCA8IDMnaDQpID8gMSdiMCA6CisJCQkocmFua19iYVs3OjZdID09IDInYjAwKSA/IGkyeF9yZXFbMF0gJiB+aTJ4X2NtZDBbMV0gOgorCQkJKHJhbmtfYmFbNzo2XSA9PSAyJ2IwMSkgPyBpMnhfcmVxWzFdICYgfmkyeF9jbWQxWzFdIDoKKwkJCShyYW5rX2JhWzc6Nl0gPT0gMidiMTApID8gaTJ4X3JlcVsyXSAmIH5pMnhfY21kMlsxXSA6IAorCQkJaTJ4X3JlcVszXSAmIH5pMnhfY21kM1sxXTsKKwkJCQorICAgYWx3YXlzIEAgKCopIGJlZ2luCisgICAgICBiMnhfcmVxID0gMSdiMDsKKyAgICAgIGIyeF9iYSA9ICAgeGZyX2JhOworCisgICAgICBpZihgVEFSR0VUX0RFU0lHTiA9PSBgQVNJQykgYmVnaW4gLy8gU3VwcG9ydCBNdWx0aXBsZSBSYW5rIHJlcXVlc3Qgb25seSBvbiBBU0lDCisgICAgICAgICBpZiAocmFua19yZXFbMF0pIGJlZ2luIAorCSAgICBiMnhfcmVxID0gMSdiMTsKKwkgICAgYjJ4X2JhID0geGZyX2JhOworICAgICAgICAgZW5kIC8vIGlmIChyYW5rX3JlcVswXSkKKwkgZWxzZSBpZiAocmFua19yZXFbMV0pIGJlZ2luIAorCSAgIGIyeF9yZXEgPSAxJ2IxOworCSAgIGIyeF9iYSA9IHJhbmtfYmFbMzoyXTsKKyAgICAgICAgZW5kIC8vIGlmIChyYW5rX3JlcVsxXSkKKyAgICAgICAgZWxzZSBpZiAocmFua19yZXFbMl0pIGJlZ2luIAorCSAgYjJ4X3JlcSA9IDEnYjE7CisJICBiMnhfYmEgPSByYW5rX2JhWzU6NF07CisgICAgICAgIGVuZCAvLyBpZiAocmFua19yZXFbMl0pCisgICAgICAgIGVsc2UgaWYgKHJhbmtfcmVxWzNdKSBiZWdpbiAKKwkgIGIyeF9yZXEgPSAxJ2IxOworCSAgYjJ4X2JhID0gcmFua19iYVs3OjZdOworICAgICAgICBlbmQgLy8gaWYgKHJhbmtfcmVxWzNdKQorICAgICAgZW5kIGVsc2UgYmVnaW4gLy8gSWYgRlBHQQorICAgICAgICAgaWYgKHJhbmtfcmVxWzBdKSBiZWdpbiAKKwkgICAgYjJ4X3JlcSA9IDEnYjE7CisJIGVuZAorICAgICAgZW5kCisgIGVuZCAvLyBhbHdheXMgQCAocmFua19yZXEgb3IgcmFua19maWZvX210IG9yIHIyYl9iYSBvciByYW5rX2JhKQorCisgICBhc3NpZ24gYjJ4X2lkbGUgPSByYW5rX2ZpZm9fbXQ7CisgICBhc3NpZ24gYjJ4X3N0YXJ0ID0gaTJ4X3N0YXJ0W2IyeF9iYV07CisgICBhc3NpZ24gYjJ4X2xhc3QgPSBpMnhfbGFzdFtiMnhfYmFdOworICAgYXNzaWduIGIyeF93cmFwID0gaTJ4X3dyYXBbYjJ4X2JhXTsKKworICAgYXNzaWduIGIyeF9hZGRyID0gKGIyeF9iYSA9PSAyJ2IxMSkgPyBpMnhfYWRkcjMgOgorCQkgICAgIChiMnhfYmEgPT0gMidiMTApID8gaTJ4X2FkZHIyIDoKKwkJICAgICAoYjJ4X2JhID09IDInYjAxKSA/IGkyeF9hZGRyMSA6IGkyeF9hZGRyMDsKKyAgIAorICAgYXNzaWduIGIyeF9sZW4gPSAoYjJ4X2JhID09IDInYjExKSA/IGkyeF9sZW4zIDoKKwkJICAgIChiMnhfYmEgPT0gMidiMTApID8gaTJ4X2xlbjIgOgorCQkgICAgKGIyeF9iYSA9PSAyJ2IwMSkgPyBpMnhfbGVuMSA6IGkyeF9sZW4wOworICAgCisgICBhc3NpZ24gYjJ4X2NtZCA9IChiMnhfYmEgPT0gMidiMTEpID8gaTJ4X2NtZDMgOgorCQkgICAgKGIyeF9iYSA9PSAyJ2IxMCkgPyBpMnhfY21kMiA6CisJCSAgICAoYjJ4X2JhID09IDInYjAxKSA/IGkyeF9jbWQxIDogaTJ4X2NtZDA7CisgICAKKyAgIGFzc2lnbiBiMnhfaWQgPSAoYjJ4X2JhID09IDInYjExKSA/IGkyeF9pZDMgOgorCQkgICAoYjJ4X2JhID09IDInYjEwKSA/IGkyeF9pZDIgOgorCQkgICAoYjJ4X2JhID09IDInYjAxKSA/IGkyeF9pZDEgOiBpMnhfaWQwOworICAgCisgICBhc3NpZ24geDJpX2Fja1swXSA9IChiMnhfYmEgPT0gMidiMDApID8geDJiX2FjayA6IDEnYjA7CisgICBhc3NpZ24geDJpX2Fja1sxXSA9IChiMnhfYmEgPT0gMidiMDEpID8geDJiX2FjayA6IDEnYjA7CisgICBhc3NpZ24geDJpX2Fja1syXSA9IChiMnhfYmEgPT0gMidiMTApID8geDJiX2FjayA6IDEnYjA7CisgICBhc3NpZ24geDJpX2Fja1szXSA9IChiMnhfYmEgPT0gMidiMTEpID8geDJiX2FjayA6IDEnYjA7CisKKyAgIC8vIFJhbmsgRmlmbworICAgLy8gT24gYSB3cml0ZSB3cml0ZSB0byBzZWxlY3RlZCByYW5rIGFuZCBpbmNyZW1lbnQgcmFua19jbnQKKyAgIC8vIE9uIGEgcmVhZCBzaGlmdCByYW5rX2JhIHJpZ2h0IDIgYml0cyBhbmQgZGVjcmVtZW50IHJhbmtfY250CisKKyAgIGFzc2lnbiByYW5rX2ZpZm9fd3IgPSBiMnJfYWNrOworCisgICBhc3NpZ24gcmFua19maWZvX3JkID0gYjJ4X3JlcSAmIGIyeF9jbWRbMV0gJiB4MmJfYWNrOworICAgCisgICBhc3NpZ24gcmFua193cl9zZWxbMF0gPSAocmFua19jbnQgPT0gMydoMCkgPyByYW5rX2ZpZm9fd3IgOiAKKwkJCSAgIChyYW5rX2NudCA9PSAzJ2gxKSA/IHJhbmtfZmlmb193ciAmIHJhbmtfZmlmb19yZCA6IAorCQkJICAgMSdiMDsKKworICAgYXNzaWduIHJhbmtfd3Jfc2VsWzFdID0gKHJhbmtfY250ID09IDMnaDEpID8gcmFua19maWZvX3dyICYgfnJhbmtfZmlmb19yZCA6CisJCQkgICAocmFua19jbnQgPT0gMydoMikgPyByYW5rX2ZpZm9fd3IgJiByYW5rX2ZpZm9fcmQgOgorCQkJICAgMSdiMDsgCisKKyAgIGFzc2lnbiByYW5rX3dyX3NlbFsyXSA9IChyYW5rX2NudCA9PSAzJ2gyKSA/IHJhbmtfZmlmb193ciAmIH5yYW5rX2ZpZm9fcmQgOgorCQkJICAgKHJhbmtfY250ID09IDMnaDMpID8gcmFua19maWZvX3dyICYgcmFua19maWZvX3JkIDoKKwkJCSAgIDEnYjA7IAorCisgICBhc3NpZ24gcmFua193cl9zZWxbM10gPSAocmFua19jbnQgPT0gMydoMykgPyByYW5rX2ZpZm9fd3IgJiB+cmFua19maWZvX3JkIDoKKwkJCSAgIChyYW5rX2NudCA9PSAzJ2g0KSA/IHJhbmtfZmlmb193ciAmIHJhbmtfZmlmb19yZCA6CisJCQkgICAxJ2IwOyAKKworICAgYXNzaWduIHJhbmtfZmlmb19tdCA9IChyYW5rX2NudCA9PSAzJ2IwKSA/IDEnYjEgOiAxJ2IwOworCisgICBhc3NpZ24gcmFua19maWZvX2Z1bGwgPSAocmFua19jbnRbMl0pID8gMSdiMSA6IAorCQkJICAgKHJhbmtfY250WzE6MF0gPT0gYTJiX3JlcV9kZXB0aCkgPyAxJ2IxIDogMSdiMDsgCisKKyAgIC8vIEZJRk8gQ2hlY2sKKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGspIGJlZ2luCisKKyAgICAgIGlmICh+cmFua19maWZvX3dyICYgcmFua19maWZvX3JkICYmIHJhbmtfY250ID09IDMnaDApIGJlZ2luCisJICRkaXNwbGF5ICgiJXQ6ICVtOiBFUlJPUiEhISBSZWFkIGZyb20gZW1wdHkgRmlmbyIsICR0aW1lKTsKKwkgJHN0b3A7CisgICAgICBlbmQgLy8gaWYgKHJhbmtfZmlmb19yZCAmJiByYW5rX2NudCA9PSAzJ2gwKQorCisgICAgICBpZiAocmFua19maWZvX3dyICYmIH5yYW5rX2ZpZm9fcmQgJiYgcmFua19jbnQgPT0gMydoNCkgYmVnaW4KKwkgJGRpc3BsYXkgKCIldDogJW06IEVSUk9SISEhIFdyaXRlIHRvIGZ1bGwgRmlmbyIsICR0aW1lKTsKKwkgJHN0b3A7CisgICAgICBlbmQgLy8gaWYgKHJhbmtfZmlmb193ciAmJiB+cmFua19maWZvX3JkICYmIHJhbmtfY250ID09IDMnaDQpCisgICAgICAKKyAgIGVuZCAvLyBhbHdheXMgQCAocG9zZWRnZSBjbGspCisgICAKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorICAgICAgCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGspCisgICAgICBpZiAofnJlc2V0X24pIGJlZ2luCisJIHJhbmtfY250IDw9IDMnYjA7CisJIHJhbmtfYmEgPD0gOCdiMDsKKwkgcmFua19iYV9sYXN0IDw9IDQnYjA7CisKKyAgICAgIGVuZCAvLyBpZiAofnJlc2V0X24pCisgICAgICBlbHNlIGJlZ2luCisKKwkgcmFua19jbnQgPD0gKHJhbmtfZmlmb193ciAmIH5yYW5rX2ZpZm9fcmQpID8gcmFua19jbnQgKyAzJ2IxIDoKKwkJICAgICAofnJhbmtfZmlmb193ciAmIHJhbmtfZmlmb19yZCkgPyByYW5rX2NudCAtIDMnYjEgOgorCQkgICAgIHJhbmtfY250OworCisJIHJhbmtfYmFbMTowXSA8PSAocmFua193cl9zZWxbMF0pID8gcjJiX2JhIDoKKwkJCSAocmFua19maWZvX3JkKSA/IHJhbmtfYmFbMzoyXSA6IHJhbmtfYmFbMTowXTsKKwkgCisJIHJhbmtfYmFbMzoyXSA8PSAocmFua193cl9zZWxbMV0pID8gcjJiX2JhIDoKKwkJCSAocmFua19maWZvX3JkKSA/IHJhbmtfYmFbNTo0XSA6IHJhbmtfYmFbMzoyXTsKKwkgCisJIHJhbmtfYmFbNTo0XSA8PSAocmFua193cl9zZWxbMl0pID8gcjJiX2JhIDoKKwkJCSAocmFua19maWZvX3JkKSA/IHJhbmtfYmFbNzo2XSA6IHJhbmtfYmFbNTo0XTsKKwkgCisJIHJhbmtfYmFbNzo2XSA8PSAocmFua193cl9zZWxbM10pID8gcjJiX2JhIDoKKwkJCSAocmFua19maWZvX3JkKSA/IDInYjAwIDogcmFua19iYVs3OjZdOworCisJIGlmKGBUQVJHRVRfREVTSUdOID09IGBBU0lDKSBiZWdpbiAvLyBUaGlzIExvZ2ljIGlzIGltcGxlbWVudGVkIGZvciBBU0lDIE9ubHkKKwkgICAgLy8gTm90ZTogQ3VycmVubHkgdG9wLWxldmVsIGRvZXMgbm90IGdlbmVyYXRlIHRoZQorCSAgICAvLyBzZHJfcmVxX25vcm1fZG1hX2xhc3Qgc2lnbmFsIGFuZCBjYW4gYmUgdGllZCB6ZXJvIGF0IHRvcC1sZXZlbAorICAgICAgICAgICAgcmFua19iYV9sYXN0WzBdIDw9IChyYW5rX3dyX3NlbFswXSkgPyBzZHJfcmVxX25vcm1fZG1hX2xhc3QgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyYW5rX2ZpZm9fcmQpID8gIHJhbmtfYmFfbGFzdFsxXSA6IHJhbmtfYmFfbGFzdFswXTsKKworICAgICAgICAgICAgcmFua19iYV9sYXN0WzFdIDw9IChyYW5rX3dyX3NlbFsxXSkgPyBzZHJfcmVxX25vcm1fZG1hX2xhc3QgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyYW5rX2ZpZm9fcmQpID8gIHJhbmtfYmFfbGFzdFsyXSA6IHJhbmtfYmFfbGFzdFsxXTsKKworICAgICAgICAgICAgcmFua19iYV9sYXN0WzJdIDw9IChyYW5rX3dyX3NlbFsyXSkgPyBzZHJfcmVxX25vcm1fZG1hX2xhc3QgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyYW5rX2ZpZm9fcmQpID8gIHJhbmtfYmFfbGFzdFszXSA6IHJhbmtfYmFfbGFzdFsyXTsKKworICAgICAgICAgICAgcmFua19iYV9sYXN0WzNdIDw9IChyYW5rX3dyX3NlbFszXSkgPyBzZHJfcmVxX25vcm1fZG1hX2xhc3QgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyYW5rX2ZpZm9fcmQpID8gIDEnYjAgOiByYW5rX2JhX2xhc3RbM107CisgICAgICAgICBlbmQKKworICAgICAgZW5kIC8vIGVsc2U6ICFpZih+cmVzZXRfbikKKyAgIAorICAgYXNzaWduIHhmcl9va1swXSA9ICh4ZnJfYmEgPT0gMidiMDApID8gMSdiMSA6IDEnYjA7CisgICBhc3NpZ24geGZyX29rWzFdID0gKHhmcl9iYSA9PSAyJ2IwMSkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiB4ZnJfb2tbMl0gPSAoeGZyX2JhID09IDInYjEwKSA/IDEnYjEgOiAxJ2IwOworICAgYXNzaWduIHhmcl9va1szXSA9ICh4ZnJfYmEgPT0gMidiMTEpID8gMSdiMSA6IDEnYjA7CisgICAKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgLy8gSW5zdGFudGlhdGUgQmFuayBDdGwgRlNNIDAKKworICAgc2RyY19iYW5rX2ZzbSBiYW5rMF9mc20gKC5jbGsgKGNsayksCisJCQkgICAucmVzZXRfbiAocmVzZXRfbiksCisKKwkJCSAgIC8qIFJlcSBmcm9tIHJlcV9nZW4gKi8KKwkJCSAgIC5yMmJfcmVxIChyMmlfcmVxWzBdKSwKKwkJCSAgIC5yMmJfcmVxX2lkIChyMmJfcmVxX2lkKSwKKwkJCSAgIC5yMmJfc3RhcnQgKHIyYl9zdGFydCksCisJCQkgICAucjJiX2xhc3QgKHIyYl9sYXN0KSwKKwkJCSAgIC5yMmJfd3JhcCAocjJiX3dyYXApLAorCQkJICAgLnIyYl9yYWRkciAocjJiX3JhZGRyKSwKKwkJCSAgIC5yMmJfY2FkZHIgKHIyYl9jYWRkciksCisJCQkgICAucjJiX2xlbiAocjJiX2xlbiksCisJCQkgICAucjJiX3dyaXRlIChyMmJfd3JpdGUpLAorCQkJICAgLmIycl9hY2sgKGkycl9hY2tbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNkcl9kbWFfbGFzdChyYW5rX2JhX2xhc3RbMF0pLAorCisJCQkgICAvKiBUcmFuc2ZlciByZXF1ZXN0IHRvIHhmcl9jdGwgKi8KKwkJCSAgIC5iMnhfcmVxIChpMnhfcmVxWzBdKSwKKwkJCSAgIC5iMnhfc3RhcnQgKGkyeF9zdGFydFswXSksCisJCQkgICAuYjJ4X2xhc3QgKGkyeF9sYXN0WzBdKSwKKwkJCSAgIC5iMnhfd3JhcCAoaTJ4X3dyYXBbMF0pLAorCQkJICAgLmIyeF9pZCAoaTJ4X2lkMCksCisJCQkgICAuYjJ4X2FkZHIgKGkyeF9hZGRyMCksCisJCQkgICAuYjJ4X2xlbiAoaTJ4X2xlbjApLAorCQkJICAgLmIyeF9jbWQgKGkyeF9jbWQwKSwKKwkJCSAgIC54MmJfYWNrICh4MmlfYWNrWzBdKSwKKwkJICAgICAKKwkJCSAgIC8qIFN0YXR1cyB0by9mcm9tIHhmcl9jdGwgKi8KKwkJCSAgIC50cmFzX29rICh0cmFzX29rWzBdKSwKKwkJCSAgIC54ZnJfb2sgKHhmcl9va1swXSksCisJCQkgICAueDJiX3JlZnJlc2ggKHgyYl9yZWZyZXNoKSwKKwkJCSAgIC54MmJfcHJlX29rICh4MmJfcHJlX29rWzBdKSwKKwkJCSAgIC54MmJfYWN0X29rICh4MmJfYWN0X29rKSwKKwkJCSAgIC54MmJfcmRvayAoeDJiX3Jkb2spLAorCQkJICAgLngyYl93cm9rICh4MmJfd3JvayksCisKKwkJCSAgIC5iYW5rX3JvdyhiYW5rMF9yb3cpLAorCisJCQkgICAvKiBTRFJBTSBUaW1pbmcgKi8KKwkJCSAgIC50cmFzX2RlbGF5ICh0cmFzX2RlbGF5KSwKKwkJCSAgIC50cnBfZGVsYXkgKHRycF9kZWxheSksCisJCQkgICAudHJjZF9kZWxheSAodHJjZF9kZWxheSkpOworICAgCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEluc3RhbnRpYXRlIEJhbmsgQ3RsIEZTTSAxCisKKyAgIHNkcmNfYmFua19mc20gYmFuazFfZnNtICguY2xrIChjbGspLAorCQkJICAgLnJlc2V0X24gKHJlc2V0X24pLAorCisJCQkgICAvKiBSZXEgZnJvbSByZXFfZ2VuICovCisJCQkgICAucjJiX3JlcSAocjJpX3JlcVsxXSksCisJCQkgICAucjJiX3JlcV9pZCAocjJiX3JlcV9pZCksCisJCQkgICAucjJiX3N0YXJ0IChyMmJfc3RhcnQpLAorCQkJICAgLnIyYl9sYXN0IChyMmJfbGFzdCksCisJCQkgICAucjJiX3dyYXAgKHIyYl93cmFwKSwKKwkJCSAgIC5yMmJfcmFkZHIgKHIyYl9yYWRkciksCisJCQkgICAucjJiX2NhZGRyIChyMmJfY2FkZHIpLAorCQkJICAgLnIyYl9sZW4gKHIyYl9sZW4pLAorCQkJICAgLnIyYl93cml0ZSAocjJiX3dyaXRlKSwKKwkJCSAgIC5iMnJfYWNrIChpMnJfYWNrWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZHJfZG1hX2xhc3QocmFua19iYV9sYXN0WzFdKSwKKworCQkJICAgLyogVHJhbnNmZXIgcmVxdWVzdCB0byB4ZnJfY3RsICovCisJCQkgICAuYjJ4X3JlcSAoaTJ4X3JlcVsxXSksCisJCQkgICAuYjJ4X3N0YXJ0IChpMnhfc3RhcnRbMV0pLAorCQkJICAgLmIyeF9sYXN0IChpMnhfbGFzdFsxXSksCisJCQkgICAuYjJ4X3dyYXAgKGkyeF93cmFwWzFdKSwKKwkJCSAgIC5iMnhfaWQgKGkyeF9pZDEpLAorCQkJICAgLmIyeF9hZGRyIChpMnhfYWRkcjEpLAorCQkJICAgLmIyeF9sZW4gKGkyeF9sZW4xKSwKKwkJCSAgIC5iMnhfY21kIChpMnhfY21kMSksCisJCQkgICAueDJiX2FjayAoeDJpX2Fja1sxXSksCisJCSAgICAgCisJCQkgICAvKiBTdGF0dXMgdG8vZnJvbSB4ZnJfY3RsICovCisJCQkgICAudHJhc19vayAodHJhc19va1sxXSksICAgICAgICAgICAKKwkJCSAgIC54ZnJfb2sgKHhmcl9va1sxXSksCisJCQkgICAueDJiX3JlZnJlc2ggKHgyYl9yZWZyZXNoKSwKKwkJCSAgIC54MmJfcHJlX29rICh4MmJfcHJlX29rWzFdKSwKKwkJCSAgIC54MmJfYWN0X29rICh4MmJfYWN0X29rKSwKKwkJCSAgIC54MmJfcmRvayAoeDJiX3Jkb2spLAorCQkJICAgLngyYl93cm9rICh4MmJfd3JvayksCisKKwkJCSAgIC5iYW5rX3JvdyhiYW5rMV9yb3cpLAorCisJCQkgICAvKiBTRFJBTSBUaW1pbmcgKi8KKwkJCSAgIC50cmFzX2RlbGF5ICh0cmFzX2RlbGF5KSwKKwkJCSAgIC50cnBfZGVsYXkgKHRycF9kZWxheSksCisJCQkgICAudHJjZF9kZWxheSAodHJjZF9kZWxheSkpOworICAgCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEluc3RhbnRpYXRlIEJhbmsgQ3RsIEZTTSAyCisKKyAgIHNkcmNfYmFua19mc20gYmFuazJfZnNtICguY2xrIChjbGspLAorCQkJICAgLnJlc2V0X24gKHJlc2V0X24pLAorCisJCQkgICAvKiBSZXEgZnJvbSByZXFfZ2VuICovCisJCQkgICAucjJiX3JlcSAocjJpX3JlcVsyXSksCisJCQkgICAucjJiX3JlcV9pZCAocjJiX3JlcV9pZCksCisJCQkgICAucjJiX3N0YXJ0IChyMmJfc3RhcnQpLAorCQkJICAgLnIyYl9sYXN0IChyMmJfbGFzdCksCisJCQkgICAucjJiX3dyYXAgKHIyYl93cmFwKSwKKwkJCSAgIC5yMmJfcmFkZHIgKHIyYl9yYWRkciksCisJCQkgICAucjJiX2NhZGRyIChyMmJfY2FkZHIpLAorCQkJICAgLnIyYl9sZW4gKHIyYl9sZW4pLAorCQkJICAgLnIyYl93cml0ZSAocjJiX3dyaXRlKSwKKwkJCSAgIC5iMnJfYWNrIChpMnJfYWNrWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZHJfZG1hX2xhc3QocmFua19iYV9sYXN0WzJdKSwKKworCQkJICAgLyogVHJhbnNmZXIgcmVxdWVzdCB0byB4ZnJfY3RsICovCisJCQkgICAuYjJ4X3JlcSAoaTJ4X3JlcVsyXSksCisJCQkgICAuYjJ4X3N0YXJ0IChpMnhfc3RhcnRbMl0pLAorCQkJICAgLmIyeF9sYXN0IChpMnhfbGFzdFsyXSksCisJCQkgICAuYjJ4X3dyYXAgKGkyeF93cmFwWzJdKSwKKwkJCSAgIC5iMnhfaWQgKGkyeF9pZDIpLAorCQkJICAgLmIyeF9hZGRyIChpMnhfYWRkcjIpLAorCQkJICAgLmIyeF9sZW4gKGkyeF9sZW4yKSwKKwkJCSAgIC5iMnhfY21kIChpMnhfY21kMiksCisJCQkgICAueDJiX2FjayAoeDJpX2Fja1syXSksCisJCSAgICAgCisJCQkgICAvKiBTdGF0dXMgdG8vZnJvbSB4ZnJfY3RsICovCisJCQkgICAudHJhc19vayAodHJhc19va1syXSksICAgICAgICAgICAKKwkJCSAgIC54ZnJfb2sgKHhmcl9va1syXSksCisJCQkgICAueDJiX3JlZnJlc2ggKHgyYl9yZWZyZXNoKSwKKwkJCSAgIC54MmJfcHJlX29rICh4MmJfcHJlX29rWzJdKSwKKwkJCSAgIC54MmJfYWN0X29rICh4MmJfYWN0X29rKSwKKwkJCSAgIC54MmJfcmRvayAoeDJiX3Jkb2spLAorCQkJICAgLngyYl93cm9rICh4MmJfd3JvayksCisKKwkJCSAgIC5iYW5rX3JvdyhiYW5rMl9yb3cpLAorCisJCQkgICAvKiBTRFJBTSBUaW1pbmcgKi8KKwkJCSAgIC50cmFzX2RlbGF5ICh0cmFzX2RlbGF5KSwKKwkJCSAgIC50cnBfZGVsYXkgKHRycF9kZWxheSksCisJCQkgICAudHJjZF9kZWxheSAodHJjZF9kZWxheSkpOworICAgCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEluc3RhbnRpYXRlIEJhbmsgQ3RsIEZTTSAzCisKKyAgIHNkcmNfYmFua19mc20gYmFuazNfZnNtICguY2xrIChjbGspLAorCQkJICAgLnJlc2V0X24gKHJlc2V0X24pLAorCisJCQkgICAvKiBSZXEgZnJvbSByZXFfZ2VuICovCisJCQkgICAucjJiX3JlcSAocjJpX3JlcVszXSksCisJCQkgICAucjJiX3JlcV9pZCAocjJiX3JlcV9pZCksCisJCQkgICAucjJiX3N0YXJ0IChyMmJfc3RhcnQpLAorCQkJICAgLnIyYl9sYXN0IChyMmJfbGFzdCksCisJCQkgICAucjJiX3dyYXAgKHIyYl93cmFwKSwKKwkJCSAgIC5yMmJfcmFkZHIgKHIyYl9yYWRkciksCisJCQkgICAucjJiX2NhZGRyIChyMmJfY2FkZHIpLAorCQkJICAgLnIyYl9sZW4gKHIyYl9sZW4pLAorCQkJICAgLnIyYl93cml0ZSAocjJiX3dyaXRlKSwKKwkJCSAgIC5iMnJfYWNrIChpMnJfYWNrWzNdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZHJfZG1hX2xhc3QocmFua19iYV9sYXN0WzNdKSwKKworCQkJICAgLyogVHJhbnNmZXIgcmVxdWVzdCB0byB4ZnJfY3RsICovCisJCQkgICAuYjJ4X3JlcSAoaTJ4X3JlcVszXSksCisJCQkgICAuYjJ4X3N0YXJ0IChpMnhfc3RhcnRbM10pLAorCQkJICAgLmIyeF9sYXN0IChpMnhfbGFzdFszXSksCisJCQkgICAuYjJ4X3dyYXAgKGkyeF93cmFwWzNdKSwKKwkJCSAgIC5iMnhfaWQgKGkyeF9pZDMpLAorCQkJICAgLmIyeF9hZGRyIChpMnhfYWRkcjMpLAorCQkJICAgLmIyeF9sZW4gKGkyeF9sZW4zKSwKKwkJCSAgIC5iMnhfY21kIChpMnhfY21kMyksCisJCQkgICAueDJiX2FjayAoeDJpX2Fja1szXSksCisJCSAgICAgCisJCQkgICAvKiBTdGF0dXMgdG8vZnJvbSB4ZnJfY3RsICovCisJCQkgICAudHJhc19vayAodHJhc19va1szXSksICAgICAgICAgICAKKwkJCSAgIC54ZnJfb2sgKHhmcl9va1szXSksCisJCQkgICAueDJiX3JlZnJlc2ggKHgyYl9yZWZyZXNoKSwKKwkJCSAgIC54MmJfcHJlX29rICh4MmJfcHJlX29rWzNdKSwKKwkJCSAgIC54MmJfYWN0X29rICh4MmJfYWN0X29rKSwKKwkJCSAgIC54MmJfcmRvayAoeDJiX3Jkb2spLAorCQkJICAgLngyYl93cm9rICh4MmJfd3JvayksCisKKwkJCSAgIC5iYW5rX3JvdyhiYW5rM19yb3cpLAorCisJCQkgICAvKiBTRFJBTSBUaW1pbmcgKi8KKwkJCSAgIC50cmFzX2RlbGF5ICh0cmFzX2RlbGF5KSwKKwkJCSAgIC50cnBfZGVsYXkgKHRycF9kZWxheSksCisJCQkgICAudHJjZF9kZWxheSAodHJjZF9kZWxheSkpOworICAgCisKKy8qIGFkZHJlc3MgZm9yIGN1cnJlbnQgeGZyLCBkZWJ1ZyBvbmx5ICovCit3aXJlIFsxMjowXSBjdXJfcm93ID0gKHhmcl9iYW5rX3NlbD09MykgPyBiYW5rM19yb3c6CisJCQkoeGZyX2Jhbmtfc2VsPT0yKSA/IGJhbmsyX3JvdzogCisJCQkoeGZyX2Jhbmtfc2VsPT0xKSA/IGJhbmsxX3JvdzogYmFuazBfcm93OyAKKworIAorCitlbmRtb2R1bGUgLy8gc2RyX2JhbmtfY3RsCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYmFua19mc20udiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19iYW5rX2ZzbS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlZWIxZTkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYmFua19mc20udgpAQCAtMCwwICsxLDM3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgU0RSQU0gQ29udHJvbGxlciBCYW5rIENvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAorICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvc2RyX2N0cmwvICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIERlc2NyaXB0aW9uOiAKKyAgICBUaGlzIG1vZHVsZSB0YWtlcyByZXF1ZXN0cyBmcm9tIHNkcmNfcmVxX2dlbiwgY2hlY2tzIGZvciBwYWdlIGhpdC9taXNzIGFuZAorICAgIGlzc3VlcyBwcmVjaGFyZ2UvYWN0aXZhdGUgY29tbWFuZHMgYW5kIHRoZW4gcGFzc2VzIHRoZSByZXF1ZXN0IHRvIHNkcmNfeGZyX2N0bC4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgCisgIFZlcnNpb24gIDogIDEuMCAgLSA4dGggSmFuIDIwMTIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCisgcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAorIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKK2xhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCisgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKKyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitgaW5jbHVkZSAic2RyY19kZWZpbmUudiIKKworbW9kdWxlIHNkcmNfYmFua19mc20gKGNsaywKKwkJICAgICByZXNldF9uLAorCisJCSAgICAgLyogUmVxIGZyb20gcmVxX2dlbiAqLworCQkgICAgIHIyYl9yZXEsCSAgIC8vIHJlcXVlc3QKKwkJICAgICByMmJfcmVxX2lkLCAgIC8vIElECisJCSAgICAgcjJiX3N0YXJ0LAkgICAvLyBGaXJzdCBjaHVuayBvZiBidXJzdAorCQkgICAgIHIyYl9sYXN0LAkgICAvLyBMYXN0IGNodW5rIG9mIGJ1cnN0CisJCSAgICAgcjJiX3dyYXAsCisJCSAgICAgcjJiX3JhZGRyLAkgICAvLyByb3cgYWRkcmVzcworCQkgICAgIHIyYl9jYWRkciwJICAgLy8gY29sIGFkZHJlc3MKKwkJICAgICByMmJfbGVuLAkgICAvLyBsZW5ndGgKKwkJICAgICByMmJfd3JpdGUsCSAgIC8vIHdyaXRlIHJlcXVlc3QKKwkJICAgICBiMnJfYWNrLAorICAgICAgICAgICAgICAgICAgICAgc2RyX2RtYV9sYXN0LAorCisJCSAgICAgLyogVHJhbnNmZXIgcmVxdWVzdCB0byB4ZnJfY3RsICovCisJCSAgICAgYjJ4X3JlcSwJICAgLy8gUmVxdWVzdCB0byB4ZnJfY3RsCisJCSAgICAgYjJ4X3N0YXJ0LAkgICAvLyBmaXJzdCBjaHVuayBvZiB0cmFuc2ZlcgorCQkgICAgIGIyeF9sYXN0LAkgICAvLyBsYXN0IGNodW5rIG9mIHRyYW5zZmVyCisJCSAgICAgYjJ4X3dyYXAsCisJCSAgICAgYjJ4X2lkLAkgICAvLyBUcmFuc2ZlciBJRAorCQkgICAgIGIyeF9hZGRyLAkgICAvLyByb3cvY29sIGFkZHJlc3MKKwkJICAgICBiMnhfbGVuLAkgICAvLyB0cmFuc2ZlciBsZW5ndGgKKwkJICAgICBiMnhfY21kLAkgICAvLyB0cmFuc2ZlciBjb21tYW5kCisJCSAgICAgeDJiX2FjaywJICAgLy8gY29tbWFuZCBhY2NlcHRlZAorCQkgICAgIAorCQkgICAgIC8qIFN0YXR1cyB0by9mcm9tIHhmcl9jdGwgKi8KKwkJICAgICB0cmFzX29rLCAgICAgIC8vIFRSQVMgT0sgZm9yIHRoaXMgYmFuaworCQkgICAgIHhmcl9vaywKKwkJICAgICB4MmJfcmVmcmVzaCwgIC8vIFdlIGRpZCBhIHJlZnJlc2gKKwkJICAgICB4MmJfcHJlX29rLCAgIC8vIE9LIHRvIGRvIGEgcHJlY2hhcmdlIChwZXIgYmFuaykKKwkJICAgICB4MmJfYWN0X29rLCAgIC8vIE9LIHRvIGRvIGFuIGFjdGl2YXRlCisJCSAgICAgeDJiX3Jkb2ssCSAgIC8vIE9LIHRvIGRvIGEgcmVhZAorCQkgICAgIHgyYl93cm9rLAkgICAvLyBPSyB0byBkbyBhIHdyaXRlCisKKwkJICAgICAvKiBjdXJyZW50IHhmciByb3cgYWRkcmVzcyBvZiB0aGUgYmFuayAqLworCQkgICAgIGJhbmtfcm93LAorCisJCSAgICAgLyogU0RSQU0gVGltaW5nICovCisJCSAgICAgdHJhc19kZWxheSwgICAvLyBBY3RpdmUgdG8gcHJlY2hhcmdlIGRlbGF5CisJCSAgICAgdHJwX2RlbGF5LAkgICAvLyBQcmVjaGFyZ2UgdG8gYWN0aXZlIGRlbGF5CisJCSAgICAgdHJjZF9kZWxheSk7ICAvLyBBY3RpdmUgdG8gUi9XIGRlbGF5CisgICAKKworcGFyYW1ldGVyICBTRFJfRFcgICA9IDE2OyAgLy8gU0RSIERhdGEgV2lkdGggCitwYXJhbWV0ZXIgIFNEUl9CVyAgID0gMjsgICAvLyBTRFIgQnl0ZSBXaWR0aAorCisgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgIGNsaywgcmVzZXRfbjsKKworICAgLyogUmVxIGZyb20gYmFua19jdGwgKi8KKyAgIGlucHV0IAkJCXIyYl9yZXEsIHIyYl9zdGFydCwgcjJiX2xhc3QsCisJCQkJcjJiX3dyaXRlLCByMmJfd3JhcDsKKyAgIGlucHV0IFtgU0RSX1JFUV9JRF9XLTE6MF0gCXIyYl9yZXFfaWQ7CisgICBpbnB1dCBbMTI6MF0gCQlyMmJfcmFkZHI7CisgICBpbnB1dCBbMTI6MF0gCQlyMmJfY2FkZHI7CisgICBpbnB1dCBbYFJFUV9CVy0xOjBdIAlyMmJfbGVuOworICAgb3V0cHV0IAkJCWIycl9hY2s7CisgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgIHNkcl9kbWFfbGFzdDsKKworICAgLyogUmVxIHRvIHhmcl9jdGwgKi8KKyAgIG91dHB1dCAJCQliMnhfcmVxLCBiMnhfc3RhcnQsIGIyeF9sYXN0LAorCQkJCXRyYXNfb2ssIGIyeF93cmFwOworICAgb3V0cHV0IFtgU0RSX1JFUV9JRF9XLTE6MF0gCWIyeF9pZDsKKyAgIG91dHB1dCBbMTI6MF0gCQliMnhfYWRkcjsKKyAgIG91dHB1dCBbYFJFUV9CVy0xOjBdIAliMnhfbGVuOworICAgb3V0cHV0IFsxOjBdIAkJYjJ4X2NtZDsKKyAgIGlucHV0IAkJCXgyYl9hY2s7CisKKyAgIC8qIFN0YXR1cyBmcm9tIHhmcl9jdGwgKi8KKyAgIGlucHV0IAkJCXgyYl9yZWZyZXNoLCB4MmJfYWN0X29rLCB4MmJfcmRvaywKKwkJCQl4MmJfd3JvaywgeDJiX3ByZV9vaywgeGZyX29rOworICAgCisgICBpbnB1dCBbMzowXSAJCQl0cmFzX2RlbGF5LCB0cnBfZGVsYXksIHRyY2RfZGVsYXk7CisKKyAgIG91dHB1dCBbMTI6MF0gCQkJYmFua19yb3c7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgLy8gSW50ZXJuYWwgTmV0cworCisgICBgZGVmaW5lIEJBTktfSURMRSAgICAgICAgIDMnYjAwMAorICAgYGRlZmluZSBCQU5LX1BSRSAgICAgICAgICAzJ2IwMDEKKyAgIGBkZWZpbmUgQkFOS19BQ1QgICAgICAgICAgMydiMDEwCisgICBgZGVmaW5lIEJBTktfWEZSICAgICAgICAgIDMnYjAxMQorICAgYGRlZmluZSBCQU5LX0RNQV9MQVNUX1BSRSAzJ2IxMDAKKworICAgcmVnIFsyOjBdIAkJCWJhbmtfc3QsIG5leHRfYmFua19zdDsKKyAgIHdpcmUgCQkJYjJ4X3N0YXJ0LCBiMnhfbGFzdDsKKyAgIHJlZyAJCQkJbF9zdGFydCwgbF9sYXN0OworICAgcmVnIAkJCQliMnhfcmVxLCBiMnJfYWNrOworICAgd2lyZSBbYFNEUl9SRVFfSURfVy0xOjBdIAliMnhfaWQ7CisgICByZWcgW2BTRFJfUkVRX0lEX1ctMTowXSAJbF9pZDsKKyAgIHJlZyBbMTI6MF0gCQkJYjJ4X2FkZHI7CisgICByZWcgW2BSRVFfQlctMTowXSAJbF9sZW47CisgICB3aXJlIFtgUkVRX0JXLTE6MF0gCWIyeF9sZW47CisgICByZWcgWzE6MF0gCQkJYjJ4X2NtZF90OworICAgcmVnICAJCQliYW5rX3ZhbGlkOworICAgcmVnIFsxMjowXSAJCQliYW5rX3JvdzsKKyAgIHJlZyBbMzowXSAJCQl0cmFzX2NudHIsIHRpbWVyMDsKKyAgIHJlZyAJCQkJbF93cmFwLCBsX3dyaXRlOworICAgd2lyZSAJCQliMnhfd3JhcDsKKyAgIHJlZyBbMTI6MF0gCQkJbF9yYWRkcjsKKyAgIHJlZyBbMTI6MF0gCQkJbF9jYWRkcjsKKyAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgbF9zZHJfZG1hX2xhc3Q7CisgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmtfcHJlY2hfcGFnZV9jbG9zZWQ7CisgICAKKyAgIHdpcmUgIAkJCXRyYXNfb2tfaW50ZXJuYWwsIHRyYXNfb2ssIGFjdGl2YXRlX2Jhbms7CisgICAKKyAgIHdpcmUgCQkJcGFnZV9oaXQsIHRpbWVyMF90Y190LCBsZF90cnAsIGxkX3RyY2Q7CisKKyAgIC8qKiogVGltaW5nIEJyZWFrIExvZ2ljIEFkZGVkIGZvciBGUEdBIC0gU3RhcnQgKioqKi8KKyAgIHJlZwl4MmJfd3Jva19yLCB4ZnJfb2tfciAsIHgyYl9yZG9rX3I7CisgICByZWcgWzE6MF0gYjJ4X2NtZF9yLHRpbWVyMF90Y19yLHRyYXNfb2tfcix4MmJfcHJlX29rX3IseDJiX2FjdF9va19yOworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKQorICAgICAgaWYgKH5yZXNldF9uKSBiZWdpbgorCSB4MmJfd3Jva19yIDw9IDEnYjA7CisJIHhmcl9va19yICAgPD0gMSdiMDsKKwkgeDJiX3Jkb2tfciA8PSAxJ2IwOworCSBiMnhfY21kX3IgIDw9IDInYjA7CisJIHRpbWVyMF90Y19yICA8PSAxJ2IwOworCSB0cmFzX29rX3IgICAgPD0gMSdiMDsKKwkgeDJiX3ByZV9va19yIDw9IDEnYjA7CisJIHgyYl9hY3Rfb2tfciA8PSAxJ2IwOworICAgICAgZW5kCisgICAgICBlbHNlIGJlZ2luCisJIHgyYl93cm9rX3IgPD0geDJiX3dyb2s7CisJIHhmcl9va19yICAgPD0geGZyX29rOworCSB4MmJfcmRva19yIDw9IHgyYl9yZG9rOworCSBiMnhfY21kX3IgIDw9IGIyeF9jbWRfdDsKKwkgdGltZXIwX3RjX3IgPD0gKGxkX3RycCB8IGxkX3RyY2QpID8gMSdiMCA6IHRpbWVyMF90Y190OworCSB0cmFzX29rX3IgICA8PSB0cmFzX29rX2ludGVybmFsOworCSB4MmJfcHJlX29rX3IgIDw9IHgyYl9wcmVfb2s7CisJIHgyYl9hY3Rfb2tfciAgPD0geDJiX2FjdF9vazsKKyAgICAgIGVuZAorCisgd2lyZSAgeDJiX3dyb2tfdCAgICAgPSAoYFRBUkdFVF9ERVNJR04gPT0gYEZQR0EpID8geDJiX3dyb2tfciA6IHgyYl93cm9rOworIHdpcmUgIHhmcl9va190ICAgICAgID0gKGBUQVJHRVRfREVTSUdOID09IGBGUEdBKSA/IHhmcl9va19yIDogeGZyX29rOworIHdpcmUgIHgyYl9yZG9rX3QgICAgID0gKGBUQVJHRVRfREVTSUdOID09IGBGUEdBKSA/IHgyYl9yZG9rX3IgOiB4MmJfcmRvazsKKyB3aXJlIFsxOjBdIGIyeF9jbWQgICA9IChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyBiMnhfY21kX3IgOiBiMnhfY21kX3Q7Cisgd2lyZSAgdGltZXIwX3RjICAgICAgPSAoYFRBUkdFVF9ERVNJR04gPT0gYEZQR0EpID8gdGltZXIwX3RjX3IgOiB0aW1lcjBfdGNfdDsKKyBhc3NpZ24gIHRyYXNfb2sgICAgICA9IChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyB0cmFzX29rX3IgOiB0cmFzX29rX2ludGVybmFsOworIHdpcmUgIHgyYl9wcmVfb2tfdCAgID0gKGBUQVJHRVRfREVTSUdOID09IGBGUEdBKSA/IHgyYl9wcmVfb2tfciA6IHgyYl9wcmVfb2s7Cisgd2lyZSAgeDJiX2FjdF9va190ICAgPSAoYFRBUkdFVF9ERVNJR04gPT0gYEZQR0EpID8geDJiX2FjdF9va19yIDogeDJiX2FjdF9vazsKKworICAgLyoqKiBUaW1pbmcgQnJlYWsgTG9naWMgQWRkZWQgZm9yIEZQR0EgLSBFbmQqKioqLworCisKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsaykKKyAgICAgIGlmICh+cmVzZXRfbikgYmVnaW4KKwkgYmFua192YWxpZCA8PSAxJ2IwOworCSB0cmFzX2NudHIgPD0gNCdiMDsKKwkgdGltZXIwIDw9IDQnYjA7CisJIGJhbmtfc3QgPD0gYEJBTktfSURMRTsKKyAgICAgIGVuZCAvLyBpZiAofnJlc2V0X24pCisKKyAgICAgIGVsc2UgYmVnaW4KKworCSBiYW5rX3ZhbGlkIDw9ICh4MmJfcmVmcmVzaCB8fCBiYW5rX3ByZWNoX3BhZ2VfY2xvc2VkKSA/IDEnYjAgOiAgLy8gZm9yY2UgdGhlIGJhbmsgc3RhdHVzIHRvIGJlIGludmFsaWQKKwkJICAgICAgIChhY3RpdmF0ZV9iYW5rKSA/IDEnYjEgOiBiYW5rX3ZhbGlkOworCisJIHRyYXNfY250ciA8PSAoYWN0aXZhdGVfYmFuaykgPyB0cmFzX2RlbGF5IDoKKwkJICAgICAgKH50cmFzX29rX2ludGVybmFsKSA/IHRyYXNfY250ciAtIDQnYjEgOiA0J2IwOworCSAKKwkgdGltZXIwIDw9IChsZF90cnApID8gdHJwX2RlbGF5IDoKKwkJICAgKGxkX3RyY2QpID8gdHJjZF9kZWxheSA6CisJCSAgICh0aW1lcjAgIT0gJ2gwKSA/IHRpbWVyMCAtIDQnYjEgOiB0aW1lcjA7CisJIAorCSBiYW5rX3N0IDw9IG5leHRfYmFua19zdDsKKworICAgICAgZW5kIC8vIGVsc2U6ICFpZih+cmVzZXRfbikKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKSBiZWdpbiAKKworICAgICAgYmFua19yb3cgPD0gKGJhbmtfc3QgPT0gYEJBTktfQUNUKSA/IGIyeF9hZGRyIDogYmFua19yb3c7CisKKyAgICAgIGlmICh+cmVzZXRfbikgYmVnaW4KKwkgbF9zdGFydCA8PSAxJ2IwOworCSBsX2xhc3QgPD0gMSdiMDsKKwkgbF9pZCA8PSAxJ2IwOworCSBsX2xlbiA8PSAxJ2IwOworCSBsX3dyYXAgPD0gMSdiMDsKKwkgbF93cml0ZSA8PSAxJ2IwOworCSBsX3JhZGRyIDw9IDEnYjA7CisJIGxfY2FkZHIgPD0gMSdiMDsKKyAgICAgICAgIGxfc2RyX2RtYV9sYXN0IDw9IDEnYjA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgaWYgKGIycl9hY2spIGJlZ2luCisgIAkgICBsX3N0YXJ0IDw9IHIyYl9zdGFydDsKKyAgCSAgIGxfbGFzdCA8PSByMmJfbGFzdDsKKyAgCSAgIGxfaWQgPD0gcjJiX3JlcV9pZDsKKyAgCSAgIGxfbGVuIDw9IHIyYl9sZW47CisgIAkgICBsX3dyYXAgPD0gcjJiX3dyYXA7CisgIAkgICBsX3dyaXRlIDw9IHIyYl93cml0ZTsKKyAgCSAgIGxfcmFkZHIgPD0gcjJiX3JhZGRyOworICAJICAgbF9jYWRkciA8PSByMmJfY2FkZHI7CisgICAgICAgICAgIGxfc2RyX2RtYV9sYXN0IDw9IHNkcl9kbWFfbGFzdDsKKyAgICAgICAgZW5kIC8vIGlmIChiMnJfYWNrKQorICAgICAgZW5kCisKKyAgIGVuZCAvLyBhbHdheXMgQCAocG9zZWRnZSBjbGspCisgICAKKyAgIGFzc2lnbiB0cmFzX29rX2ludGVybmFsID0gfnx0cmFzX2NudHI7CisKKyAgIGFzc2lnbiBhY3RpdmF0ZV9iYW5rID0gKGIyeF9jbWQgPT0gYE9QX0FDVCkgJiB4MmJfYWNrOworCisgICBhc3NpZ24gcGFnZV9oaXQgPSAocjJiX3JhZGRyID09IGJhbmtfcm93KSA/IGJhbmtfdmFsaWQgOiAxJ2IwOyAgICAvLyBpdHMgYSBoaXQgb25seSBpZiBiYW5rIGlzIHZhbGlkCisKKyAgIGFzc2lnbiB0aW1lcjBfdGNfdCA9IH58dGltZXIwOworCisgICBhc3NpZ24gbGRfdHJwID0gKGIyeF9jbWQgPT0gYE9QX1BSRSkgPyB4MmJfYWNrIDogMSdiMDsKKworICAgYXNzaWduIGxkX3RyY2QgPSAoYjJ4X2NtZCA9PSBgT1BfQUNUKSA/IHgyYl9hY2sgOiAxJ2IwOworICAgCisKKworICAgYWx3YXlzIEAgKCopIGJlZ2luCisKKyAgICAgICBiYW5rX3ByZWNoX3BhZ2VfY2xvc2VkID0gMSdiMDsKKyAgICAgICBiMnhfcmVxID0gMSdiMDsKKyAgICAgICBiMnhfY21kX3QgPSAyJ2J4OworICAgICAgIGIycl9hY2sgPSAxJ2IwOworICAgICAgIGIyeF9hZGRyID0gMTMnYng7CisgICAgICAgbmV4dF9iYW5rX3N0ID0gYmFua19zdDsKKworICAgICAgY2FzZSAoYmFua19zdCkKKworCWBCQU5LX0lETEUgOiBiZWdpbgorCQlpZihgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgYmVnaW4gLy8gVG8gYnJlYWsgdGhlIHRpbWluZywgYjJ4IHJlcXVlc3QgYXJlIGdlbmVyYXRlZCBkZWxheWVkCisJICAgICAgICAgICAgIGlmICh+cjJiX3JlcSkgYmVnaW4KKwkgICAgICAgICAgICAgICAgbmV4dF9iYW5rX3N0ID0gYEJBTktfSURMRTsKKwkgICAgICAgICAgICAgZW5kIC8vIGlmICh+cjJiX3JlcSkKKwkgICAgICAgICAgICAgZWxzZSBpZiAocGFnZV9oaXQpIGJlZ2luIAorCSAgICAgICAgICAgICAgICBiMnJfYWNrID0gMSdiMTsKKwkgICAgICAgICAgICAgICAgYjJ4X2NtZF90ID0gKHIyYl93cml0ZSkgPyBgT1BfV1IgOiBgT1BfUkQ7CisJICAgICAgICAgICAgICAgIG5leHRfYmFua19zdCA9IGBCQU5LX1hGUjsgIAorCSAgICAgICAgICAgICBlbmQgLy8gaWYgKHBhZ2VfaGl0KQorCSAgICAgICAgICAgICBlbHNlIGJlZ2luICAvLyBwYWdlX21pc3MKKwkgICAgICAgICAgICAgICAgYjJyX2FjayA9IDEnYjE7CisJICAgICAgICAgICAgICAgIGIyeF9jbWRfdCA9IGBPUF9QUkU7CisJICAgICAgICAgICAgICAgIG5leHRfYmFua19zdCA9IGBCQU5LX1BSRTsgIC8vIGJhbmsgd2FzIHByZWNoYXJnZWQgb24gbF9zZHJfZG1hX2xhc3QKKwkgICAgICAgICAgICAgZW5kIC8vIGVsc2U6ICFpZihwYWdlX2hpdCkKKwkJZW5kIGVsc2UgYmVnaW4gLy8gQVNJQworCSAgICAgICAgICAgICBpZiAofnIyYl9yZXEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBiYW5rX3ByZWNoX3BhZ2VfY2xvc2VkID0gMSdiMDsKKwkgICAgICAgICAgICAgICAgYjJ4X3JlcSA9IDEnYjA7CisJICAgICAgICAgICAgICAgIGIyeF9jbWRfdCA9IDInYng7CisJICAgICAgICAgICAgICAgIGIycl9hY2sgPSAxJ2IwOworCSAgICAgICAgICAgICAgICBiMnhfYWRkciA9IDEzJ2J4OworCSAgICAgICAgICAgICAgICBuZXh0X2Jhbmtfc3QgPSBgQkFOS19JRExFOworCSAgICAgICAgICAgICBlbmQgLy8gaWYgKH5yMmJfcmVxKQorCSAgICAgICAgICAgICBlbHNlIGlmIChwYWdlX2hpdCkgYmVnaW4gCisJICAgICAgICAgICAgICAgIGIyeF9yZXEgPSAocjJiX3dyaXRlKSA/IHgyYl93cm9rX3QgJiB4ZnJfb2tfdCA6IAorCQkJICAgICAgICAgICAgICAgICAgICAgICB4MmJfcmRva190ICYgeGZyX29rX3Q7CisJICAgICAgICAgICAgICAgIGIyeF9jbWRfdCA9IChyMmJfd3JpdGUpID8gYE9QX1dSIDogYE9QX1JEOworCSAgICAgICAgICAgICAgICBiMnJfYWNrID0gMSdiMTsKKwkgICAgICAgICAgICAgICAgYjJ4X2FkZHIgPSByMmJfY2FkZHI7CisJICAgICAgICAgICAgICAgIG5leHRfYmFua19zdCA9ICh4MmJfYWNrKSA/IGBCQU5LX0lETEUgOiBgQkFOS19YRlI7ICAvLyBpbiBjYXNlIG9mIGhpdCwgc3RheSBoZXJlIHRpbGwgeGZyIHNtIGFja3MKKwkgICAgICAgICAgICAgZW5kIC8vIGlmIChwYWdlX2hpdCkKKwkgICAgICAgICAgICAgZWxzZSBiZWdpbiAgLy8gcGFnZV9taXNzCisJICAgICAgICAgICAgICAgIGIyeF9yZXEgPSB0cmFzX29rICYgeDJiX3ByZV9va190OworCSAgICAgICAgICAgICAgICBiMnhfY21kX3QgPSBgT1BfUFJFOworCSAgICAgICAgICAgICAgICBiMnJfYWNrID0gMSdiMTsKKwkgICAgICAgICAgICAgICAgYjJ4X2FkZHIgPSByMmJfcmFkZHIgJiAxMydoQkZGOwkgICAvLyBEb250IHdhbnQgdG8gcHJlIGFsbCBiYW5rcyEKKwkgICAgICAgICAgICAgICAgbmV4dF9iYW5rX3N0ID0gKGxfc2RyX2RtYV9sYXN0KSA/IGBCQU5LX1BSRSA6ICh4MmJfYWNrKSA/IGBCQU5LX0FDVCA6IGBCQU5LX1BSRTsgIC8vIGJhbmsgd2FzIHByZWNoYXJnZWQgb24gbF9zZHJfZG1hX2xhc3QKKwkgICAgICAgICAgICAgZW5kIC8vIGVsc2U6ICFpZihwYWdlX2hpdCkKKwkgICAgICAgIGVuZAorCWVuZCAvLyBjYXNlOiBgQkFOS19JRExFCisKKwlgQkFOS19QUkUgOiBiZWdpbgorCSAgIGIyeF9yZXEgPSB0cmFzX29rICYgeDJiX3ByZV9va190OworCSAgIGIyeF9jbWRfdCA9IGBPUF9QUkU7CisJICAgYjJyX2FjayA9IDEnYjA7CisJICAgYjJ4X2FkZHIgPSBsX3JhZGRyICYgMTMnaEJGRjsJICAgLy8gRG9udCB3YW50IHRvIHByZSBhbGwgYmFua3MhCisgICAgICAgICAgIGJhbmtfcHJlY2hfcGFnZV9jbG9zZWQgPSAxJ2IwOworCSAgIG5leHRfYmFua19zdCA9ICh4MmJfYWNrKSA/IGBCQU5LX0FDVCA6IGBCQU5LX1BSRTsKKwllbmQgLy8gY2FzZTogYEJBTktfUFJFCisKKwlgQkFOS19BQ1QgOiBiZWdpbgorCSAgIGIyeF9yZXEgPSB0aW1lcjBfdGMgJiB4MmJfYWN0X29rX3Q7CisJICAgYjJ4X2NtZF90ID0gYE9QX0FDVDsKKwkgICBiMnJfYWNrID0gMSdiMDsKKwkgICBiMnhfYWRkciA9IGxfcmFkZHI7CisgICAgICAgICAgIGJhbmtfcHJlY2hfcGFnZV9jbG9zZWQgPSAxJ2IwOworCSAgIG5leHRfYmFua19zdCA9ICh4MmJfYWNrKSA/IGBCQU5LX1hGUiA6IGBCQU5LX0FDVDsKKwllbmQgLy8gY2FzZTogYEJBTktfQUNUCisJCisJYEJBTktfWEZSIDogYmVnaW4KKwkgICBiMnhfcmVxID0gKGxfd3JpdGUpID8gdGltZXIwX3RjICYgeDJiX3dyb2tfdCAmIHhmcl9va190IDoKKwkJICAgICB0aW1lcjBfdGMgJiB4MmJfcmRva190ICYgeGZyX29rX3Q7IAorCSAgIGIyeF9jbWRfdCA9IChsX3dyaXRlKSA/IGBPUF9XUiA6IGBPUF9SRDsKKwkgICBiMnJfYWNrID0gMSdiMDsKKwkgICBiMnhfYWRkciA9IGxfY2FkZHI7CisgICAgICAgICAgIGJhbmtfcHJlY2hfcGFnZV9jbG9zZWQgPSAxJ2IwOworCSAgIG5leHRfYmFua19zdCA9ICh4MmJfcmVmcmVzaCkgPyBgQkFOS19BQ1QgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHgyYl9hY2sgJiBsX3Nkcl9kbWFfbGFzdCkgPyBgQkFOS19ETUFfTEFTVF9QUkUgOgorCQkJICAoeDJiX2FjaykgPyBgQkFOS19JRExFIDogYEJBTktfWEZSOworCWVuZCAvLyBjYXNlOiBgQkFOS19YRlIKKworICAgICAgICBgQkFOS19ETUFfTEFTVF9QUkUgOiBiZWdpbgorCSAgIGIyeF9yZXEgPSB0cmFzX29rICYgeDJiX3ByZV9va190OworCSAgIGIyeF9jbWRfdCA9IGBPUF9QUkU7CisJICAgYjJyX2FjayA9IDEnYjA7CisJICAgYjJ4X2FkZHIgPSBsX3JhZGRyICYgMTMnaEJGRjsJICAgLy8gRG9udCB3YW50IHRvIHByZSBhbGwgYmFua3MhCisgICAgICAgICAgIGJhbmtfcHJlY2hfcGFnZV9jbG9zZWQgPSAxJ2IxOworCSAgIG5leHRfYmFua19zdCA9ICh4MmJfYWNrKSA/IGBCQU5LX0lETEUgOiBgQkFOS19ETUFfTEFTVF9QUkU7CisJZW5kIC8vIGNhc2U6IGBCQU5LX0RNQV9MQVNUX1BSRQorICAgICAgICAgIAorICAgICAgZW5kY2FzZSAvLyBjYXNlKGJhbmtfc3QpCisKKyAgIGVuZCAvLyBhbHdheXMgQCAoYmFua19zdCBvciAuLi4pCisKKyAgIGFzc2lnbiBiMnhfc3RhcnQgPSAoYmFua19zdCA9PSBgQkFOS19JRExFKSA/IHIyYl9zdGFydCA6IGxfc3RhcnQ7CisKKyAgIGFzc2lnbiBiMnhfbGFzdCA9IChiYW5rX3N0ID09IGBCQU5LX0lETEUpID8gcjJiX2xhc3QgOiBsX2xhc3Q7CisKKyAgIGFzc2lnbiBiMnhfaWQgPSAoYmFua19zdCA9PSBgQkFOS19JRExFKSA/IHIyYl9yZXFfaWQgOiBsX2lkOworCisgICBhc3NpZ24gYjJ4X2xlbiA9IChiYW5rX3N0ID09IGBCQU5LX0lETEUpID8gcjJiX2xlbiA6IGxfbGVuOworCisgICBhc3NpZ24gYjJ4X3dyYXAgPSAoYmFua19zdCA9PSBgQkFOS19JRExFKSA/IHIyYl93cmFwIDogbF93cmFwOworICAgCitlbmRtb2R1bGUgLy8gc2RyX2JhbmtfZnNtCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYnNfY29udmVydC52IGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2JzX2NvbnZlcnQudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMjVlNzRjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2JzX2NvbnZlcnQudgpAQCAtMCwwICsxLDIyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgU0RSQU0gQ29udHJvbGxlciBidXN3aWR0aCBjb252ZXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKKyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEZXNjcmlwdGlvbjogU0RSQU0gQ29udHJvbGxlciBCdXN3aWR0aCBjb252ZXJ0ZXIKKworICBUaGlzIG1vZHVsZSBkb2VzIHdyaXRlL3JlYWQgZGF0YSB0cmFuc2FsYXRpb24gYmV0d2VlbgorICAgICBhcHBsaWNhdGlvbiBkYXRhIHRvIFNEUkFNIGJ1cyB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICBWZXJzaW9uICA6ICAwLjAgIC0gOHRoIEphbiAyMDEyIC0gSW5pdGlhbCBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgMC4yIC0gMm5kIEZlYiAyMDEyCisJICAgICAgICAgSW1wcm92ZWQgdGhlIGNvbW1hbmQgcGlwZSBzdHJ1Y3R1cmUgdG8gYWNjZXB0IHVwLXRvIDQgY29tbWFuZCBvZiBkaWZmZXJlbnQgYmFuay4KKwkgICAgICAwLjMgLSA2dGggRmViIDIwMTIKKwkgICAgICAgICBCdWcgZml4IG9uIHJlYWQgdmFsaWQgZ2VuZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitgaW5jbHVkZSAic2RyY19kZWZpbmUudiIKK21vZHVsZSBzZHJjX2JzX2NvbnZlcnQgKAorICAgICAgICAgICAgICAgICAgICBjbGsgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgcmVzZXRfbiAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHNkcl93aWR0aCAgICAgICAgICAgLAorCisgICAgICAgIC8qIENvbnRyb2wgU2lnbmFsIGZyb20geGZyIGN0cmwgKi8KKyAgICAgICAgICAgICAgICAgICAgeDJhX3Jkc3RhcnQgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHgyYV93cnN0YXJ0ICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB4MmFfcmRsYXN0ICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgeDJhX3dybGFzdCAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHgyYV9yZGR0ICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB4MmFfcmRvayAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgYTJ4X3dyZHQgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIGEyeF93cmVuX24gICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB4MmFfd3JuZXh0ICAgICAgICAgICwKKworICAgLyogIENvbnRyb2wgU2lnbmFsIGZyb20vdG8gdG8gYXBwbGljYXRpb24gaS9mICAqLworICAgICAgICAgICAgICAgICAgICBhcHBfd3JfZGF0YSAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgYXBwX3dyX2VuX24gICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIGFwcF93cl9uZXh0ICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBhcHBfbGFzdF93ciAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgYXBwX3JkX2RhdGEgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIGFwcF9yZF92YWxpZCAgICAgICAgLAorCQkgICAgYXBwX2xhc3RfcmQKKwkJKTsKKworCitwYXJhbWV0ZXIgIEFQUF9BVyAgID0gMzA7ICAvLyBBcHBsaWNhdGlvbiBBZGRyZXNzIFdpZHRoCitwYXJhbWV0ZXIgIEFQUF9EVyAgID0gMzI7ICAvLyBBcHBsaWNhdGlvbiBEYXRhIFdpZHRoIAorcGFyYW1ldGVyICBBUFBfQlcgICA9IDQ7ICAgLy8gQXBwbGljYXRpb24gQnl0ZSBXaWR0aAorCitwYXJhbWV0ZXIgIFNEUl9EVyAgID0gMTY7ICAvLyBTRFIgRGF0YSBXaWR0aCAKK3BhcmFtZXRlciAgU0RSX0JXICAgPSAyOyAgIC8vIFNEUiBCeXRlIFdpZHRoCisgICAKK2lucHV0ICAgICAgICAgICAgICAgICAgICBjbGsgICAgICAgICAgICAgIDsKK2lucHV0ICAgICAgICAgICAgICAgICAgICByZXNldF9uICAgICAgICAgIDsKK2lucHV0IFsxOjBdICAgICAgICAgICAgICBzZHJfd2lkdGggICAgICAgIDsgLy8gMidiMDAgLSAzMiBCaXQgU0RSLCAyJ2IwMSAtIDE2IEJpdCBTRFIsIDInYjF4IC0gOCBCaXQKKworLyogQ29udHJvbCBTaWduYWwgZnJvbSB4ZnIgY3RybCBSZWFkIFRyYW5zYWN0aW9uKi8KK2lucHV0ICAgICAgICAgICAgICAgICAgICB4MmFfcmRzdGFydCAgICAgIDsgLy8gcmVhZCBzdGFydCBpbmRpY2F0aW9uCitpbnB1dCAgICAgICAgICAgICAgICAgICAgeDJhX3JkbGFzdCAgICAgICA7IC8vICByZWFkIGxhc3QgYnVyc3QgYWNjZXNzCitpbnB1dCBbU0RSX0RXLTE6MF0gICAgICAgeDJhX3JkZHQgICAgICAgICA7CitpbnB1dCAgICAgICAgICAgICAgICAgICAgeDJhX3Jkb2sgICAgICAgICA7CisKKy8qIENvbnRyb2wgU2lnbmFsIGZyb20geGZyIGN0cmwgV3JpdGUgVHJhbnNhY3Rpb24qLworaW5wdXQgICAgICAgICAgICAgICAgICAgIHgyYV93cnN0YXJ0ICAgICAgOyAvLyB3cml0IHN0YXJ0IGluZGljYXRpb24KK2lucHV0ICAgICAgICAgICAgICAgICAgICB4MmFfd3JsYXN0ICAgICAgIDsgLy8gd3JpdGUgbGFzdCB0cmFuc2ZlcgoraW5wdXQgICAgICAgICAgICAgICAgICAgIHgyYV93cm5leHQgICAgICAgOworb3V0cHV0IFtTRFJfRFctMTowXSAgICAgIGEyeF93cmR0ICAgICAgICAgOworb3V0cHV0IFtTRFJfQlctMTowXSAgICAgIGEyeF93cmVuX24gICAgICAgOworCisvLyBBcHBsaWNhdGlvbiBXcml0ZSBUcmFuc2FjdGlvbgoraW5wdXQgIFtBUFBfRFctMTowXSAgICAgIGFwcF93cl9kYXRhICAgICAgOworaW5wdXQgIFtBUFBfQlctMTowXSAgICAgIGFwcF93cl9lbl9uICAgICAgOworb3V0cHV0ICAgICAgICAgICAgICAgICAgIGFwcF93cl9uZXh0ICAgICAgOworb3V0cHV0ICAgICAgICAgICAgICAgICAgIGFwcF9sYXN0X3dyICAgICAgOyAvLyBJbmRpY2F0ZSBsYXN0IFdyaXRlIFRyYW5zZmVyIGZvciBhIGdpdmVuIGJ1cnN0IHNpemUKKworLy8gQXBwbGljYXRpb24gUmVhZCBUcmFuc2FjdGlvbgorb3V0cHV0IFtBUFBfRFctMTowXSAgICAgIGFwcF9yZF9kYXRhICAgICAgOworb3V0cHV0ICAgICAgICAgICAgICAgICAgIGFwcF9yZF92YWxpZCAgICAgOworb3V0cHV0ICAgICAgICAgICAgICAgICAgIGFwcF9sYXN0X3JkICAgICAgOyAvLyBJbmRpY2F0ZSBsYXN0IFJlYWQgVHJhbnNmZXIgZm9yIGEgZ2l2ZW4gYnVyc3Qgc2l6ZQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIERlY2xlcmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3JlZyBbQVBQX0RXLTE6MF0gICAgICAgICBhcHBfcmRfZGF0YSAgICAgIDsKK3JlZyAgICAgICAgICAgICAgICAgICAgICBhcHBfcmRfdmFsaWQgICAgIDsKK3JlZyBbU0RSX0RXLTE6MF0gICAgICAgICBhMnhfd3JkdCAgICAgICAgIDsKK3JlZyBbU0RSX0JXLTE6MF0gICAgICAgICBhMnhfd3Jlbl9uICAgICAgIDsKK3JlZyAgICAgICAgICAgICAgICAgICAgICBhcHBfd3JfbmV4dCAgICAgIDsKKworcmVnIFsyMzowXSAgICAgICAgICAgICAgIHNhdmVkX3JkX2RhdGEgICAgOworcmVnIFsxOjBdICAgICAgICAgICAgICAgIHJkX3hmcl9jb3VudCAgICAgOworcmVnIFsxOjBdICAgICAgICAgICAgICAgIHdyX3hmcl9jb3VudCAgICAgOworCisKK2Fzc2lnbiAgYXBwX2xhc3Rfd3IgPSB4MmFfd3JsYXN0OworYXNzaWduICBhcHBfbGFzdF9yZCA9IHgyYV9yZGxhc3Q7CisKK2Fsd2F5cyBAKCopIGJlZ2luCisgICAgICAgIGlmKHNkcl93aWR0aCA9PSAyJ2IwMCkgLy8gMzIgQml0IFNEUiBNb2RlCisgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGEyeF93cmR0ICAgICAgICAgICAgID0gYXBwX3dyX2RhdGE7CisgICAgICAgICAgICBhMnhfd3Jlbl9uICAgICAgICAgICA9IGFwcF93cl9lbl9uOworICAgICAgICAgICAgYXBwX3dyX25leHQgICAgICAgICAgPSB4MmFfd3JuZXh0OworICAgICAgICAgICAgYXBwX3JkX2RhdGEgICAgICAgICAgPSB4MmFfcmRkdDsKKyAgICAgICAgICAgIGFwcF9yZF92YWxpZCAgICAgICAgID0geDJhX3Jkb2s7CisgICAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYoc2RyX3dpZHRoID09IDInYjAxKSAvLyAxNiBCaXQgU0RSIE1vZGUKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgLy8gQ2hhbmdlZCB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIHRvIG1hdGNoIHRoZSAxNiBiaXQgU0RSIE1vZGUKKyAgICAgICAgICAgIGFwcF93cl9uZXh0ICAgICAgICAgID0gKHgyYV93cm5leHQgJiB3cl94ZnJfY291bnRbMF0pOworICAgICAgICAgICAgYXBwX3JkX3ZhbGlkICAgICAgICAgPSAoeDJhX3Jkb2sgJiByZF94ZnJfY291bnRbMF0pOworICAgICAgICAgICAgaWYod3JfeGZyX2NvdW50WzBdID09IDEnYjEpCisgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgYTJ4X3dyZW5fbiAgICAgID0gYXBwX3dyX2VuX25bMzoyXTsKKyAgICAgICAgICAgICAgICBhMnhfd3JkdCAgICAgICAgPSBhcHBfd3JfZGF0YVszMToxNl07CisgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGEyeF93cmVuX24gICAgICA9IGFwcF93cl9lbl9uWzE6MF07CisgICAgICAgICAgICAgICAgYTJ4X3dyZHQgICAgICAgID0gYXBwX3dyX2RhdGFbMTU6MF07CisgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBfcmRfZGF0YSA9IHt4MmFfcmRkdCxzYXZlZF9yZF9kYXRhWzE1OjBdfTsKKyAgICAgICAgZW5kIGVsc2UgIC8vIDggQml0IFNEUiBNb2RlCisgICAgICAgIGJlZ2luCisgICAgICAgICAgIC8vIENoYW5nZWQgdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCB0byBtYXRjaCB0aGUgMTYgYml0IFNEUiBNb2RlCisgICAgICAgICAgICBhcHBfd3JfbmV4dCAgICAgICAgID0gKHgyYV93cm5leHQgJiAod3JfeGZyX2NvdW50WzE6MF09PSAyJ2IxMSkpOworICAgICAgICAgICAgYXBwX3JkX3ZhbGlkICAgICAgICA9ICh4MmFfcmRvayAmICAgKHJkX3hmcl9jb3VudFsxOjBdPT0gMidiMTEpKTsKKyAgICAgICAgICAgIGlmKHdyX3hmcl9jb3VudFsxOjBdID09IDInYjExKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBhMnhfd3Jlbl9uICAgICAgPSBhcHBfd3JfZW5fblszXTsKKyAgICAgICAgICAgICAgICBhMnhfd3JkdCAgICAgICAgPSBhcHBfd3JfZGF0YVszMToyNF07CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgaWYod3JfeGZyX2NvdW50WzE6MF0gPT0gMidiMTApCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGEyeF93cmVuX24gICAgICA9IGFwcF93cl9lbl9uWzJdOworICAgICAgICAgICAgICAgIGEyeF93cmR0ICAgICAgICA9IGFwcF93cl9kYXRhWzIzOjE2XTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBpZih3cl94ZnJfY291bnRbMTowXSA9PSAyJ2IwMSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgYTJ4X3dyZW5fbiAgICAgID0gYXBwX3dyX2VuX25bMV07CisgICAgICAgICAgICAgICAgYTJ4X3dyZHQgICAgICAgID0gYXBwX3dyX2RhdGFbMTU6OF07CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICBhMnhfd3Jlbl9uICAgICAgPSBhcHBfd3JfZW5fblswXTsKKyAgICAgICAgICAgICAgICBhMnhfd3JkdCAgICAgICAgPSBhcHBfd3JfZGF0YVs3OjBdOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcF9yZF9kYXRhICAgICAgICAgPSB7eDJhX3JkZHQsc2F2ZWRfcmRfZGF0YVsyMzowXX07CisgICAgICAgICAgZW5kCisgICAgIGVuZAorCisKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisgIGJlZ2luCisgICAgaWYoIXJlc2V0X24pCisgICAgICBiZWdpbgorICAgICAgICByZF94ZnJfY291bnQgICAgPD0gOCdiMDsKKyAgICAgICAgd3JfeGZyX2NvdW50ICAgIDw9IDgnYjA7CisJc2F2ZWRfcmRfZGF0YSAgIDw9IDI0J2gwOworICAgICAgZW5kCisgICAgZWxzZSBiZWdpbgorCisJLy8gRHVyaW5nIFdyaXRlIFBoYXNlCisgICAgICAgIGlmKHgyYV93cmxhc3QpIGJlZ2luCisgICAgICAgICAgIHdyX3hmcl9jb3VudCAgICA8PSAwOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZih4MmFfd3JuZXh0KSBiZWdpbgorICAgICAgICAgICB3cl94ZnJfY291bnQgPD0gd3JfeGZyX2NvdW50ICsgMSdiMTsKKyAgICAgICAgZW5kCisKKwkvLyBEdXJpbmcgUmVhZCBQaGFzZQorICAgICAgICBpZih4MmFfcmRsYXN0KSBiZWdpbgorICAgICAgICAgICByZF94ZnJfY291bnQgICAgPD0gMDsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYoeDJhX3Jkb2spIGJlZ2luCisgICAgICAgICAgIHJkX3hmcl9jb3VudCAgIDw9IHJkX3hmcl9jb3VudCArIDEnYjE7CisJZW5kCisKKwkvLyBTYXZlIFByZXZpb3VzIERhdGEKKyAgICAgICAgaWYoeDJhX3Jkb2spIGJlZ2luCisJICAgaWYoc2RyX3dpZHRoID09IDInYjAxKSAvLyAxNiBCaXQgU0RSIE1vZGUKKwkgICAgICBzYXZlZF9yZF9kYXRhWzE1OjBdICA8PSB4MmFfcmRkdDsKKyAgICAgICAgICAgIGVsc2UgYmVnaW4vLyA4IGJpdCBTRFIgTW9kZSAtIAorCSAgICAgICBpZihyZF94ZnJfY291bnRbMTowXSA9PSAyJ2IwMCkgICAgICBzYXZlZF9yZF9kYXRhWzc6MF0gICA8PSB4MmFfcmRkdFs3OjBdOworCSAgICAgICBlbHNlIGlmKHJkX3hmcl9jb3VudFsxOjBdID09IDInYjAxKSBzYXZlZF9yZF9kYXRhWzE1OjhdICA8PSB4MmFfcmRkdFs3OjBdOworCSAgICAgICBlbHNlIGlmKHJkX3hmcl9jb3VudFsxOjBdID09IDInYjEwKSBzYXZlZF9yZF9kYXRhWzIzOjE2XSA8PSB4MmFfcmRkdFs3OjBdOworCSAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZW5kbW9kdWxlIC8vIHNkcl9ic19jb252ZXJ0CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfY29yZS52IGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2NvcmUudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOWVhY2RlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2NvcmUudgpAQCAtMCwwICsxLDQ3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgU0RSQU0gQ29udHJvbGxlciBDb3JlIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKKyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEZXNjcmlwdGlvbjogU0RSQU0gQ29udHJvbGxlciBDb3JlIE1vZHVsZQorICAgIDIgdHlwZXMgb2YgU0RSQU1zIGFyZSBzdXBwb3J0ZWQsIDFNeDE2IDIgYmFuaywgb3IgNE14MTYgNCBiYW5rLgorICAgIFRoaXMgYmxvY2sgaW50ZWdyYXRlIGZvbGxvd2luZyBzdWIgbW9kdWxlcworCisgICAgc2RyY19ic19jb252ZXJ0ICAgCisgICAgICAgIGNvbnZlcnQgdGhlIHN5c3RlbSBzaWRlIDMyIGJpdCBpbnRvIGVxdXZhaWxlbnQgOC8xNi8zMiBTRFIgZm9ybWF0CisgICAgc2RyY19yZXFfZ2VuICAgIAorICAgICAgICBUaGlzIG1vZHVsZSB0YWtlcyByZXF1ZXN0cyBmcm9tIHRoZSBhcHAsIGNob3BzIHRoZW0gdG8gYnVyc3QgYm9vdW5kYXJpZXMKKyAgICAgICAgaWYgd3JhcD0wLCBkZWNvZGVzIHRoZSBiYW5rIGFuZCBwYXNzZSB0aGUgcmVxdWVzdCB0byBiYW5rX2N0bAorICAgc2RyY194ZnJfY3RsCisgICAgICBUaGlzIG1vZHVsZSB0YWtlcyByZXF1ZXN0cyBmcm9tIHNkcl9iYW5rX2N0bCwgcnVucyB0aGUgdHJhbnNmZXIgYW5kCisgICAgICBjb250cm9scyBkYXRhIGZsb3cgdG8vZnJvbSB0aGUgYXBwLiBBdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciBpdCBpc3N1ZXMgYQorICAgICAgYnVyc3QgdGVybWluYXRlIGlmIG5vdCBhdCB0aGUgZW5kIG9mIGEgYnVyc3QgYW5kIGFub3RoZXIgY29tbWFuZCB0byB0aGlzCisgICAgICBiYW5rIGlzIG5vdCBhdmFpbGFibGUuCisKKyAgIHNkcmNfYmFua19jdGwKKyAgICAgIFRoaXMgbW9kdWxlIHRha2VzIHJlcXVlc3RzIGZyb20gc2RyX3JlcV9nZW4sIGNoZWNrcyBmb3IgcGFnZSBoaXQvbWlzcyBhbmQKKyAgICAgIGlzc3VlcyBwcmVjaGFyZ2UvYWN0aXZhdGUgY29tbWFuZHMgYW5kIHRoZW4gcGFzc2VzIHRoZSByZXF1ZXN0IHRvCisgICAgICBzZHJfeGZyX2N0bC4gCisKKworICBBc3N1bXB0aW9uOiBTRFJBTSBQYWRzIHNob3VsZCBiZSBwbGFjZWQgbmVhciB0byB0aGlzIG1vZHVsZS4gZWxzZQorICB1c2VyIHNob3VsZCBhZGQgYSBGRiBuZWFyIHRoZSBwYWRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgCisgIFZlcnNpb24gIDogMC4wIC0gOHRoIEphbiAyMDEyCisgICAgICAgICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uIHdpdGggMTYvMzIgQml0IFNEUkFNIFN1cHBvcnQKKyAgICAgICAgICAgOiAwLjEgLSAyNHRoIEphbiAyMDEyCisJICAgICAgICAgOCBCaXQgU0RSQU0gU3VwcG9ydCBpcyBhZGRlZAorICAgICAgICAgICAgIDAuMiAtIDJuZCBGZWIgMjAxMgorCSAgICAgICAgICAgSW1wcm92ZWQgdGhlIGNvbW1hbmQgcGlwZSBzdHJ1Y3R1cmUgdG8gYWNjZXB0IHVwLXRvIAorCQkgICA0IGNvbW1hbmQgb2YgZGlmZmVyZW50IGJhbmsuCisJICAgICAwLjMgLSA3dGggRmViIDIwMTIKKwkgICAgICAgICAgIEJ1ZyBmaXggZm9yIHBhcmFtZXRlciBkZWZpbmF0aW9uIGZvciByZXF1ZXN0IGxlbmd0aCBoYXMgY2hhbmdlZCBmcm9tIDkgdG8gMTIKKyAgICAgICAgICAgICAwLjQgLSAyNnRoIEFwcmlsIDIwMTMKKyAgICAgICAgICAgICAgICAgICBTRFJBTSBBZGRyZXNzIEJpdCBpcyBFeHRlbmRlZCBieSAxMiBiaXQgdG8gMTMgYml0IHRvIHN1cHBvcnQgaGlnaGVyIFNEUkFNCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCisgcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAorIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKK2xhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCisgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKKyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitgaW5jbHVkZSAic2RyY19kZWZpbmUudiIKK21vZHVsZSBzZHJjX2NvcmUgCisgICAgICAgICAgICgKKwkJY2xrLAorICAgICAgICAgICAgICAgIHBhZF9jbGssCisJCXJlc2V0X24sCisgICAgICAgICAgICAgICAgc2RyX3dpZHRoLAorCQljZmdfY29sYml0cywKKworCQkvKiBSZXF1ZXN0IGZyb20gYXBwICovCisJCWFwcF9yZXEsCSAgICAgICAgLy8gVHJhbnNmZXIgUmVxdWVzdAorCQlhcHBfcmVxX2FkZHIsCSAgICAgICAgLy8gU0RSQU0gQWRkcmVzcworCQlhcHBfcmVxX2xlbiwJICAgICAgICAvLyBCdXJzdCBMZW5ndGggKGluIDE2IGJpdCB3b3JkcykKKwkJYXBwX3JlcV93cmFwLAkgICAgICAgIC8vIFdyYXAgbW9kZSByZXF1ZXN0ICh4ZnJfbGVuID0gNCkKKwkJYXBwX3JlcV93cl9uLAkgICAgICAgIC8vIDAgPT4gV3JpdGUgcmVxdWVzdCwgMSA9PiByZWFkIHJlcQorCQlhcHBfcmVxX2FjaywJICAgICAgICAvLyBSZXF1ZXN0IGhhcyBiZWVuIGFjY2VwdGVkCisJCWNmZ19yZXFfZGVwdGgsCSAgICAgICAgLy9ob3cgbWFueSByZXEuIGJ1ZmZlciBzaG91bGQgaG9sZAorCQkKKwkJYXBwX3dyX2RhdGEsCisgICAgICAgICAgICAgICAgYXBwX3dyX2VuX24sCisJCWFwcF9sYXN0X3dyLAorCisJCWFwcF9yZF9kYXRhLAorCQlhcHBfcmRfdmFsaWQsCisJCWFwcF9sYXN0X3JkLAorCQlhcHBfd3JfbmV4dF9yZXEsCisJCXNkcl9pbml0X2RvbmUsCisJCWFwcF9yZXFfZG1hX2xhc3QsCisKKwkJLyogSW50ZXJmYWNlIHRvIFNEUkFNcyAqLworCQlzZHJfY3NfbiwKKwkJc2RyX2NrZSwKKwkJc2RyX3Jhc19uLAorCQlzZHJfY2FzX24sCisJCXNkcl93ZV9uLAorCQlzZHJfZHFtLAorCQlzZHJfYmEsCisJCXNkcl9hZGRyLCAKKwkJcGFkX3Nkcl9kaW4sCisJCXNkcl9kb3V0LAorCQlzZHJfZGVuX24sCisKKwkJLyogUGFyYW1ldGVycyAqLworCQljZmdfc2RyX2VuLAorCQljZmdfc2RyX21vZGVfcmVnLAorCQljZmdfc2RyX3RyYXNfZCwKKwkJY2ZnX3Nkcl90cnBfZCwKKwkJY2ZnX3Nkcl90cmNkX2QsCisJCWNmZ19zZHJfY2FzLAorCQljZmdfc2RyX3RyY2FyX2QsCisJCWNmZ19zZHJfdHdyX2QsCisJCWNmZ19zZHJfcmZzaCwKKwkJY2ZnX3Nkcl9yZm1heCk7CisgIAorcGFyYW1ldGVyICBBUFBfQVcgICA9IDI2OyAgLy8gQXBwbGljYXRpb24gQWRkcmVzcyBXaWR0aAorcGFyYW1ldGVyICBBUFBfRFcgICA9IDMyOyAgLy8gQXBwbGljYXRpb24gRGF0YSBXaWR0aCAKK3BhcmFtZXRlciAgQVBQX0JXICAgPSA0OyAgIC8vIEFwcGxpY2F0aW9uIEJ5dGUgV2lkdGgKK3BhcmFtZXRlciAgQVBQX1JXICAgPSA5OyAgIC8vIEFwcGxpY2F0aW9uIFJlcXVlc3QgV2lkdGgKKworcGFyYW1ldGVyICBTRFJfRFcgICA9IDE2OyAgLy8gU0RSIERhdGEgV2lkdGggCitwYXJhbWV0ZXIgIFNEUl9CVyAgID0gMjsgICAvLyBTRFIgQnl0ZSBXaWR0aAorICAgICAgICAgICAgIAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHbG9iYWwgVmFyaWFibGUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0ICAgICAgICAgICAgICAgICAgIGNsayAgICAgICAgICAgICAgICAgOyAvLyBTRFJBTSBDbG9jayAKK2lucHV0ICAgICAgICAgICAgICAgICAgIHBhZF9jbGsgICAgICAgICAgICAgOyAvLyBTRFJBTSBDbG9jayBmcm9tIFBhZCwgdXNlZCBmb3IgcmVnaXN0ZXJpbmcgUmVhZCBEYXRhCitpbnB1dCAgICAgICAgICAgICAgICAgICByZXNldF9uICAgICAgICAgICAgIDsgLy8gUmVzZXQgU2lnbmFsCitpbnB1dCBbMTowXSAgICAgICAgICAgICBzZHJfd2lkdGggICAgICAgICAgIDsgLy8gMidiMDAgLSAzMiBCaXQgU0RSLCAyJ2IwMSAtIDE2IEJpdCBTRFIsIDInYjF4IC0gOCBCaXQKK2lucHV0IFsxOjBdICAgICAgICAgICAgIGNmZ19jb2xiaXRzICAgICAgICAgOyAvLyAyJ2IwMCAtIDggQml0IGNvbHVtbiBhZGRyZXNzLCAyJ2IwMSAtIDkgQml0LCAxMCAtIDEwIGJpdCwgMTEgLSAxMUJpdHMKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVxdWVzdCBmcm9tIGFwcAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0IAkJCWFwcF9yZXEgICAgICAgICAgICAgOyAvLyBBcHBsaWNhdGlvbiBSZXF1ZXN0CitpbnB1dCBbQVBQX0FXLTE6MF0gCWFwcF9yZXFfYWRkciAgICAgICAgOyAvLyBBZGRyZXNzIAoraW5wdXQgCQkJYXBwX3JlcV93cl9uICAgICAgICA7IC8vIDAgLSBXcml0ZSwgMSAtIFJlYWQKK2lucHV0ICAgICAgICAgICAgICAgICAgIGFwcF9yZXFfd3JhcCAgICAgICAgOyAvLyBBZGRyZXNzIFdyYXAKK291dHB1dCAgICAgICAgICAgICAgICAgIGFwcF9yZXFfYWNrICAgICAgICAgOyAvLyBBcHBsaWNhdGlvbiBSZXF1ZXN0IEFjaworCQkKK2lucHV0IFtBUFBfRFctMTowXSAJYXBwX3dyX2RhdGEgICAgICAgICA7IC8vIFdyaXRlIERhdGEKK291dHB1dCAJCSAgICAgICAgYXBwX3dyX25leHRfcmVxICAgICA7IC8vIE5leHQgV3JpdGUgRGF0YSBSZXF1ZXN0CitpbnB1dCBbQVBQX0JXLTE6MF0gCWFwcF93cl9lbl9uICAgICAgICAgOyAvLyBCeXRlIHdpc2UgV3JpdGUgRW5hYmxlCitvdXRwdXQgICAgICAgICAgICAgICAgICBhcHBfbGFzdF93ciAgICAgICAgIDsgLy8gTGFzdCBXcml0ZSB0cmFubnNmZXIgb2YgYSBnaXZlbiBCdXJzdAorb3V0cHV0IFtBUFBfRFctMTowXSAJYXBwX3JkX2RhdGEgICAgICAgICA7IC8vIFJlYWQgRGF0YQorb3V0cHV0ICAgICAgICAgICAgICAgICAgYXBwX3JkX3ZhbGlkICAgICAgICA7IC8vIFJlYWQgVmFsaWQKK291dHB1dCAgICAgICAgICAgICAgICAgIGFwcF9sYXN0X3JkICAgICAgICAgOyAvLyBMYXN0IFJlYWQgVHJhbnNmZXIgb2YgYSBnaXZlbiBCdXJzdAorCQkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcmZhY2UgdG8gU0RSQU1zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0ICAgICAgICAgICAgICAgICAgc2RyX2NrZSAgICAgICAgICAgICA7IC8vIFNEUkFNIENLRQorb3V0cHV0IAkJCXNkcl9jc19uICAgICAgICAgICAgOyAvLyBTRFJBTSBDaGlwIFNlbGVjdAorb3V0cHV0ICAgICAgICAgICAgICAgICAgc2RyX3Jhc19uICAgICAgICAgICA7IC8vIFNEUkFNIHJhcworb3V0cHV0ICAgICAgICAgICAgICAgICAgc2RyX2Nhc19uICAgICAgICAgICA7IC8vIFNEUkFNIGNhcworb3V0cHV0CQkJc2RyX3dlX24gICAgICAgICAgICA7IC8vIFNEUkFNIHdyaXRlIGVuYWJsZQorb3V0cHV0IFtTRFJfQlctMTowXSAJc2RyX2RxbSAgICAgICAgICAgICA7IC8vIFNEUkFNIERhdGEgTWFzaworb3V0cHV0IFsxOjBdIAkJc2RyX2JhICAgICAgICAgICAgICA7IC8vIFNEUkFNIEJhbmsgRW5hYmxlCitvdXRwdXQgWzEyOjBdIAkJc2RyX2FkZHIgICAgICAgICAgICA7IC8vIFNEUkFNIEFkZHJlc3MKK2lucHV0IFtTRFJfRFctMTowXSAJcGFkX3Nkcl9kaW4gICAgICAgICA7IC8vIFNEUkEgRGF0YSBJbnB1dAorb3V0cHV0IFtTRFJfRFctMTowXSAJc2RyX2RvdXQgICAgICAgICAgICA7IC8vIFNEUkFNIERhdGEgT3V0cHV0CitvdXRwdXQgW1NEUl9CVy0xOjBdIAlzZHJfZGVuX24gICAgICAgICAgIDsgLy8gU0RSQU0gRGF0YSBPdXRwdXQgZW5hYmxlCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb25maWd1cmF0aW9uIFBhcmFtZXRlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291dHB1dCAgICAgICAgICAgICAgICAgIHNkcl9pbml0X2RvbmUgICAgICAgOyAvLyBJbmRpY2F0ZSBTRFJBTSBJbml0aWFsaXNhdGlvbiBEb25lCitpbnB1dCBbMzowXSAJCWNmZ19zZHJfdHJhc19kICAgICAgOyAvLyBBY3RpdmUgdG8gcHJlY2hhcmdlIGRlbGF5CitpbnB1dCBbMzowXSAgICAgICAgICAgICBjZmdfc2RyX3RycF9kICAgICAgIDsgLy8gUHJlY2hhcmdlIHRvIGFjdGl2ZSBkZWxheQoraW5wdXQgWzM6MF0gICAgICAgICAgICAgY2ZnX3Nkcl90cmNkX2QgICAgICA7IC8vIEFjdGl2ZSB0byBSL1cgZGVsYXkKK2lucHV0IAkJCWNmZ19zZHJfZW4gICAgICAgICAgOyAvLyBFbmFibGUgU0RSQU0gY29udHJvbGxlcgoraW5wdXQgWzE6MF0gCQljZmdfcmVxX2RlcHRoICAgICAgIDsgLy8gTWF4aW11bSBSZXF1ZXN0IGFjY2VwdGVkIGJ5IFNEUkFNIGNvbnRyb2xsZXIKK2lucHV0IFtBUFBfUlctMTowXQlhcHBfcmVxX2xlbiAgICAgICAgIDsgLy8gQXBwbGljYXRpb24gQnVyc3QgUmVxdWVzdCBsZW5ndGggaW4gMzIgYml0IAoraW5wdXQgWzEyOjBdIAkJY2ZnX3Nkcl9tb2RlX3JlZyAgICA7CitpbnB1dCBbMjowXSAJCWNmZ19zZHJfY2FzICAgICAgICAgOyAvLyBTRFJBTSBDQVMgTGF0ZW5jeQoraW5wdXQgWzM6MF0gCQljZmdfc2RyX3RyY2FyX2QgICAgIDsgLy8gQXV0by1yZWZyZXNoIHBlcmlvZAoraW5wdXQgWzM6MF0gICAgICAgICAgICAgY2ZnX3Nkcl90d3JfZCAgICAgICA7IC8vIFdyaXRlIHJlY292ZXJ5IGRlbGF5CitpbnB1dCBbYFNEUl9SRlNIX1RJTUVSX1ctMSA6IDBdIGNmZ19zZHJfcmZzaDsKK2lucHV0IFtgU0RSX1JGU0hfUk9XX0NOVF9XIC0xIDogMF0gY2ZnX3Nkcl9yZm1heDsKK2lucHV0ICAgICAgICAgICAgICAgICAgIGFwcF9yZXFfZG1hX2xhc3Q7ICAgIC8vIHRoaXMgc2lnbmFsIHNob3VsZCBjbG9zZSB0aGUgYmFuaworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIEludGVybmFsIE5ldHMKKyAgIAorLy8gU0RSX1JFUV9HRU4KK3dpcmUgW2BTRFJfUkVRX0lEX1ctMTowXXIyYl9yZXFfaWQ7Cit3aXJlIFsxOjBdIAkJcjJiX2JhOword2lyZSBbMTI6MF0gCQlyMmJfcmFkZHI7Cit3aXJlIFsxMjowXSAJCXIyYl9jYWRkcjsKK3dpcmUgW2BSRVFfQlctMTowXSAJcjJiX2xlbjsKKworLy8gU0RSIEJBTksgQ1RMCit3aXJlIFtgU0RSX1JFUV9JRF9XLTE6MF1iMnhfaWQ7Cit3aXJlIFsxOjBdIAkJYjJ4X2JhOword2lyZSBbMTI6MF0gCQliMnhfYWRkcjsKK3dpcmUgW2BSRVFfQlctMTowXSAJYjJ4X2xlbjsKK3dpcmUgWzE6MF0gCQliMnhfY21kOworCisvLyBTRFJfWEZSX0NUTAord2lyZSBbMzowXSAJCXgyYl9wcmVfb2s7Cit3aXJlIFtgU0RSX1JFUV9JRF9XLTE6MF14ZnJfaWQ7Cit3aXJlIFtBUFBfRFctMTowXSAJYXBwX3JkX2RhdGE7Cit3aXJlIAkJCXNkcl9jc19uLCBzZHJfY2tlLCBzZHJfcmFzX24sIHNkcl9jYXNfbiwgc2RyX3dlX247IAord2lyZSBbU0RSX0JXLTE6MF0gCXNkcl9kcW07Cit3aXJlIFsxOjBdIAkJc2RyX2JhOword2lyZSBbMTI6MF0gCQlzZHJfYWRkcjsKK3dpcmUgW1NEUl9EVy0xOjBdIAlzZHJfZG91dDsKK3dpcmUgW1NEUl9EVy0xOjBdIAlzZHJfZG91dF9pbnQ7Cit3aXJlIFtTRFJfQlctMTowXSAJc2RyX2Rlbl9uOword2lyZSBbU0RSX0JXLTE6MF0gCXNkcl9kZW5fbl9pbnQ7CisKK3dpcmUgWzE6MF0gCQl4ZnJfYmFua19zZWw7CisKK3dpcmUgW0FQUF9BVy0xOjBdICAgICAgICBhcHBfcmVxX2FkZHI7Cit3aXJlIFtBUFBfUlctMTowXSAgICAgICAgYXBwX3JlcV9sZW47CisKK3dpcmUgW0FQUF9EVy0xOjBdICAgICAgICBhcHBfd3JfZGF0YTsKK3dpcmUgW1NEUl9EVy0xOjBdICAgICAgICBhMnhfd3JkdCAgICAgICA7Cit3aXJlIFtBUFBfQlctMTowXSAgICAgICAgYXBwX3dyX2VuX247Cit3aXJlIFtTRFJfQlctMTowXSAgICAgICAgYTJ4X3dyZW5fbjsKKworLy93aXJlIFszMTowXSBhcHBfcmRfZGF0YTsKK3dpcmUgW1NEUl9EVy0xOjBdICAgICAgICB4MmFfcmRkdDsKKworCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmIAorICAgd2lyZSBbMzowXSAgICAgICAgICAgc2RyX2NtZDsKKyAgIGFzc2lnbiBzZHJfY21kID0ge3Nkcl9jc19uLCBzZHJfcmFzX24sIHNkcl9jYXNfbiwgc2RyX3dlX259OyAKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbiAKKworYXNzaWduIHNkcl9kZW5fbiA9IHNkcl9kZW5fbl9pbnQgOyAKK2Fzc2lnbiBzZHJfZG91dCAgPSBzZHJfZG91dF9pbnQgOworCisKKy8vIFRvIG1lZXQgdGhlIHRpbWluZyBhdCByZWFkIHBhdGgsIHJlYWQgZGF0YSBpcyByZWdpc3RlcmVkIHcuci50IHBhZF9zZHJhbV9jbG9jayBhbmQgcmVnaXN0ZXIgYmFjayB0byBzZHJhbV9jbGsKKy8vIGFzc3VtcHRpb24sIHBhZF9zZHJhbV9jbGsgaXMgc3luaHJvbm91cyBhbmQgZGVsYXllZCBjbG9jayBvZiBzZHJhbV9jbGsuCisvLyByZWdpc3RlciB3LnIudCBwYWQgc2RyYW0gY2xrCityZWcgW1NEUl9EVy0xOjBdIHBhZF9zZHJfZGluMTsKK3JlZyBbU0RSX0RXLTE6MF0gcGFkX3Nkcl9kaW4yOworYWx3YXlzQChwb3NlZGdlIHBhZF9jbGspIGJlZ2luCisgICBwYWRfc2RyX2RpbjEgPD0gcGFkX3Nkcl9kaW47CitlbmQKKworYWx3YXlzQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgIHBhZF9zZHJfZGluMiA8PSBwYWRfc2RyX2RpbjE7CitlbmQKKworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEluc3RhbnRpYXRlIHNkcl9yZXFfZ2VuCisgICAvLyBUaGlzIG1vZHVsZSB0YWtlcyByZXF1ZXN0cyBmcm9tIHRoZSBhcHAsIGNob3BzIHRoZW0gdG8gYnVyc3QgYm9vdW5kYXJpZXMKKyAgIC8vIGlmIHdyYXA9MCwgZGVjb2RlcyB0aGUgYmFuayBhbmQgcGFzc2UgdGhlIHJlcXVlc3QgdG8gYmFua19jdGwKKworc2RyY19yZXFfZ2VuICMoLlNEUl9EVyhTRFJfRFcpICwgLlNEUl9CVyhTRFJfQlcpKSB1X3JlcV9nZW4gKAorICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICApLAorICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICApLAorCSAgLmNmZ19jb2xiaXRzICAgICAgICAoY2ZnX2NvbGJpdHMgICAgICAgICksCisgICAgICAgICAgLnNkcl93aWR0aCAgICAgICAgICAoc2RyX3dpZHRoICAgICAgICAgICksCisKKwkvKiBSZXEgdG8geGZyX2N0bCAqLworICAgICAgICAgIC5yMnhfaWRsZSAgICAgICAgICAgKHIyeF9pZGxlICAgICAgICAgICApLAorCisJLyogUmVxdWVzdCBmcm9tIGFwcCAqLworICAgICAgICAgIC5yZXEgICAgICAgICAgICAgICAgKGFwcF9yZXEgICAgICAgICAgICApLAorICAgICAgICAgIC5yZXFfaWQgICAgICAgICAgICAgKDQnYjAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZXFfYWRkciAgICAgICAgICAgKGFwcF9yZXFfYWRkciAgICAgICApLAorICAgICAgICAgIC5yZXFfbGVuICAgICAgICAgICAgKGFwcF9yZXFfbGVuICAgICAgICApLAorICAgICAgICAgIC5yZXFfd3JhcCAgICAgICAgICAgKGFwcF9yZXFfd3JhcCAgICAgICApLAorICAgICAgICAgIC5yZXFfd3JfbiAgICAgICAgICAgKGFwcF9yZXFfd3JfbiAgICAgICApLAorICAgICAgICAgIC5yZXFfYWNrICAgICAgICAgICAgKGFwcF9yZXFfYWNrICAgICAgICApLAorCQkKKyAgICAgICAvKiBSZXEgdG8gYmFua19jdGwgKi8KKyAgICAgICAgICAucjJiX3JlcSAgICAgICAgICAgIChyMmJfcmVxICAgICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX3JlcV9pZCAgICAgICAgIChyMmJfcmVxX2lkICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX3N0YXJ0ICAgICAgICAgIChyMmJfc3RhcnQgICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX2xhc3QgICAgICAgICAgIChyMmJfbGFzdCAgICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX3dyYXAgICAgICAgICAgIChyMmJfd3JhcCAgICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX2JhICAgICAgICAgICAgIChyMmJfYmEgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX3JhZGRyICAgICAgICAgIChyMmJfcmFkZHIgICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX2NhZGRyICAgICAgICAgIChyMmJfY2FkZHIgICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX2xlbiAgICAgICAgICAgIChyMmJfbGVuICAgICAgICAgICAgKSwKKyAgICAgICAgICAucjJiX3dyaXRlICAgICAgICAgIChyMmJfd3JpdGUgICAgICAgICAgKSwKKyAgICAgICAgICAuYjJyX2FjayAgICAgICAgICAgIChiMnJfYWNrICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYjJyX2FyYl9vayAgICAgICAgIChiMnJfYXJiX29rICAgICAgICAgKQorICAgICApOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEluc3RhbnRpYXRlIHNkcl9iYW5rX2N0bAorICAgLy8gVGhpcyBtb2R1bGUgdGFrZXMgcmVxdWVzdHMgZnJvbSBzZHJfcmVxX2dlbiwgY2hlY2tzIGZvciBwYWdlIGhpdC9taXNzIGFuZAorICAgLy8gaXNzdWVzIHByZWNoYXJnZS9hY3RpdmF0ZSBjb21tYW5kcyBhbmQgdGhlbiBwYXNzZXMgdGhlIHJlcXVlc3QgdG8KKyAgIC8vIHNkcl94ZnJfY3RsLiAKKworc2RyY19iYW5rX2N0bCAjKC5TRFJfRFcoU0RSX0RXKSAsICAuU0RSX0JXKFNEUl9CVykpIHVfYmFua19jdGwgKAorICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICApLAorICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICApLAorICAgICAgICAgIC5hMmJfcmVxX2RlcHRoICAgICAgKGNmZ19yZXFfZGVwdGggICAgICApLAorCQkJICAgICAgCisgICAgICAvKiBSZXEgZnJvbSByZXFfZ2VuICovCisgICAgICAgICAgLnIyYl9yZXEgICAgICAgICAgICAocjJiX3JlcSAgICAgICAgICAgICksCisgICAgICAgICAgLnIyYl9yZXFfaWQgICAgICAgICAocjJiX3JlcV9pZCAgICAgICAgICksCisgICAgICAgICAgLnIyYl9zdGFydCAgICAgICAgICAocjJiX3N0YXJ0ICAgICAgICAgICksCisgICAgICAgICAgLnIyYl9sYXN0ICAgICAgICAgICAocjJiX2xhc3QgICAgICAgICAgICksCisgICAgICAgICAgLnIyYl93cmFwICAgICAgICAgICAocjJiX3dyYXAgICAgICAgICAgICksCisgICAgICAgICAgLnIyYl9iYSAgICAgICAgICAgICAocjJiX2JhICAgICAgICAgICAgICksCisgICAgICAgICAgLnIyYl9yYWRkciAgICAgICAgICAocjJiX3JhZGRyICAgICAgICAgICksCisgICAgICAgICAgLnIyYl9jYWRkciAgICAgICAgICAocjJiX2NhZGRyICAgICAgICAgICksCisgICAgICAgICAgLnIyYl9sZW4gICAgICAgICAgICAocjJiX2xlbiAgICAgICAgICAgICksCisgICAgICAgICAgLnIyYl93cml0ZSAgICAgICAgICAocjJiX3dyaXRlICAgICAgICAgICksCisgICAgICAgICAgLmIycl9hcmJfb2sgICAgICAgICAoYjJyX2FyYl9vayAgICAgICAgICksCisgICAgICAgICAgLmIycl9hY2sgICAgICAgICAgICAoYjJyX2FjayAgICAgICAgICAgICksCisJCQkgICAgICAKKyAgICAgIC8qIFRyYW5zZmVyIHJlcXVlc3QgdG8geGZyX2N0bCAqLworICAgICAgICAgIC5iMnhfaWRsZSAgICAgICAgICAgKGIyeF9pZGxlICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfcmVxICAgICAgICAgICAgKGIyeF9yZXEgICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfc3RhcnQgICAgICAgICAgKGIyeF9zdGFydCAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfbGFzdCAgICAgICAgICAgKGIyeF9sYXN0ICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfd3JhcCAgICAgICAgICAgKGIyeF93cmFwICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfaWQgICAgICAgICAgICAgKGIyeF9pZCAgICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfYmEgICAgICAgICAgICAgKGIyeF9iYSAgICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfYWRkciAgICAgICAgICAgKGIyeF9hZGRyICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfbGVuICAgICAgICAgICAgKGIyeF9sZW4gICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfY21kICAgICAgICAgICAgKGIyeF9jbWQgICAgICAgICAgICApLAorICAgICAgICAgIC54MmJfYWNrICAgICAgICAgICAgKHgyYl9hY2sgICAgICAgICAgICApLAorCQkgICAgIAorICAgICAgLyogU3RhdHVzIGZyb20geGZyX2N0bCAqLworICAgICAgICAgIC5iMnhfdHJhc19vayAgICAgICAgKGIyeF90cmFzX29rICAgICAgICApLAorICAgICAgICAgIC54MmJfcmVmcmVzaCAgICAgICAgKHgyYl9yZWZyZXNoICAgICAgICApLAorICAgICAgICAgIC54MmJfcHJlX29rICAgICAgICAgKHgyYl9wcmVfb2sgICAgICAgICApLAorICAgICAgICAgIC54MmJfYWN0X29rICAgICAgICAgKHgyYl9hY3Rfb2sgICAgICAgICApLAorICAgICAgICAgIC54MmJfcmRvayAgICAgICAgICAgKHgyYl9yZG9rICAgICAgICAgICApLAorICAgICAgICAgIC54MmJfd3JvayAgICAgICAgICAgKHgyYl93cm9rICAgICAgICAgICApLAorCisgICAgICAvKiBmb3IgZ2VuZXJhdGUgY3V1cmVudCB4ZnIgYWRkcmVzcyBtc2IgKi8KKyAgICAgICAgICAuc2RyX3JlcV9ub3JtX2RtYV9sYXN0KGFwcF9yZXFfZG1hX2xhc3QpLAorICAgICAgICAgIC54ZnJfYmFua19zZWwgICAgICAgKHhmcl9iYW5rX3NlbCAgICAgICApLAorCisgICAgICAgLyogU0RSQU0gVGltaW5nICovCisgICAgICAgICAgLnRyYXNfZGVsYXkgICAgICAgICAoY2ZnX3Nkcl90cmFzX2QgICAgICksCisgICAgICAgICAgLnRycF9kZWxheSAgICAgICAgICAoY2ZnX3Nkcl90cnBfZCAgICAgICksCisgICAgICAgICAgLnRyY2RfZGVsYXkgICAgICAgICAoY2ZnX3Nkcl90cmNkX2QgICAgICkKKyAgICAgICk7CisgICAKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgLy8gSW5zdGFudGlhdGUgc2RyX3hmcl9jdGwKKyAgIC8vIFRoaXMgbW9kdWxlIHRha2VzIHJlcXVlc3RzIGZyb20gc2RyX2JhbmtfY3RsLCBydW5zIHRoZSB0cmFuc2ZlciBhbmQKKyAgIC8vIGNvbnRyb2xzIGRhdGEgZmxvdyB0by9mcm9tIHRoZSBhcHAuIEF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyIGl0IGlzc3VlcyBhCisgICAvLyBidXJzdCB0ZXJtaW5hdGUgaWYgbm90IGF0IHRoZSBlbmQgb2YgYSBidXJzdCBhbmQgYW5vdGhlciBjb21tYW5kIHRvIHRoaXMKKyAgIC8vIGJhbmsgaXMgbm90IGF2YWlsYWJsZS4KKworc2RyY194ZnJfY3RsICMoLlNEUl9EVyhTRFJfRFcpICwgIC5TRFJfQlcoU0RSX0JXKSkgdV94ZnJfY3RsICgKKyAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgKSwKKyAgICAgICAgICAucmVzZXRfbiAgICAgICAgICAgIChyZXNldF9uICAgICAgICAgICAgKSwKKwkJCSAgICAKKyAgICAgIC8qIFRyYW5zZmVyIHJlcXVlc3QgZnJvbSBiYW5rX2N0bCAqLworICAgICAgICAgIC5yMnhfaWRsZSAgICAgICAgICAgKHIyeF9pZGxlICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfaWRsZSAgICAgICAgICAgKGIyeF9pZGxlICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfcmVxICAgICAgICAgICAgKGIyeF9yZXEgICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfc3RhcnQgICAgICAgICAgKGIyeF9zdGFydCAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfbGFzdCAgICAgICAgICAgKGIyeF9sYXN0ICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfd3JhcCAgICAgICAgICAgKGIyeF93cmFwICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfaWQgICAgICAgICAgICAgKGIyeF9pZCAgICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfYmEgICAgICAgICAgICAgKGIyeF9iYSAgICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfYWRkciAgICAgICAgICAgKGIyeF9hZGRyICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfbGVuICAgICAgICAgICAgKGIyeF9sZW4gICAgICAgICAgICApLAorICAgICAgICAgIC5iMnhfY21kICAgICAgICAgICAgKGIyeF9jbWQgICAgICAgICAgICApLAorICAgICAgICAgIC54MmJfYWNrICAgICAgICAgICAgKHgyYl9hY2sgICAgICAgICAgICApLAorCQkgICAgIAorICAgICAgIC8qIFN0YXR1cyB0byBiYW5rX2N0bCwgcmVxX2dlbiAqLworICAgICAgICAgIC5iMnhfdHJhc19vayAgICAgICAgKGIyeF90cmFzX29rICAgICAgICApLAorICAgICAgICAgIC54MmJfcmVmcmVzaCAgICAgICAgKHgyYl9yZWZyZXNoICAgICAgICApLAorICAgICAgICAgIC54MmJfcHJlX29rICAgICAgICAgKHgyYl9wcmVfb2sgICAgICAgICApLAorICAgICAgICAgIC54MmJfYWN0X29rICAgICAgICAgKHgyYl9hY3Rfb2sgICAgICAgICApLAorICAgICAgICAgIC54MmJfcmRvayAgICAgICAgICAgKHgyYl9yZG9rICAgICAgICAgICApLAorICAgICAgICAgIC54MmJfd3JvayAgICAgICAgICAgKHgyYl93cm9rICAgICAgICAgICApLAorCQkgICAgCisgICAgICAgLyogU0RSQU0gSS9PICovCisgICAgICAgICAgLnNkcl9jc19uICAgICAgICAgICAoc2RyX2NzX24gICAgICAgICAgICksCisgICAgICAgICAgLnNkcl9ja2UgICAgICAgICAgICAoc2RyX2NrZSAgICAgICAgICAgICksCisgICAgICAgICAgLnNkcl9yYXNfbiAgICAgICAgICAoc2RyX3Jhc19uICAgICAgICAgICksCisgICAgICAgICAgLnNkcl9jYXNfbiAgICAgICAgICAoc2RyX2Nhc19uICAgICAgICAgICksCisgICAgICAgICAgLnNkcl93ZV9uICAgICAgICAgICAoc2RyX3dlX24gICAgICAgICAgICksCisgICAgICAgICAgLnNkcl9kcW0gICAgICAgICAgICAoc2RyX2RxbSAgICAgICAgICAgICksCisgICAgICAgICAgLnNkcl9iYSAgICAgICAgICAgICAoc2RyX2JhICAgICAgICAgICAgICksCisgICAgICAgICAgLnNkcl9hZGRyICAgICAgICAgICAoc2RyX2FkZHIgICAgICAgICAgICksCisgICAgICAgICAgLnNkcl9kaW4gICAgICAgICAgICAocGFkX3Nkcl9kaW4yICAgICAgICksCisgICAgICAgICAgLnNkcl9kb3V0ICAgICAgICAgICAoc2RyX2RvdXRfaW50ICAgICAgICksCisgICAgICAgICAgLnNkcl9kZW5fbiAgICAgICAgICAoc2RyX2Rlbl9uX2ludCAgICAgICksCisgICAgICAvKiBEYXRhIEZsb3cgdG8gdGhlIGFwcCAqLworICAgICAgICAgIC54MmFfcmRzdGFydCAgICAgICAgKHgyYV9yZHN0YXJ0ICAgICAgICApLAorICAgICAgICAgIC54MmFfd3JzdGFydCAgICAgICAgKHgyYV93cnN0YXJ0ICAgICAgICApLAorICAgICAgICAgIC54MmFfaWQgICAgICAgICAgICAgKHhmcl9pZCAgICAgICAgICAgICApLAorICAgICAgICAgIC54MmFfcmRsYXN0ICAgICAgICAgKHgyYV9yZGxhc3QgICAgICAgICApLAorICAgICAgICAgIC54MmFfd3JsYXN0ICAgICAgICAgKHgyYV93cmxhc3QgICAgICAgICApLAorICAgICAgICAgIC5hMnhfd3JkdCAgICAgICAgICAgKGEyeF93cmR0ICAgICAgICAgICApLAorICAgICAgICAgIC5hMnhfd3Jlbl9uICAgICAgICAgKGEyeF93cmVuX24gICAgICAgICApLAorICAgICAgICAgIC54MmFfd3JuZXh0ICAgICAgICAgKHgyYV93cm5leHQgICAgICAgICApLAorICAgICAgICAgIC54MmFfcmRkdCAgICAgICAgICAgKHgyYV9yZGR0ICAgICAgICAgICApLAorICAgICAgICAgIC54MmFfcmRvayAgICAgICAgICAgKHgyYV9yZG9rICAgICAgICAgICApLAorICAgICAgICAgIC5zZHJfaW5pdF9kb25lICAgICAgKHNkcl9pbml0X2RvbmUgICAgICApLAorCQkJICAgIAorICAgICAgLyogU0RSQU0gUGFyYW1ldGVycyAqLworICAgICAgICAgIC5zZHJhbV9lbmFibGUgICAgICAgKGNmZ19zZHJfZW4gICAgICAgICApLAorICAgICAgICAgIC5zZHJhbV9tb2RlX3JlZyAgICAgKGNmZ19zZHJfbW9kZV9yZWcgICApLAorCQkgICAgCisgICAgICAvKiBjdXJyZW50IHhmciBiYW5rICovCisgICAgICAgICAgLnhmcl9iYW5rX3NlbCAgICAgICAoeGZyX2Jhbmtfc2VsICAgICAgICksCisKKyAgICAgIC8qIFNEUkFNIFRpbWluZyAqLworICAgICAgICAgIC5jYXNfbGF0ZW5jeSAgICAgICAgKGNmZ19zZHJfY2FzICAgICAgICApLAorICAgICAgICAgIC50cnBfZGVsYXkgICAgICAgICAgKGNmZ19zZHJfdHJwX2QgICAgICApLAorICAgICAgICAgIC50cmNhcl9kZWxheSAgICAgICAgKGNmZ19zZHJfdHJjYXJfZCAgICApLAorICAgICAgICAgIC50d3JfZGVsYXkgICAgICAgICAgKGNmZ19zZHJfdHdyX2QgICAgICApLAorICAgICAgICAgIC5yZnNoX3RpbWUgICAgICAgICAgKGNmZ19zZHJfcmZzaCAgICAgICApLAorICAgICAgICAgIC5yZnNoX3JtYXggICAgICAgICAgKGNmZ19zZHJfcmZtYXggICAgICApCisgICAgKTsKKyAgIAorICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAvLyBJbnN0YW50aWF0ZSBzZHJfYnNfY29udmVydAorICAgLy8gICAgVGhpcyBtb2RlbCBoYW5kbGUgdGhlIGJ1cyB3aXRoIHRyYW5zYWx0aW9uIGZyb20gYXBwbGljYXRpb24gbGF5ZXIgdG8KKyAgIC8vICAgICAgIDgvMTYvMzIgU0RSQU0gTWVtb3J5IGZvcm1hdAorICAgLy8gICAgIER1cmluZyBXcml0ZSBQaGFzZSwgdGhpcyBibG9jayBzcGxpdCB0aGUgZGF0YSBhcyBwZXIgU0RSQU0gV2lkdGgKKyAgIC8vICAgICBEdXJpbmcgUmVhZCBQaGFzZSwgVGhpcyBibG9jayBkb2VzIHRoZSByZS1wYWNraW5nIGJhc2VkIG9uIFNEUkFNCisgICAvLyAgICAgV2lkdGgKKyAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzZHJjX2JzX2NvbnZlcnQgIyguU0RSX0RXKFNEUl9EVykgLCAgLlNEUl9CVyhTRFJfQlcpKSB1X2JzX2NvbnZlcnQgKAorICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICApLAorICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICApLAorICAgICAgICAgIC5zZHJfd2lkdGggICAgICAgICAgKHNkcl93aWR0aCAgICAgICAgICApLAorCisgICAvKiBDb250cm9sIFNpZ25hbCBmcm9tIHhmciBjdHJsICovCisgICAgICAgICAgLy8gUmVhZCBJbnRlcmZhY2UgSW5wdXRzCisgICAgICAgICAgLngyYV9yZHN0YXJ0ICAgICAgICAoeDJhX3Jkc3RhcnQgICAgICAgICksCisgICAgICAgICAgLngyYV9yZGxhc3QgICAgICAgICAoeDJhX3JkbGFzdCAgICAgICAgICksCisgICAgICAgICAgLngyYV9yZG9rICAgICAgICAgICAoeDJhX3Jkb2sgICAgICAgICAgICksCisJICAvLyBSZWFkIEludGVyZmFjZSBvdXRwdXRzCisgICAgICAgICAgLngyYV9yZGR0ICAgICAgICAgICAoeDJhX3JkZHQgICAgICAgICAgICksCisKKyAgICAgICAgICAvLyBXcml0ZSBJbnRlcmZhY2UsIElucHV0cworICAgICAgICAgIC54MmFfd3JzdGFydCAgICAgICAgKHgyYV93cnN0YXJ0ICAgICAgICApLAorICAgICAgICAgIC54MmFfd3JsYXN0ICAgICAgICAgKHgyYV93cmxhc3QgICAgICAgICApLAorICAgICAgICAgIC54MmFfd3JuZXh0ICAgICAgICAgKHgyYV93cm5leHQgICAgICAgICApLAorCisgICAgICAgICAgLy8gV3JpdGUgSW50ZXJmYWNlLCBPdXRwdXRzCisgICAgICAgICAgLmEyeF93cmR0ICAgICAgICAgICAoYTJ4X3dyZHQgICAgICAgICAgICksCisgICAgICAgICAgLmEyeF93cmVuX24gICAgICAgICAoYTJ4X3dyZW5fbiAgICAgICAgICksCisKKyAgIC8qIENvbnRyb2wgU2lnbmFsIGZyb20gc2RyY19iYW5rX2N0bCAgKi8KKworICAgLyogIENvbnRyb2wgU2lnbmFsIGZyb20vdG8gdG8gYXBwbGljYXRpb24gaS9mICAqLworICAgICAgICAgIC5hcHBfd3JfZGF0YSAgICAgICAgKGFwcF93cl9kYXRhICAgICAgICApLAorICAgICAgICAgIC5hcHBfd3JfZW5fbiAgICAgICAgKGFwcF93cl9lbl9uICAgICAgICApLAorICAgICAgICAgIC5hcHBfd3JfbmV4dCAgICAgICAgKGFwcF93cl9uZXh0X3JlcSAgICApLAorCSAgLmFwcF9sYXN0X3dyICAgICAgICAoYXBwX2xhc3Rfd3IgICAgICAgICksCisgICAgICAgICAgLmFwcF9yZF9kYXRhICAgICAgICAoYXBwX3JkX2RhdGEgICAgICAgICksCisgICAgICAgICAgLmFwcF9yZF92YWxpZCAgICAgICAoYXBwX3JkX3ZhbGlkICAgICAgICksCisJICAuYXBwX2xhc3RfcmQgICAgICAgIChhcHBfbGFzdF9yZCAgICAgICAgKQorCisgICAgICAgKTsgICAKKyAgIAorZW5kbW9kdWxlIC8vIHNkcmNfY29yZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX3JlcV9nZW4udiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19yZXFfZ2VuLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWY3YjUwNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19yZXFfZ2VuLnYKQEAgLTAsMCArMSwzNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFNEUkFNIENvbnRyb2xsZXIgUmVxdWVzdCBHZW5lcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHNkcmFtIGNvbnRyb2xsZXIgcHJvamVjdCAgICAgICAgICAgCisgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9zZHJfY3RybC8gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRGVzY3JpcHRpb246IFNEUkFNIENvbnRyb2xsZXIgUmVndWVzdCBHZW5lcmF0aW9uCisKKyAgQWRkcmVzcyBHZW5lcmF0aW9uIEJhc2VkIG9uIGNmZ19jb2xiaXRzCisgICAgIGNmZ19jb2xiaXRzPSAyJ2IwMAorICAgICAgICAgICAgQWRkcmVzc1s3OjBdICAgIC0gQ29sdW1uIEFkZHJlc3MKKyAgICAgICAgICAgIEFkZHJlc3NbOTo4XSAgICAtIEJhbmsgQWRkcmVzcworICAgICAgICAgICAgQWRkcmVzc1syMjoxMF0gIC0gUm93IEFkZHJlc3MKKyAgICAgY2ZnX2NvbGJpdHM9IDInYjAxCisgICAgICAgICAgICBBZGRyZXNzWzg6MF0gICAgLSBDb2x1bW4gQWRkcmVzcworICAgICAgICAgICAgQWRkcmVzc1sxMDo5XSAgIC0gQmFuayBBZGRyZXNzCisgICAgICAgICAgICBBZGRyZXNzWzIzOjExXSAgLSBSb3cgQWRkcmVzcworICAgICBjZmdfY29sYml0cz0gMidiMTAKKyAgICAgICAgICAgIEFkZHJlc3NbOTowXSAgICAtIENvbHVtbiBBZGRyZXNzCisgICAgICAgICAgICBBZGRyZXNzWzExOjEwXSAgIC0gQmFuayBBZGRyZXNzCisgICAgICAgICAgICBBZGRyZXNzWzI0OjEyXSAgLSBSb3cgQWRkcmVzcworICAgICBjZmdfY29sYml0cz0gMidiMTEKKyAgICAgICAgICAgIEFkZHJlc3NbMTA6MF0gICAgLSBDb2x1bW4gQWRkcmVzcworICAgICAgICAgICAgQWRkcmVzc1sxMjoxMV0gICAtIEJhbmsgQWRkcmVzcworICAgICAgICAgICAgQWRkcmVzc1syNToxM10gIC0gUm93IEFkZHJlc3MKKworICBUaGUgU0RSQU1zIGFyZSBvcGVyYXRlZCBpbiA0IGJlYXQgYnVyc3QgbW9kZS4KKworICBJZiBXcmFwID0gMDsgCisgICAgICBJZiB0aGUgY3VycmVudCBidXJzdCBjcm9zcyB0aGUgcGFnZSBib3VuZGFyeSwgdGhlbiB0aGlzIGJsb2NrIHNwbGl0IHRoZSByZXF1ZXN0IAorICAgICAgaW50byB0d28gY29yZXNzcG9uZGluZyBjaGFuZ2UgaW4gYWRkcmVzcyBhbmQgcmVxdWVzdCBsZW5ndGgKKworICBpZiB0aGUgY3VycmVudCBidXJzdCBjcm9zcyB0aGUgcGFnZSBib3VuZGFyLgorICBUaGlzIG1vZHVsZSB0YWtlcyByZXF1ZXN0cyBmcm9tIHRoZSBtZW1vcnkgY29udHJvbGxlciwgCisgIGNob3BzIHRoZW0gdG8gcGFnZSBib3VuZGFyaWVzIGlmIHdyYXA9MCwgCisgIGFuZCBwYXNzZXMgdGhlIHJlcXVlc3QgdG8gYmFua19jdGwKKworICBOb3RlOiBXaXRoIFdyYXAgPSAwLCBlYWNoIHJlcXVlc3QgZnJvbSBBcHBsaWNhdGlvbiBsYXllciB3aWxsIGJlIHNwbGl0ZWQgaW50byB0d28gcmVxdWVzdCwgCisJaWYgdGhlIGN1cnJlbnQgYnVyc3QgY3Jvc3MgdGhlIHBhZ2UgYm91bmRhcnkuIAorCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAKKyAgVmVyc2lvbiAgOiAwLjAgLSA4dGggSmFuIDIwMTIKKyAgICAgICAgICAgICAwLjEgLSA1dGggRmViIDIwMTIsIGNvbHVtbi9yb3cvYmFuayBhZGRyZXNzIGFyZSByZWdpc3RlciB0byBpbXByb3ZlIHRoZSB0aW1pbmcgaXNzdWUgaW4gRlBHQSBzeW50aGVzaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCisgcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAorIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKK2xhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCisgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKKyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYGluY2x1ZGUgInNkcmNfZGVmaW5lLnYiCisKK21vZHVsZSBzZHJjX3JlcV9nZW4gKGNsaywKKwkJICAgIHJlc2V0X24sCisJCSAgICBjZmdfY29sYml0cywKKwkJICAgIHNkcl93aWR0aCwKKworCQkgICAgLyogUmVxdWVzdCBmcm9tIGFwcCAqLworCQkgICAgcmVxLAkgICAgICAgIC8vIFRyYW5zZmVyIFJlcXVlc3QKKwkJICAgIHJlcV9pZCwJICAgICAgICAvLyBJRCBmb3IgdGhpcyB0cmFuc2ZlcgorCQkgICAgcmVxX2FkZHIsCSAgICAgICAgLy8gU0RSQU0gQWRkcmVzcworCQkgICAgcmVxX2xlbiwJICAgICAgICAvLyBCdXJzdCBMZW5ndGggKGluIDMyIGJpdCB3b3JkcykKKwkJICAgIHJlcV93cmFwLAkgICAgICAgIC8vIFdyYXAgbW9kZSByZXF1ZXN0ICh4ZnJfbGVuID0gNCkKKwkJICAgIHJlcV93cl9uLAkgICAgICAgIC8vIDAgPT4gV3JpdGUgcmVxdWVzdCwgMSA9PiByZWFkIHJlcQorCQkgICAgcmVxX2FjaywJICAgICAgICAvLyBSZXF1ZXN0IGhhcyBiZWVuIGFjY2VwdGVkCisJCSAgICAKKwkJICAgIC8qIFJlcSB0byB4ZnJfY3RsICovCisJCSAgICByMnhfaWRsZSwKKworCQkgICAgLyogUmVxIHRvIGJhbmtfY3RsICovCisJCSAgICByMmJfcmVxLAkgICAgICAgIC8vIHJlcXVlc3QKKwkJICAgIHIyYl9yZXFfaWQsCSAgICAgICAgLy8gSUQKKwkJICAgIHIyYl9zdGFydCwJICAgICAgICAvLyBGaXJzdCBjaHVuayBvZiBidXJzdAorCQkgICAgcjJiX2xhc3QsCSAgICAgICAgLy8gTGFzdCBjaHVuayBvZiBidXJzdAorCQkgICAgcjJiX3dyYXAsCSAgICAgICAgLy8gV3JhcCBNb2RlCisJCSAgICByMmJfYmEsCSAgICAgICAgLy8gYmFuayBhZGRyZXNzCisJCSAgICByMmJfcmFkZHIsCSAgICAgICAgLy8gcm93IGFkZHJlc3MKKwkJICAgIHIyYl9jYWRkciwJICAgICAgICAvLyBjb2wgYWRkcmVzcworCQkgICAgcjJiX2xlbiwJICAgICAgICAvLyBsZW5ndGgKKwkJICAgIHIyYl93cml0ZSwJICAgICAgICAvLyB3cml0ZSByZXF1ZXN0CisJCSAgICBiMnJfYWNrLAorCQkgICAgYjJyX2FyYl9vaworCQkgICAgKTsKKworcGFyYW1ldGVyICBBUFBfQVcgICA9IDI2OyAgLy8gQXBwbGljYXRpb24gQWRkcmVzcyBXaWR0aAorcGFyYW1ldGVyICBBUFBfRFcgICA9IDMyOyAgLy8gQXBwbGljYXRpb24gRGF0YSBXaWR0aCAKK3BhcmFtZXRlciAgQVBQX0JXICAgPSA0OyAgIC8vIEFwcGxpY2F0aW9uIEJ5dGUgV2lkdGgKK3BhcmFtZXRlciAgQVBQX1JXICAgPSA5OyAgIC8vIEFwcGxpY2F0aW9uIFJlcXVlc3QgV2lkdGgKKworcGFyYW1ldGVyICBTRFJfRFcgICA9IDE2OyAgLy8gU0RSIERhdGEgV2lkdGggCitwYXJhbWV0ZXIgIFNEUl9CVyAgID0gMjsgICAvLyBTRFIgQnl0ZSBXaWR0aAorCisKK2lucHV0ICAgICAgICAgICAgICAgICAgIGNsayAgICAgICAgICAgOworaW5wdXQgICAgICAgICAgICAgICAgICAgcmVzZXRfbiAgICAgICA7CitpbnB1dCBbMTowXSAgICAgICAgICAgICBjZmdfY29sYml0cyAgIDsgLy8gMidiMDAgLSA4IEJpdCBjb2x1bW4gYWRkcmVzcywgMidiMDEgLSA5IEJpdCwgMTAgLSAxMCBiaXQsIDExIC0gMTFCaXRzCisKKy8qIFJlcXVlc3QgZnJvbSBhcHAgKi8KK2lucHV0IAkJCXJlcSAgICAgICAgICAgOyAvLyBSZXF1ZXN0IAoraW5wdXQgW2BTRFJfUkVRX0lEX1ctMTowXSByZXFfaWQgICAgICA7IC8vIFJlcXVlc3QgSUQKK2lucHV0IFtBUFBfQVctMTowXSAJcmVxX2FkZHIgICAgICA7IC8vIFJlcXVlc3QgQWRkcmVzcworaW5wdXQgW0FQUF9SVy0xOjBdIAlyZXFfbGVuICAgICAgIDsgLy8gUmVxdWVzdCBsZW5ndGgKK2lucHV0IAkJCXJlcV93cl9uICAgICAgOyAvLyAwIC1Xcml0ZSwgMSAtIFJlYWQKK2lucHV0ICAgICAgICAgICAgICAgICAgIHJlcV93cmFwICAgICAgOyAvLyAxIC0gV3JhcCB0aGUgQWRkcmVzcyBvbiBwYWdlIGJvdW5kYXJ5CitvdXRwdXQgCQkJcmVxX2FjayAgICAgICA7IC8vIFJlcXVlc3QgQWNrCisJCQorLyogUmVxIHRvIGJhbmtfY3RsICovCitvdXRwdXQgCQkJcjJ4X2lkbGUgICAgICA7IAorb3V0cHV0ICAgICAgICAgICAgICAgICAgcjJiX3JlcSAgICAgICA7IC8vIFJlcXVlc3QKK291dHB1dCAgICAgICAgICAgICAgICAgIHIyYl9zdGFydCAgICAgOyAvLyBGaXJzdCBKdW5rIG9mIHRoZSBCdXJzdCBBY2Nlc3MKK291dHB1dCAgICAgICAgICAgICAgICAgIHIyYl9sYXN0ICAgICAgOyAvLyBMYXN0IEp1bmsgb2YgdGhlIEJ1cnN0IEFjY2Vzcworb3V0cHV0ICAgICAgICAgICAgICAgICAgcjJiX3dyaXRlICAgICA7IC8vIDEgLSBXcml0ZSwgMCAtIFJlYWQKK291dHB1dCAgICAgICAgICAgICAgICAgIHIyYl93cmFwICAgICAgOyAvLyAxIC0gV3JhcCB0aGUgQWRkcmVzcyBhdCB0aGUgcGFnZSBib3VuZGFyeS4KK291dHB1dCBbYFNEUl9SRVFfSURfVy0xOjBdIAlyMmJfcmVxX2lkOworb3V0cHV0IFsxOjBdIAkJcjJiX2JhICAgICAgICA7IC8vIEJhbmsgQWRkcmVzcworb3V0cHV0IFsxMjowXSAJCXIyYl9yYWRkciAgICAgOyAvLyBSb3cgQWRkcmVzcworb3V0cHV0IFsxMjowXSAJCXIyYl9jYWRkciAgICAgOyAvLyBDb2x1bW4gQWRkcmVzcworb3V0cHV0IFtgUkVRX0JXLTE6MF0gCXIyYl9sZW4gICAgICAgOyAvLyBCdXJzdCBMZW5ndGgKK2lucHV0IAkJCWIycl9hY2sgICAgICAgOyAvLyBSZXF1ZXN0IEFjaworaW5wdXQgICAgICAgICAgICAgICAgICAgYjJyX2FyYl9vayAgICA7IC8vIEJhbmsgY29udHJvbGxlciBmaWZvIGlzIG5vdCBmdWxsIGFuZCByZWFkeSB0byBhY2NlcHQgdGhlIGNvbW1hbmQKKy8vCitpbnB1dCBbMTowXSAJICAgICAgICBzZHJfd2lkdGg7IC8vIDInYjAwIC0gMzIgQml0LCAyJ2IwMSAtIDE2IEJpdCwgMidiMXggLSA4Qml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEludGVybmFsIE5ldHMKKworICAgYGRlZmluZSBSRVFfSURMRSAgICAgICAgMidiMDAKKyAgIGBkZWZpbmUgUkVRX0FDVElWRSAgICAgIDInYjAxCisgICBgZGVmaW5lIFJFUV9QQUdFX1dSQVAgICAyJ2IxMAorCisgICByZWcgIFsxOjBdCQlyZXFfc3QsIG5leHRfcmVxX3N0OworICAgcmVnIAkJCXIyeF9pZGxlLCByZXFfYWNrLCByMmJfcmVxLCByMmJfc3RhcnQsIAorCQkJcjJiX3dyaXRlLCByZXFfaWRsZSwgcmVxX2xkLCBsY2xfd3JhcDsKKyAgIHJlZyBbYFNEUl9SRVFfSURfVy0xOjBdIAlyMmJfcmVxX2lkOworICAgcmVnIFtgUkVRX0JXLTE6MF0gCWxjbF9yZXFfbGVuOworCisgICB3aXJlIAkJcjJiX2xhc3QsIHBhZ2Vfb3ZmbHc7CisgICByZWcgcGFnZV9vdmZsd19yOworICAgd2lyZSBbYFJFUV9CVy0xOjBdIAlyMmJfbGVuLCBuZXh0X3JlcV9sZW47CisgICB3aXJlIFsxMjowXSAJICAgICAgICBtYXhfcjJiX2xlbjsKKyAgIHJlZyAgWzEyOjBdIAkgICAgICAgIG1heF9yMmJfbGVuX3I7CisKKyAgIHJlZyBbMTowXSAJCXIyYl9iYTsKKyAgIHJlZyBbMTI6MF0gCQlyMmJfcmFkZHI7CisgICByZWcgWzEyOjBdIAkJcjJiX2NhZGRyOworCisgICByZWcgW0FQUF9BVy0xOjBdIAljdXJyX3Nkcl9hZGRyIDsKKyAgIHdpcmUgW0FQUF9BVy0xOjBdIAluZXh0X3Nkcl9hZGRyIDsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHZW5lcmF0ZSB0aGUgaW50ZXJuYWwgQWRyZXNzIGFuZCBCdXJzdCBsZW5ndGggQmFzZWQgb24gc2RyYW0gd2lkdGgKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbQVBQX0FXOjBdICAgICAgICAgICByZXFfYWRkcl9pbnQ7CityZWcgW0FQUF9SVy0xOjBdICAgICAgICAgcmVxX2xlbl9pbnQ7CisKK2Fsd2F5cyBAKCopIGJlZ2luCisgICBpZihzZHJfd2lkdGggPT0gMidiMDApIGJlZ2luIC8vIDMyIEJpdCBTRFIgTW9kZQorICAgICAgcmVxX2FkZHJfaW50ICAgICA9IHsxJ2IwLHJlcV9hZGRyfTsKKyAgICAgIHJlcV9sZW5faW50ICAgICAgPSByZXFfbGVuOworICAgZW5kIGVsc2UgaWYoc2RyX3dpZHRoID09IDInYjAxKSBiZWdpbiAvLyAxNiBCaXQgU0RSIE1vZGUKKyAgICAgIC8vIENoYW5nZWQgdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCB0byBtYXRjaCB0aGUgMTYgYml0IFNEUiBNb2RlCisgICAgICByZXFfYWRkcl9pbnQgICAgID0ge3JlcV9hZGRyLDEnYjB9OworICAgICAgcmVxX2xlbl9pbnQgICAgICA9IHtyZXFfbGVuLDEnYjB9OworICAgZW5kIGVsc2UgIGJlZ2luIC8vIDggQml0IFNEUiBNb2RlCisgICAgICAvLyBDaGFuZ2VkIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggdG8gbWF0Y2ggdGhlIDE2IGJpdCBTRFIgTW9kZQorICAgICAgcmVxX2FkZHJfaW50ICAgID0ge3JlcV9hZGRyLDInYjB9OworICAgICAgcmVxX2xlbl9pbnQgICAgID0ge3JlcV9sZW4sMidiMH07CisgICBlbmQKK2VuZAorCisgICAvLworICAgLy8gSWRlbnRpZnkgdGhlIHBhZ2Ugb3ZlciBmbG93LgorICAgLy8gRmluZCB0aGUgTWF4aW11bSBCdXJzdCBsZW5ndGggYWxsb3dlZCBmcm9tIHRoZSBzZWxlY3RlZCBjb2x1bW4KKyAgIC8vIGFkZHJlc3MsIElmIHRoZSByZXF1ZXN0ZWQgYnVyc3QgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgYWxsb3dlZCBNYXhpbXVtCisgICAvLyBidXJzdCBsZW5ndGgsIHRoZW4gd2UgbmVlZCB0byBoYW5kbGUgdGhlIGJhbmsgY3Jvc3Mgb3ZlciBjYXNlIGFuZCB3ZQorICAgLy8gbmVlZCB0byBzcGxpdCB0aGUgcmV1ZXN0LgorICAgLy8KKyAgIGFzc2lnbiBtYXhfcjJiX2xlbiA9IChjZmdfY29sYml0cyA9PSAyJ2IwMCkgPyAoMTInaDEwMCAtIHs0J2IwLCByZXFfYWRkcl9pbnRbNzowXX0pIDoKKwkgICAgICAgICAgICAgICAgKGNmZ19jb2xiaXRzID09IDInYjAxKSA/ICgxMidoMjAwIC0gezMnYjAsIHJlcV9hZGRyX2ludFs4OjBdfSkgOgorCQkJKGNmZ19jb2xiaXRzID09IDInYjEwKSA/ICgxMidoNDAwIC0gezInYjAsIHJlcV9hZGRyX2ludFs5OjBdfSkgOiAoMTInaDgwMCAtIHsxJ2IwLCByZXFfYWRkcl9pbnRbMTA6MF19KTsKKworCisgICAgIC8vIElmIHRoZSB3cmFwID0gMCBhbmQgY3VycmVudCBhcHBsaWNhdGlvbiBidXJzdCBsZW5ndGggaXMgY3Jvc3NpbmcgdGhlIHBhZ2UgYm91bmRhcnksIAorICAgICAvLyB0aGVuIHJlcXVlc3Qgd2lsbCBiZSBzcGxpdCBpbnRvIHR3byB3aXRoIGNvcnJlc3BvbmRpbmcgY2hhbmdlIGluIHJlcXVlc3QgYWRkcmVzcyBhbmQgcmVxdWVzdCBsZW5ndGguCisgICAgIC8vCisgICAgIC8vIElmIHRoZSB3cmFwID0gMCBhbmQgY3VycmVudCBidXJzdCBsZW5ndGggaXMgbm90IGNyb3NzaW5nIHRoZSBwYWdlIGJvdW5kYXJ5LCAKKyAgICAgLy8gdGhlbiByZXF1ZXN0IGZyb20gYXBwbGljYXRpb24gbGF5ZXIgd2lsbCBiZSB0cmFuc3BhcmVudGx5IHBhc3NlZCBvbiB0aGUgYmFuayBjb250cm9sIGJsb2NrLgorCisgICAgIC8vCisgICAgIC8vIGlmIHRoZSB3cmFwID0gMSwgdGhlbiB0aGlzIGJsb2NrIHdpbGwgbm90IG1vZGlmeSB0aGUgcmVxdWVzdCBhZGRyZXNzIGFuZCBsZW5ndGguIAorICAgICAvLyBUaGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGhhbmRsZSBieSB0aGUgYmFuayBjb250cm9sIG1vZHVsZSBhbmQgCisgICAgIC8vIGNvbHVtbiBhZGRyZXNzIHdpbGwgcmV3aW5kIGJhY2sgYXMgZm9sbG93cyBYWCAtPiBGRiA/IDAwID8gMQorICAgICAvLworICAgICAvLyBOb3RlOiBXaXRoIFdyYXAgPSAwLCBlYWNoIHJlcXVlc3QgZnJvbSBBcHBsaWNhdGlvbiBsYXllciB3aWxsIGJlIHNwaWxpdGVkIGludG8gdHdvIHJlcXVlc3QsIAorICAgICAvLwlpZiB0aGUgY3VycmVudCBidXJzdCBjcm9zcyB0aGUgcGFnZSBib3VuZGFyeS4gCisgICBhc3NpZ24gcGFnZV9vdmZsdyA9ICh7MSdiMCwgcmVxX2xlbl9pbnR9ID4gbWF4X3IyYl9sZW4pID8gfnIyYl93cmFwIDogMSdiMDsKKworICAgYXNzaWduIHIyYl9sZW4gPSByMmJfc3RhcnQgPyAoKHBhZ2Vfb3ZmbHdfcikgPyBtYXhfcjJiX2xlbl9yIDogbGNsX3JlcV9sZW4pIDoKKyAgICAgICAgICAgICAgICAgICAgICBsY2xfcmVxX2xlbjsKKworICAgYXNzaWduIG5leHRfcmVxX2xlbiA9IGxjbF9yZXFfbGVuIC0gcjJiX2xlbjsKKworICAgYXNzaWduIG5leHRfc2RyX2FkZHIgPSBjdXJyX3Nkcl9hZGRyICsgcjJiX2xlbjsKKworCisgICBhc3NpZ24gcjJiX3dyYXAgPSBsY2xfd3JhcDsKKworICAgYXNzaWduIHIyYl9sYXN0ID0gKHIyYl9zdGFydCAmICFwYWdlX292Zmx3X3IpIHwgKHJlcV9zdCA9PSBgUkVRX1BBR0VfV1JBUCk7CisvLworLy8KKy8vCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGspIGJlZ2luCisKKyAgICAgIHBhZ2Vfb3ZmbHdfciAgIDw9IChyZXFfYWNrKSA/IHBhZ2Vfb3ZmbHc6ICdoMDsKKworICAgICAgbWF4X3IyYl9sZW5fciAgPD0gKHJlcV9hY2spID8gbWF4X3IyYl9sZW46ICdoMDsKKyAgICAgIHIyYl9zdGFydCAgICAgIDw9IChyZXFfYWNrKSA/IDEnYjEgOgorCQkgICAgICAgIChiMnJfYWNrKSA/IDEnYjAgOiByMmJfc3RhcnQ7CisKKyAgICAgIHIyYl93cml0ZSAgICAgIDw9IChyZXFfYWNrKSA/IH5yZXFfd3JfbiA6IHIyYl93cml0ZTsKKworICAgICAgcjJiX3JlcV9pZCAgICAgPD0gKHJlcV9hY2spID8gcmVxX2lkIDogcjJiX3JlcV9pZDsKKworICAgICAgbGNsX3dyYXAgICAgICAgPD0gKHJlcV9hY2spID8gcmVxX3dyYXAgOiBsY2xfd3JhcDsKKwkgICAgIAorICAgICAgbGNsX3JlcV9sZW4gICAgPD0gKHJlcV9hY2spID8gcmVxX2xlbl9pbnQgIDoKKwkJICAgICAgICAocmVxX2xkKSA/IG5leHRfcmVxX2xlbiA6IGxjbF9yZXFfbGVuOworCisgICAgICBjdXJyX3Nkcl9hZGRyICA8PSAocmVxX2FjaykgPyByZXFfYWRkcl9pbnQgOgorCQkgICAgICAgIChyZXFfbGQpID8gbmV4dF9zZHJfYWRkciA6IGN1cnJfc2RyX2FkZHI7CisKKyAgIGVuZCAvLyBhbHdheXMgQCAocG9zZWRnZSBjbGspCisgICAKKyAgIGFsd2F5cyBAICgqKSBiZWdpbgorICAgICAgcjJ4X2lkbGUgICAgPSAxJ2IwOworICAgICAgcmVxX2lkbGUgICAgPSAxJ2IwOworICAgICAgcmVxX2FjayAgICAgPSAxJ2IwOworICAgICAgcmVxX2xkICAgICAgPSAxJ2IwOworICAgICAgcjJiX3JlcSAgICAgPSAxJ2IwOworICAgICAgbmV4dF9yZXFfc3QgPSBgUkVRX0lETEU7CisKKyAgICAgIGNhc2UgKHJlcV9zdCkgICAgICAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCisJYFJFUV9JRExFIDogYmVnaW4KKwkgICByMnhfaWRsZSA9IH5yZXE7CisJICAgcmVxX2lkbGUgPSAxJ2IxOworCSAgIHJlcV9hY2sgPSByZXEgJiBiMnJfYXJiX29rOworCSAgIHJlcV9sZCA9IDEnYjA7CisJICAgcjJiX3JlcSA9IDEnYjA7CisJICAgbmV4dF9yZXFfc3QgPSAocmVxICYgYjJyX2FyYl9vaykgPyBgUkVRX0FDVElWRSA6IGBSRVFfSURMRTsKKwllbmQgLy8gY2FzZTogYFJFUV9JRExFCisKKwlgUkVRX0FDVElWRSA6IGJlZ2luCisJICAgcjJ4X2lkbGUgPSAxJ2IwOworCSAgIHJlcV9pZGxlID0gMSdiMDsKKwkgICByZXFfYWNrID0gMSdiMDsKKwkgICByZXFfbGQgPSBiMnJfYWNrOworCSAgIHIyYl9yZXEgPSAxJ2IxOyAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxX2dlbiB0byBiYW5rX3JlcQorCSAgIG5leHRfcmVxX3N0ID0gKGIycl9hY2sgKSA/ICgocGFnZV9vdmZsd19yKSA/IGBSRVFfUEFHRV9XUkFQIDpgUkVRX0lETEUpIDogYFJFUV9BQ1RJVkU7CisJZW5kIC8vIGNhc2U6IGBSRVFfQUNUSVZFCisJYFJFUV9QQUdFX1dSQVAgOiBiZWdpbgorCSAgIHIyeF9pZGxlID0gMSdiMDsKKwkgICByZXFfaWRsZSA9IDEnYjA7CisJICAgcmVxX2FjayAgPSAxJ2IwOworCSAgIHJlcV9sZCA9IGIycl9hY2s7CisJICAgcjJiX3JlcSA9IDEnYjE7ICAgICAgICAgICAgICAgICAgICAgICAvLyByZXFfZ2VuIHRvIGJhbmtfcmVxCisJICAgbmV4dF9yZXFfc3QgPSAoYjJyX2FjaykgPyBgUkVRX0lETEUgOiBgUkVRX1BBR0VfV1JBUDsKKwllbmQgLy8gY2FzZTogYFJFUV9BQ1RJVkUKKworICAgICAgZW5kY2FzZSAvLyBjYXNlKHJlcV9zdCkKKworICAgZW5kIC8vIGFsd2F5cyBAIChyZXFfc3Qgb3IgLi4uLikKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKQorICAgICAgaWYgKH5yZXNldF9uKSBiZWdpbgorCSByZXFfc3QgPD0gYFJFUV9JRExFOworICAgICAgZW5kIC8vIGlmICh+cmVzZXRfbikKKyAgICAgIGVsc2UgYmVnaW4KKwkgcmVxX3N0IDw9IG5leHRfcmVxX3N0OworICAgICAgZW5kIC8vIGVsc2U6ICFpZih+cmVzZXRfbikKKy8vCisvLyBhZGRycyBiaXRzIGZvciB0aGUgYmFuaywgcm93IGFuZCBjb2x1bW4KKy8vCisvLyBSZWdpc3RlciByb3cvY29sdW1uL2JhbmsgdG8gaW1wcm92ZSBmcGdhIHRpbWluZyBpc3N1ZQord2lyZSBbQVBQX0FXLTE6MF0gCW1hcF9hZGRyZXNzIDsKKworYXNzaWduICAgICAgbWFwX2FkZHJlc3MgID0gKHJlcV9hY2spID8gcmVxX2FkZHJfaW50IDoKKwkJICAgICAgICAgICAocmVxX2xkKSAgPyBuZXh0X3Nkcl9hZGRyIDogY3Vycl9zZHJfYWRkcjsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKSBiZWdpbgorLy8gQmFuayBCaXRzIGFyZSBhbHdheXMgLSAyIEJpdHMKKyAgICByMmJfYmEgPD0gKGNmZ19jb2xiaXRzID09IDInYjAwKSA/IHttYXBfYWRkcmVzc1s5OjhdfSAgIDoKKwkgICAgICAoY2ZnX2NvbGJpdHMgPT0gMidiMDEpID8ge21hcF9hZGRyZXNzWzEwOjldfSAgOgorCSAgICAgIChjZmdfY29sYml0cyA9PSAyJ2IxMCkgPyB7bWFwX2FkZHJlc3NbMTE6MTBdfSA6IG1hcF9hZGRyZXNzWzEyOjExXTsKKworLyoqKioqKioqKioqKioqKioqKioqCisqICBDb2xiaXRzIE1hcHBpbmc6CisqICAgICAgICAgICAyJ2IwMCAtIDggQml0CisqICAgICAgICAgICAyJ2IwMSAtIDE2IEJpdAorKiAgICAgICAgICAgMidiMTAgLSAxMCBCaXQKKyogICAgICAgICAgIDInYjExIC0gMTEgQml0cworKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIHIyYl9jYWRkciA8PSAoY2ZnX2NvbGJpdHMgPT0gMidiMDApID8gezUnYjAsIG1hcF9hZGRyZXNzWzc6MF19IDoKKwkgICAgICAgICAoY2ZnX2NvbGJpdHMgPT0gMidiMDEpID8gezQnYjAsIG1hcF9hZGRyZXNzWzg6MF19IDoKKwkgICAgICAgICAoY2ZnX2NvbGJpdHMgPT0gMidiMTApID8gezMnYjAsIG1hcF9hZGRyZXNzWzk6MF19IDogezInYjAsIG1hcF9hZGRyZXNzWzEwOjBdfTsKKworICAgIHIyYl9yYWRkciA8PSAoY2ZnX2NvbGJpdHMgPT0gMidiMDApICA/IG1hcF9hZGRyZXNzWzIyOjEwXSA6CisJICAgICAgICAgKGNmZ19jb2xiaXRzID09IDInYjAxKSAgPyBtYXBfYWRkcmVzc1syMzoxMV0gOgorCSAgICAgICAgIChjZmdfY29sYml0cyA9PSAyJ2IxMCkgID8gbWFwX2FkZHJlc3NbMjQ6MTJdIDogbWFwX2FkZHJlc3NbMjU6MTNdOworZW5kCSAgIAorICAgCitlbmRtb2R1bGUgLy8gc2RyX3JlcV9nZW4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY194ZnJfY3RsLnYgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfeGZyX2N0bC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkODdkMjYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfeGZyX2N0bC52CkBAIC0wLDAgKzEsNzcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBTRFJBTSBDb250cm9sbGVyIFRyYW5zZmVyIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAorICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvc2RyX2N0cmwvICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIERlc2NyaXB0aW9uOiBTRFJBTSBDb250cm9sbGVyIFRyYW5zZmVyIGNvbnRyb2wKKworICBUaGlzIG1vZHVsZSB0YWtlcyByZXF1ZXN0cyBmcm9tIHNkcmNfYmFua19jdGwgYW5kIHJ1bnMgdGhlCisgIHRyYW5zZmVyLiBUaGUgaW5wdXQgcmVxdWVzdCBpcyBndWFyYW50ZWVkIHRvIGJlIGluIGEgYmFuayB0aGF0IGlzCisgIHByZWNoYXJnZWQgYW5kIGFjdGl2YXRlZC4gVGhpcyBibG9jayBydW5zIHRoZSB0cmFuc2ZlciB1bnRpbCBhCisgIGJ1cnN0IGJvdW5kYXJ5IGlzIHJlYWNoZWQsIHRoZW4gaXNzdWVzIGFub3RoZXIgcmVhZC93cml0ZSBjb21tYW5kCisgIHRvIHNlcXVlbnRpYWxseSBzdGVwIHRocnUgbWVtb3J5IGlmIHdyYXA9MCwgdW50aWwgdGhlIHRyYW5zZmVyIGlzCisgIGNvbXBsZXRlZC4KKyAgIAorICBpZiBhIHJlYWQgdHJhbnNmZXIgZmluaXNoZXMgYW5kIHRoZSBjYWRkciBpcyBub3QgYXQgYSBidXJzdCBib3VuZGFyeSAKKyAgYSBidXJzdCB0ZXJtaW5hdGUgY29tbWFuZCBpcyBpc3N1ZWQgdW5sZXNzIGFub3RoZXIgcmVhZC93cml0ZSBvcgorICBwcmVjaGFyZ2UgdG8gdGhlIHNhbWUgYmFuayBpcyBwZW5kaW5nLgorICAKKyAgaWYgYSB3cml0ZSB0cmFuc2ZlciBmaW5pc2hlcyBhbmQgdGhlIGNhZGRyIGlzIG5vdCBhdCBhIGJ1cnN0IGJvdW5kYXJ5IAorICBhIGJ1cnN0IHRlcm1pbmF0ZSBjb21tYW5kIGlzIGlzc3VlZCB1bmxlc3MgYSByZWFkL3dyaXRlIGlzIHBlbmRpbmcuCisgIAorICAgSWYgYSByZWZyZXNoIHJlcXVlc3QgaXMgbWFkZSwgdGhlIGJhbmtfY3RsIHdpbGwgYmUgaGVsZCBvZmYgdW50aWwKKyAgIHRoZSBudW1iZXIgb2YgcmVmcmVzaGVzIHJlcXVlc3RlZCBhcmUgY29tcGxldGVkLgorCisgICBUaGlzIGJsb2NrIGFsc28gaGFuZGxlcyBTRFJBTSBpbml0aWFsaXphdGlvbi4KKyAgCisKKyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICBWZXJzaW9uICA6IDEuMCAtIDh0aCBKYW4gMjAxMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitgaW5jbHVkZSAic2RyY19kZWZpbmUudiIKKworbW9kdWxlIHNkcmNfeGZyX2N0bCAoY2xrLAorCQkgICAgcmVzZXRfbiwKKwkJICAgIAorCQkgICAgLyogVHJhbnNmZXIgcmVxdWVzdCBmcm9tIGJhbmtfY3RsICovCisJCSAgICByMnhfaWRsZSwJICAgLy8gUmVxIGlzIGlkbGUKKwkJICAgIGIyeF9pZGxlLCAgICAgIC8vIEFsbCBiYW5rcyBhcmUgaWRsZQorCQkgICAgYjJ4X3JlcSwJICAgLy8gUmVxIGZyb20gYmFua19jdGwKKwkJICAgIGIyeF9zdGFydCwJICAgLy8gZmlyc3QgY2h1bmsgb2YgdHJhbnNmZXIKKwkJICAgIGIyeF9sYXN0LAkgICAvLyBsYXN0IGNodW5rIG9mIHRyYW5zZmVyCisJCSAgICBiMnhfaWQsCSAgIC8vIFRyYW5zZmVyIElECisJCSAgICBiMnhfYmEsCSAgIC8vIGJhbmsgYWRkcmVzcworCQkgICAgYjJ4X2FkZHIsCSAgIC8vIHJvdy9jb2wgYWRkcmVzcworCQkgICAgYjJ4X2xlbiwJICAgLy8gdHJhbnNmZXIgbGVuZ3RoCisJCSAgICBiMnhfY21kLAkgICAvLyB0cmFuc2ZlciBjb21tYW5kCisJCSAgICBiMnhfd3JhcCwJICAgLy8gV3JhcCBtb2RlIHRyYW5zZmVyCisJCSAgICB4MmJfYWNrLAkgICAvLyBjb21tYW5kIGFjY2VwdGVkCisJCSAgICAgCisJCSAgICAvKiBTdGF0dXMgdG8gYmFua19jdGwsIHJlcV9nZW4gKi8KKwkJICAgIGIyeF90cmFzX29rLCAgIC8vIFRyYXMgZm9yIGFsbCBiYW5rcyBleHBpcmVkCisJCSAgICB4MmJfcmVmcmVzaCwgICAvLyBXZSBkaWQgYSByZWZyZXNoCisJCSAgICB4MmJfcHJlX29rLAkgICAvLyBPSyB0byBkbyBhIHByZWNoYXJnZSAocGVyIGJhbmspCisJCSAgICB4MmJfYWN0X29rLAkgICAvLyBPSyB0byBkbyBhbiBhY3RpdmF0ZQorCQkgICAgeDJiX3Jkb2ssCSAgIC8vIE9LIHRvIGRvIGEgcmVhZAorCQkgICAgeDJiX3dyb2ssCSAgIC8vIE9LIHRvIGRvIGEgd3JpdGUKKwkJICAgIAorCQkgICAgLyogU0RSQU0gSS9PICovCisJCSAgICBzZHJfY3NfbiwKKwkJICAgIHNkcl9ja2UsCisJCSAgICBzZHJfcmFzX24sCisJCSAgICBzZHJfY2FzX24sCisJCSAgICBzZHJfd2VfbiwKKwkJICAgIHNkcl9kcW0sCisJCSAgICBzZHJfYmEsCisJCSAgICBzZHJfYWRkciwgCisJCSAgICBzZHJfZGluLAorCQkgICAgc2RyX2RvdXQsCisJCSAgICBzZHJfZGVuX24sCisJCSAgICAKKwkJICAgIC8qIERhdGEgRmxvdyB0byB0aGUgYXBwICovCisJCSAgICB4MmFfcmRzdGFydCwKKwkJICAgIHgyYV93cnN0YXJ0LAorCQkgICAgeDJhX3JkbGFzdCwKKwkJICAgIHgyYV93cmxhc3QsCisJCSAgICB4MmFfaWQsCisJCSAgICBhMnhfd3JkdCwKKwkJICAgIGEyeF93cmVuX24sCisJCSAgICB4MmFfd3JuZXh0LAorCQkgICAgeDJhX3JkZHQsCisJCSAgICB4MmFfcmRvaywKKwkJICAgIHNkcl9pbml0X2RvbmUsCisJCSAgICAKKwkJICAgIC8qIFNEUkFNIFBhcmFtZXRlcnMgKi8KKwkJICAgIHNkcmFtX2VuYWJsZSwKKwkJICAgIHNkcmFtX21vZGVfcmVnLAorCQkgICAgCisJCSAgICAvKiBvdXRwdXQgZm9yIGdlbmVyYXRlIHJvdyBhZGRyZXNzIG9mIHRoZSB0cmFuc2ZlciAqLworCQkgICAgeGZyX2Jhbmtfc2VsLAorCisJCSAgICAvKiBTRFJBTSBUaW1pbmcgKi8KKwkJICAgIGNhc19sYXRlbmN5LAorCQkgICAgdHJwX2RlbGF5LAkgICAvLyBQcmVjaGFyZ2UgdG8gcmVmcmVzaCBkZWxheQorCQkgICAgdHJjYXJfZGVsYXksICAgLy8gQXV0by1yZWZyZXNoIHBlcmlvZAorCQkgICAgdHdyX2RlbGF5LAkgICAvLyBXcml0ZSByZWNvdmVyeSBkZWxheQorCQkgICAgcmZzaF90aW1lLAkgICAvLyB0aW1lIHBlciByb3cgKDMxLjI1IG9yIDE1LjYxMjUgdVMpCisJCSAgICByZnNoX3JtYXgpOwkgICAvLyBOdW1iZXIgb2Ygcm93cyB0byByZnNoIGF0IGEgdGltZSAoPDEyMHVTKQorICAgCitwYXJhbWV0ZXIgIFNEUl9EVyAgID0gMTY7ICAvLyBTRFIgRGF0YSBXaWR0aCAKK3BhcmFtZXRlciAgU0RSX0JXICAgPSAyOyAgIC8vIFNEUiBCeXRlIFdpZHRoCisKKworaW5wdXQgICAgICAgICAgICBjbGssIHJlc2V0X247IAorCisgICAvKiBSZXEgZnJvbSBiYW5rX2N0bCAqLworaW5wdXQgCQkJYjJ4X3JlcSwgYjJ4X3N0YXJ0LCBiMnhfbGFzdCwgYjJ4X3RyYXNfb2ssCisJCQkJYjJ4X3dyYXAsIHIyeF9pZGxlLCBiMnhfaWRsZTsgCitpbnB1dCBbYFNEUl9SRVFfSURfVy0xOjBdIAliMnhfaWQ7CitpbnB1dCBbMTowXSAJCQliMnhfYmE7CitpbnB1dCBbMTI6MF0gCQliMnhfYWRkcjsKK2lucHV0IFtgUkVRX0JXLTE6MF0gCWIyeF9sZW47CitpbnB1dCBbMTowXSAJCQliMnhfY21kOworb3V0cHV0IAkJCXgyYl9hY2s7CisKKy8qIFN0YXR1cyB0byBiYW5rX2N0bCAqLworb3V0cHV0IFszOjBdIAkJeDJiX3ByZV9vazsKK291dHB1dCAJCQl4MmJfcmVmcmVzaCwgeDJiX2FjdF9vaywgeDJiX3Jkb2ssCisJCQkJeDJiX3dyb2s7CisvKiBEYXRhIEZsb3cgdG8gdGhlIGFwcCAqLworb3V0cHV0IAkJCXgyYV9yZHN0YXJ0LCB4MmFfd3JzdGFydCwgeDJhX3JkbGFzdCwgeDJhX3dybGFzdDsKK291dHB1dCBbYFNEUl9SRVFfSURfVy0xOjBdIAl4MmFfaWQ7CisKK2lucHV0IFtTRFJfRFctMTowXSAJYTJ4X3dyZHQ7CitpbnB1dCBbU0RSX0JXLTE6MF0gCWEyeF93cmVuX247CitvdXRwdXQgW1NEUl9EVy0xOjBdIAl4MmFfcmRkdDsKK291dHB1dCAJCQl4MmFfd3JuZXh0LCB4MmFfcmRvaywgc2RyX2luaXRfZG9uZTsKKwkJCisvKiBJbnRlcmZhY2UgdG8gU0RSQU1zICovCitvdXRwdXQgCQkJc2RyX2NzX24sIHNkcl9ja2UsIHNkcl9yYXNfbiwgc2RyX2Nhc19uLAorCQkJCXNkcl93ZV9uOyAKK291dHB1dCBbU0RSX0JXLTE6MF0gCXNkcl9kcW07CitvdXRwdXQgWzE6MF0gCQlzZHJfYmE7CitvdXRwdXQgWzEyOjBdIAkJc2RyX2FkZHI7CitpbnB1dCBbU0RSX0RXLTE6MF0gCXNkcl9kaW47CitvdXRwdXQgW1NEUl9EVy0xOjBdIAlzZHJfZG91dDsKK291dHB1dCBbU0RSX0JXLTE6MF0gCXNkcl9kZW5fbjsKKworICAgb3V0cHV0IFsxOjBdCQkJeGZyX2Jhbmtfc2VsOworCisgICBpbnB1dCAJCQlzZHJhbV9lbmFibGU7CisgICBpbnB1dCBbMTI6MF0gCQlzZHJhbV9tb2RlX3JlZzsKKyAgIGlucHV0IFsyOjBdIAkJCWNhc19sYXRlbmN5OworICAgaW5wdXQgWzM6MF0gCQkJdHJwX2RlbGF5LCB0cmNhcl9kZWxheSwgdHdyX2RlbGF5OworICAgaW5wdXQgW2BTRFJfUkZTSF9USU1FUl9XLTEgOiAwXSByZnNoX3RpbWU7CisgICBpbnB1dCBbYFNEUl9SRlNIX1JPV19DTlRfVy0xOjBdIHJmc2hfcm1heDsKKyAgIAorCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgLy8gSW50ZXJuYWwgTmV0cworCisgICBgZGVmaW5lIFhGUl9JRExFICAgICAgICAyJ2IwMAorICAgYGRlZmluZSBYRlJfV1JJVEUgICAgICAgMidiMDEKKyAgIGBkZWZpbmUgWEZSX1JFQUQgICAgICAgIDInYjEwCisgICBgZGVmaW5lIFhGUl9SRFdUICAgICAgICAyJ2IxMQorCisgICByZWcgWzE6MF0gCQkJeGZyX3N0LCBuZXh0X3hmcl9zdDsKKyAgIHJlZyBbMTI6MF0gCQkJeGZyX2NhZGRyOworICAgd2lyZSAJCQlsYXN0X2J1cnN0OworICAgd2lyZSAJCQl4MmFfcmRzdGFydCwgeDJhX3dyc3RhcnQsIHgyYV9yZGxhc3QsIHgyYV93cmxhc3Q7CisgICByZWcgCQkJCWxfc3RhcnQsIGxfbGFzdCwgbF93cmFwOworICAgd2lyZSBbYFNEUl9SRVFfSURfVy0xOjBdIAl4MmFfaWQ7CisgICByZWcgW2BTRFJfUkVRX0lEX1ctMTowXSAJbF9pZDsKKyAgIHdpcmUgWzE6MF0gCQkJeGZyX2JhOworICAgcmVnIFsxOjBdIAkJCWxfYmE7CisgICB3aXJlIFsxMjowXSAJCQl4ZnJfYWRkcjsKKyAgIHdpcmUgW2BSRVFfQlctMTowXSAJeGZyX2xlbiwgbmV4dF94ZnJfbGVuOworICAgcmVnIFtgUkVRX0JXLTE6MF0gCWxfbGVuOworCisgICByZWcgCQkJCW1nbXRfaWRsZSwgbWdtdF9yZXE7CisgICByZWcgWzM6MF0gCQkJbWdtdF9jbWQ7CisgICByZWcgWzEyOjBdIAkJCW1nbXRfYWRkcjsKKyAgIHJlZyBbMTowXSAJCQltZ210X2JhOworCisgICByZWcgCQkJCXNlbF9tZ210LCBzZWxfYjJ4OworICAgcmVnIAkJCQljYl9wcmVfb2ssIHJkb2ssIHdyb2ssIHdyX25leHQsCisJCQkJcmRfbmV4dCwgc2RyX2luaXRfZG9uZSwgYWN0X2NtZCwgZF9hY3RfY21kOworICAgd2lyZSBbMzowXSAJCQliMnhfc2RyX2NtZCwgeGZyX2NtZDsKKyAgIHJlZyBbMzowXSAJCQlpX3hmcl9jbWQ7CisgICB3aXJlIAkJCW1nbXRfYWNrLCB4MmJfYWNrLCBiMnhfcmVhZCwgYjJ4X3dyaXRlLCAKKwkJCQliMnhfcHJlY2hnLCBkX3JkX25leHQsIGR0X25leHQsIHhmcl9lbmQsCisJCQkJcmRfcGlwZV9tdCwgbGRfeGZyLCByZF9sYXN0LCBkX3JkX2xhc3QsIAorCQkJCXdyX2xhc3QsIGxfeGZyX2VuZCwgcmRfc3RhcnQsIGRfcmRfc3RhcnQsCisJCQkJd3Jfc3RhcnQsIHBhZ2VfaGl0LCBidXJzdF9iZHJ5LCB4ZnJfd3JhcCwKKwkJCQliMnhfcHJlY2hnX2hpdDsKKyAgIHJlZyBbNjowXSAJCQlsX3JkX25leHQsIGxfcmRfc3RhcnQsIGxfcmRfbGFzdDsKKyAgIAorICAgYXNzaWduIGIyeF9yZWFkID0gKGIyeF9jbWQgPT0gYE9QX1JEKSA/IDEnYjEgOiAxJ2IwOworCisgICBhc3NpZ24gYjJ4X3dyaXRlID0gKGIyeF9jbWQgPT0gYE9QX1dSKSA/IDEnYjEgOiAxJ2IwOworCisgICBhc3NpZ24gYjJ4X3ByZWNoZyA9IChiMnhfY21kID09IGBPUF9QUkUpID8gMSdiMSA6IDEnYjA7CisgICAKKyAgIGFzc2lnbiBiMnhfc2RyX2NtZCA9IChiMnhfY21kID09IGBPUF9QUkUpID8gYFNEUl9QUkVDSEFSR0UgOgorCQkJKGIyeF9jbWQgPT0gYE9QX0FDVCkgPyBgU0RSX0FDVElWQVRFIDoKKwkJCShiMnhfY21kID09IGBPUF9SRCkgPyBgU0RSX1JFQUQgOgorCQkJKGIyeF9jbWQgPT0gYE9QX1dSKSA/IGBTRFJfV1JJVEUgOiBgU0RSX0RFU0VMOworCisgICBhc3NpZ24gcGFnZV9oaXQgPSAoYjJ4X2JhID09IGxfYmEpID8gMSdiMSA6IDEnYjA7CisKKyAgIGFzc2lnbiBiMnhfcHJlY2hnX2hpdCA9IGIyeF9wcmVjaGcgJiBwYWdlX2hpdDsKKyAgIAorICAgYXNzaWduIHhmcl9jbWQgPSAoc2VsX21nbXQpID8gbWdtdF9jbWQgOgorCQkgICAgKHNlbF9iMngpID8gYjJ4X3Nkcl9jbWQgOiBpX3hmcl9jbWQ7CisKKyAgIGFzc2lnbiB4ZnJfYWRkciA9IChzZWxfbWdtdCkgPyBtZ210X2FkZHIgOiAKKwkJICAgICAoc2VsX2IyeCkgPyBiMnhfYWRkciA6IHhmcl9jYWRkcisxOworCisgICBhc3NpZ24gbWdtdF9hY2sgPSBzZWxfbWdtdDsKKworICAgYXNzaWduIHgyYl9hY2sgPSBzZWxfYjJ4OworCisgICBhc3NpZ24gbGRfeGZyID0gc2VsX2IyeCAmIChiMnhfcmVhZCB8IGIyeF93cml0ZSk7CisgICAKKyAgIGFzc2lnbiB4ZnJfbGVuID0gKGxkX3hmcikgPyBiMnhfbGVuIDogbF9sZW47CisKKyAgIC8vYXNzaWduIG5leHRfeGZyX2xlbiA9IChsX3hmcl9lbmQgJiYgIWxkX3hmcikgPyBsX2xlbiA6IHhmcl9sZW4gLSAxOworICAgYXNzaWduIG5leHRfeGZyX2xlbiA9IChsZF94ZnIpID8gYjJ4X2xlbiA6IAorCSAgICAgICAgICAgICAgICAgKGxfeGZyX2VuZCkgPyBsX2xlbjogIGxfbGVuIC0gMTsKKworICAgYXNzaWduIGRfcmRfbmV4dCA9IChjYXNfbGF0ZW5jeSA9PSAzJ2IwMDEpID8gbF9yZF9uZXh0WzJdIDoKKwkJICAgICAgKGNhc19sYXRlbmN5ID09IDMnYjAxMCkgPyBsX3JkX25leHRbM10gOgorCQkgICAgICAoY2FzX2xhdGVuY3kgPT0gMydiMDExKSA/IGxfcmRfbmV4dFs0XSA6CisJCSAgICAgIChjYXNfbGF0ZW5jeSA9PSAzJ2IxMDApID8gbF9yZF9uZXh0WzVdIDoKKwkJICAgICAgbF9yZF9uZXh0WzZdOworCisgICBhc3NpZ24gZF9yZF9sYXN0ID0gKGNhc19sYXRlbmN5ID09IDMnYjAwMSkgPyBsX3JkX2xhc3RbMl0gOgorCQkgICAgICAoY2FzX2xhdGVuY3kgPT0gMydiMDEwKSA/IGxfcmRfbGFzdFszXSA6CisJCSAgICAgIChjYXNfbGF0ZW5jeSA9PSAzJ2IwMTEpID8gbF9yZF9sYXN0WzRdIDoKKwkJICAgICAgKGNhc19sYXRlbmN5ID09IDMnYjEwMCkgPyBsX3JkX2xhc3RbNV0gOgorCQkgICAgICBsX3JkX2xhc3RbNl07CisKKyAgIGFzc2lnbiBkX3JkX3N0YXJ0ID0gKGNhc19sYXRlbmN5ID09IDMnYjAwMSkgPyBsX3JkX3N0YXJ0WzJdIDoKKwkJICAgICAgIChjYXNfbGF0ZW5jeSA9PSAzJ2IwMTApID8gbF9yZF9zdGFydFszXSA6CisJCSAgICAgICAoY2FzX2xhdGVuY3kgPT0gMydiMDExKSA/IGxfcmRfc3RhcnRbNF0gOgorCQkgICAgICAgKGNhc19sYXRlbmN5ID09IDMnYjEwMCkgPyBsX3JkX3N0YXJ0WzVdIDoKKwkJICAgICAgIGxfcmRfc3RhcnRbNl07CisKKyAgIGFzc2lnbiByZF9waXBlX210ID0gKGNhc19sYXRlbmN5ID09IDMnYjAwMSkgPyB+fGxfcmRfbmV4dFsxOjBdIDoKKwkJICAgICAgIChjYXNfbGF0ZW5jeSA9PSAzJ2IwMTApID8gfnxsX3JkX25leHRbMjowXSA6CisJCSAgICAgICAoY2FzX2xhdGVuY3kgPT0gMydiMDExKSA/IH58bF9yZF9uZXh0WzM6MF0gOgorCQkgICAgICAgKGNhc19sYXRlbmN5ID09IDMnYjEwMCkgPyB+fGxfcmRfbmV4dFs0OjBdIDoKKwkJICAgICAgIH58bF9yZF9uZXh0WzU6MF07CisKKyAgIGFzc2lnbiBkdF9uZXh0ID0gd3JfbmV4dCB8IGRfcmRfbmV4dDsKKworICAgYXNzaWduIHhmcl9lbmQgPSB+fHhmcl9sZW47CisKKyAgIGFzc2lnbiBsX3hmcl9lbmQgPSB+fChsX2xlbi0xKTsKKworICAgYXNzaWduIHJkX3N0YXJ0ID0gbGRfeGZyICYgYjJ4X3JlYWQgJiBiMnhfc3RhcnQ7CisKKyAgIGFzc2lnbiB3cl9zdGFydCA9IGxkX3hmciAmIGIyeF93cml0ZSAmIGIyeF9zdGFydDsKKyAgIAorICAgYXNzaWduIHJkX2xhc3QgPSByZF9uZXh0ICYgbGFzdF9idXJzdCAmIH58eGZyX2xlbltgUkVRX0JXLTE6MV07CisKKyAgIC8vYXNzaWduIHdyX2xhc3QgPSB3cl9uZXh0ICYgbGFzdF9idXJzdCAmIH58eGZyX2xlbltBUFBfUlctMToxXTsKKworICAgYXNzaWduIHdyX2xhc3QgPSBsYXN0X2J1cnN0ICYgfnx4ZnJfbGVuW2BSRVFfQlctMToxXTsKKyAgIAorICAgLy9hc3NpZ24geGZyX2JhID0gKGxkX3hmcikgPyBiMnhfYmEgOiBsX2JhOworICAgYXNzaWduIHhmcl9iYSA9IChzZWxfbWdtdCkgPyBtZ210X2JhIDogCisJCSAgIChzZWxfYjJ4KSA/IGIyeF9iYSA6IGxfYmE7CisKKyAgIGFzc2lnbiB4ZnJfd3JhcCA9IChsZF94ZnIpID8gYjJ4X3dyYXAgOiBsX3dyYXA7CisgICAKKy8vICAgYXNzaWduIGJ1cnN0X2JkcnkgPSB+fHhmcl9jYWRkclsyOjBdOworICAgd2lyZSBbMTowXSB4ZnJfY2FkZHJfbHNiID0gKHhmcl9jYWRkclsxOjBdKzEpOworICAgYXNzaWduIGJ1cnN0X2JkcnkgPSB+fCh4ZnJfY2FkZHJfbHNiWzE6MF0pOworICAKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICAgIGlmICh+cmVzZXRfbikgYmVnaW4KKwkgeGZyX2NhZGRyIDw9IDEzJ2IwOworCSBsX3N0YXJ0IDw9IDEnYjA7CisJIGxfbGFzdCA8PSAxJ2IwOworCSBsX3dyYXAgPD0gMSdiMDsKKwkgbF9pZCA8PSAwOworCSBsX2JhIDw9IDA7CisJIGxfbGVuIDw9IDA7CisJIGxfcmRfbmV4dCA8PSA3J2IwOworCSBsX3JkX3N0YXJ0IDw9IDcnYjA7CisJIGxfcmRfbGFzdCA8PSA3J2IwOworCSBhY3RfY21kIDw9IDEnYjA7CisJIGRfYWN0X2NtZCA8PSAxJ2IwOworCSB4ZnJfc3QgPD0gYFhGUl9JRExFOworICAgICAgZW5kIC8vIGlmICh+cmVzZXRfbikKKworICAgICAgZWxzZSBiZWdpbgorCSB4ZnJfY2FkZHIgPD0gKGxkX3hmcikgPyBiMnhfYWRkciA6CisJCSAgICAgIChyZF9uZXh0IHwgd3JfbmV4dCkgPyB4ZnJfY2FkZHIgKyAxIDogeGZyX2NhZGRyOyAKKwkgbF9zdGFydCA8PSAoZHRfbmV4dCkgPyAxJ2IwIDogCisJCSAgIChsZF94ZnIpID8gYjJ4X3N0YXJ0IDogbF9zdGFydDsKKwkgbF9sYXN0IDw9IChsZF94ZnIpID8gYjJ4X2xhc3QgOiBsX2xhc3Q7CisJIGxfd3JhcCA8PSAobGRfeGZyKSA/IGIyeF93cmFwIDogbF93cmFwOworCSBsX2lkIDw9IChsZF94ZnIpID8gYjJ4X2lkIDogbF9pZDsKKwkgbF9iYSA8PSAobGRfeGZyKSA/IGIyeF9iYSA6IGxfYmE7CisJIGxfbGVuIDw9IG5leHRfeGZyX2xlbjsKKwkgbF9yZF9uZXh0IDw9IHtsX3JkX25leHRbNTowXSwgcmRfbmV4dH07CisJIGxfcmRfc3RhcnQgPD0ge2xfcmRfc3RhcnRbNTowXSwgcmRfc3RhcnR9OworCSBsX3JkX2xhc3QgPD0ge2xfcmRfbGFzdFs1OjBdLCByZF9sYXN0fTsKKwkgYWN0X2NtZCA8PSAoeGZyX2NtZCA9PSBgU0RSX0FDVElWQVRFKSA/IDEnYjEgOiAxJ2IwOworCSBkX2FjdF9jbWQgPD0gYWN0X2NtZDsKKwkgeGZyX3N0IDw9IG5leHRfeGZyX3N0OworICAgICAgZW5kIC8vIGVsc2U6ICFpZih+cmVzZXRfbikKKyAgICAgIAorICAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsaykKKyAgIAorCisgICBhbHdheXMgQCAoKikgYmVnaW4gCisgICAgICBjYXNlICh4ZnJfc3QpCisKKwlgWEZSX0lETEUgOiBiZWdpbgorCisJICAgc2VsX21nbXQgPSBtZ210X3JlcTsKKwkgICBzZWxfYjJ4ID0gfm1nbXRfcmVxICYgc2RyX2luaXRfZG9uZSAmIGIyeF9yZXE7CisJICAgaV94ZnJfY21kID0gYFNEUl9ERVNFTDsKKwkgICByZF9uZXh0ID0gfm1nbXRfcmVxICYgc2RyX2luaXRfZG9uZSAmIGIyeF9yZXEgJiBiMnhfcmVhZDsKKwkgICB3cl9uZXh0ID0gfm1nbXRfcmVxICYgc2RyX2luaXRfZG9uZSAmIGIyeF9yZXEgJiBiMnhfd3JpdGU7CisJICAgcmRvayA9IH5tZ210X3JlcTsKKwkgICBjYl9wcmVfb2sgPSAxJ2IxOworCSAgIHdyb2sgPSB+bWdtdF9yZXE7CisJICAgbmV4dF94ZnJfc3QgPSAobWdtdF9yZXEgfCB+c2RyX2luaXRfZG9uZSkgPyBgWEZSX0lETEUgOgorCQkJICh+YjJ4X3JlcSkgPyBgWEZSX0lETEUgOgorCQkJIChiMnhfcmVhZCkgPyBgWEZSX1JFQUQgOgorCQkJIChiMnhfd3JpdGUpID8gYFhGUl9XUklURSA6IGBYRlJfSURMRTsKKworCWVuZCAvLyBjYXNlOiBgWEZSX0lETEUKKwkgICAKKwlgWEZSX1JFQUQgOiBiZWdpbgorCSAgIHJkX25leHQgPSB+bF94ZnJfZW5kIHwKKwkJICAgICBsX3hmcl9lbmQgJiB+bWdtdF9yZXEgJiBiMnhfcmVxICYgYjJ4X3JlYWQ7CisJICAgd3JfbmV4dCA9IDEnYjA7CisJICAgcmRvayA9IGxfeGZyX2VuZCAmIH5tZ210X3JlcTsKKwkgICAvLyBCcmVhayB0aGUgdGltaW5nIHBhdGggZm9yIEZQR0EgQmFzZWQgRGVzaWduCisJICAgY2JfcHJlX29rID0gKGBUQVJHRVRfREVTSUdOID09IGBGUEdBKSA/IDEnYjAgOiBsX3hmcl9lbmQ7CisJICAgd3JvayA9IDEnYjA7CisJICAgc2VsX21nbXQgPSAxJ2IwOworCisJICAgaWYgKGxfeGZyX2VuZCkgYmVnaW4JCSAgLy8gZW5kIG9mIHRyYW5zZmVyCisKKwkgICAgICBpZiAofmxfd3JhcCkgYmVnaW4KKwkJIC8vIEN1cnJlbnQgdHJhbnNmZXIgd2FzIG5vdCB3cmFwIG1vZGUsIG1heSBuZWVkIEJUCisJCSAvLyBJZiBuZXh0IGNtZCBpcyBhIFIgb3IgVyBvciBQUkUgdG8gc2FtZSBiYW5rIGFsbG93CisJCSAvLyBpdCBlbHNlIGlzc3VlIEJUIAorCQkgLy8gVGhpcyBpcyBhIGxpdHRsZSBwZXNzaW1pc3RpYyBzaW5jZSBCVCBpcyBpc3N1ZWQKKwkJIC8vIGZvciBub24td3JhcCBtb2RlIHRyYW5zZmVycyBldmVuIGlmIHRoZSB0cmFuc2ZlcgorCQkgLy8gZW5kcyBvbiBhIGJ1cnN0IGJvdW5kYXJ5LCBidXQgaXMgZmVsdCB0byBiZSBvZgorCQkgLy8gbWluaW1hbCBwZXJmb3JtYW5jZSBpbXBhY3QuCisKKwkJIGlfeGZyX2NtZCA9IGBTRFJfQlQ7CisJCSBzZWxfYjJ4ID0gYjJ4X3JlcSAmIH5tZ210X3JlcSAmIChiMnhfcmVhZCB8IGIyeF9wcmVjaGdfaGl0KTsKKworCSAgICAgIGVuZCAvLyBpZiAofmxfd3JhcCkKKwkgICAgICAKKwkgICAgICBlbHNlIGJlZ2luCisJCSAvLyBXcmFwIG1vZGUgdHJhbnNmZXIsIGJ5IGRlZmluaXRpb24gaXMgZW5kIG9mIGJ1cnN0CisJCSAvLyBib3VuZGFyeSAKKworCQkgaV94ZnJfY21kID0gYFNEUl9ERVNFTDsKKwkJIHNlbF9iMnggPSBiMnhfcmVxICYgfm1nbXRfcmVxICYgfmIyeF93cml0ZTsKKworCSAgICAgIGVuZCAvLyBlbHNlOiAhaWYofmxfd3JhcCkKKwkJIAorCSAgICAgIG5leHRfeGZyX3N0ID0gKHNkcl9pbml0X2RvbmUpID8gKChiMnhfcmVxICYgfm1nbXRfcmVxICYgYjJ4X3JlYWQpID8gYFhGUl9SRUFEIDogYFhGUl9SRFdUKSA6IGBYRlJfSURMRTsKKworCSAgIGVuZCAvLyBpZiAobF94ZnJfZW5kKQorCisJICAgZWxzZSBiZWdpbgorCSAgICAgIC8vIE5vdCBlbmQgb2YgdHJhbnNmZXIKKwkgICAgICAvLyBJZiBjdXJyZW50IHRyYW5zZmVyIHdhcyBub3Qgd3JhcCBtb2RlIGFuZCB3ZSBhcmUgYXQKKwkgICAgICAvLyB0aGUgc3RhcnQgb2YgYSBidXJzdCBib3VuZGFyeSBpc3N1ZSBhbm90aGVyIFIgY21kIHRvCisJICAgICAgLy8gc3RlcCBzZXF1ZW10aWFsbHkgdGhydSBtZW1vcnksIEVMU0UsCisJICAgICAgLy8gaXNzdWUgcHJlY2hhcmdlL2FjdGl2YXRlIGNvbW1hbmRzIGZyb20gdGhlIGJhbmsgY29udHJvbAorCisJICAgICAgaV94ZnJfY21kID0gKGJ1cnN0X2JkcnkgJiB+bF93cmFwKSA/IGBTRFJfUkVBRCA6IGBTRFJfREVTRUw7CisJICAgICAgc2VsX2IyeCA9IH4oYnVyc3RfYmRyeSAmIH5sX3dyYXApICYgYjJ4X3JlcTsKKwkgICAgICBuZXh0X3hmcl9zdCA9IGBYRlJfUkVBRDsKKworCSAgIGVuZCAvLyBlbHNlOiAhaWYobF94ZnJfZW5kKQorCSAgIAorCWVuZCAvLyBjYXNlOiBgWEZSX1JFQUQKKwkKKwlgWEZSX1JEV1QgOiBiZWdpbiAKKwkgICByZF9uZXh0ID0gfm1nbXRfcmVxICYgYjJ4X3JlcSAmIGIyeF9yZWFkOworCSAgIHdyX25leHQgPSByZF9waXBlX210ICYgfm1nbXRfcmVxICYgYjJ4X3JlcSAmIGIyeF93cml0ZTsKKwkgICByZG9rID0gfm1nbXRfcmVxOworCSAgIGNiX3ByZV9vayA9IDEnYjE7CisJICAgd3JvayA9IHJkX3BpcGVfbXQgJiB+bWdtdF9yZXE7CisKKwkgICBzZWxfbWdtdCA9IG1nbXRfcmVxOworCSAgIAorCSAgIHNlbF9iMnggPSB+bWdtdF9yZXEgJiBiMnhfcmVxOworCisJICAgaV94ZnJfY21kID0gYFNEUl9ERVNFTDsKKworCSAgIG5leHRfeGZyX3N0ID0gKH5tZ210X3JlcSAmIGIyeF9yZXEgJiBiMnhfcmVhZCkgPyBgWEZSX1JFQUQgOiAKKwkJCSAofnJkX3BpcGVfbXQpID8gYFhGUl9SRFdUIDoKKwkJCSAofm1nbXRfcmVxICYgYjJ4X3JlcSAmIGIyeF93cml0ZSkgPyBgWEZSX1dSSVRFIDogCisJCQkgYFhGUl9JRExFOworCisJZW5kIC8vIGNhc2U6IGBYRlJfUkRXVAorCQorCWBYRlJfV1JJVEUgOiBiZWdpbgorCSAgIHJkX25leHQgPSBsX3hmcl9lbmQgJiB+bWdtdF9yZXEgJiBiMnhfcmVxICYgYjJ4X3JlYWQ7CisJICAgd3JfbmV4dCA9IH5sX3hmcl9lbmQgfAorCQkgICAgIGxfeGZyX2VuZCAmIH5tZ210X3JlcSAmIGIyeF9yZXEgJiBiMnhfd3JpdGU7CisJICAgcmRvayA9IGxfeGZyX2VuZCAmIH5tZ210X3JlcTsKKwkgICBjYl9wcmVfb2sgPSAxJ2IwOworCSAgIHdyb2sgPSBsX3hmcl9lbmQgJiB+bWdtdF9yZXE7CisJICAgc2VsX21nbXQgPSAxJ2IwOworCisJICAgaWYgKGxfeGZyX2VuZCkgYmVnaW4JCSAgLy8gRW5kIG9mIHRyYW5zZmVyCisKKwkgICAgICBpZiAofmxfd3JhcCkgYmVnaW4KKwkJIC8vIEN1cnJlbnQgdHJhbnNmZXIgd2FzIG5vdCB3cmFwIG1vZGUsIG1heSBuZWVkIEJUCisJCSAvLyBJZiBuZXh0IGNtZCBpcyBhIFIgb3IgVyBhbGxvdyBpdCBlbHNlIGlzc3VlIEJUIAorCQkgLy8gVGhpcyBpcyBhIGxpdHRsZSBwZXNzaW1pc3RpYyBzaW5jZSBCVCBpcyBpc3N1ZWQKKwkJIC8vIGZvciBub24td3JhcCBtb2RlIHRyYW5zZmVycyBldmVuIGlmIHRoZSB0cmFuc2ZlcgorCQkgLy8gZW5kcyBvbiBhIGJ1cnN0IGJvdW5kYXJ5LCBidXQgaXMgZmVsdCB0byBiZSBvZgorCQkgLy8gbWluaW1hbCBwZXJmb3JtYW5jZSBpbXBhY3QuCisKKworCQkgc2VsX2IyeCA9IGIyeF9yZXEgJiB+bWdtdF9yZXEgJiAoYjJ4X3JlYWQgfCBiMnhfd3JpdGUpOworCQkgaV94ZnJfY21kID0gYFNEUl9CVDsKKwkgICAgICBlbmQgLy8gaWYgKH5sX3dyYXApCisKKwkgICAgICBlbHNlIGJlZ2luCisJCSAvLyBXcmFwIG1vZGUgdHJhbnNmZXIsIGJ5IGRlZmluaXRpb24gaXMgZW5kIG9mIGJ1cnN0CisJCSAvLyBib3VuZGFyeSAKKworCQkgc2VsX2IyeCA9IGIyeF9yZXEgJiB+bWdtdF9yZXEgJiB+YjJ4X3ByZWNoZ19oaXQ7CisJCSBpX3hmcl9jbWQgPSBgU0RSX0RFU0VMOworCSAgICAgIGVuZCAvLyBlbHNlOiAhaWYofmxfd3JhcCkKKwkgICAgICAKKwkgICAgICBuZXh0X3hmcl9zdCA9ICh+bWdtdF9yZXEgJiBiMnhfcmVxICYgYjJ4X3JlYWQpID8gYFhGUl9SRUFEIDogCisJCQkgICAgKH5tZ210X3JlcSAmIGIyeF9yZXEgJiBiMnhfd3JpdGUpID8gYFhGUl9XUklURSA6IAorCQkJICAgIGBYRlJfSURMRTsKKworCSAgIGVuZCAvLyBpZiAobF94ZnJfZW5kKQorCisJICAgZWxzZSBiZWdpbgorCSAgICAgIC8vIE5vdCBlbmQgb2YgdHJhbnNmZXIKKwkgICAgICAvLyBJZiBjdXJyZW50IHRyYW5zZmVyIHdhcyBub3Qgd3JhcCBtb2RlIGFuZCB3ZSBhcmUgYXQKKwkgICAgICAvLyB0aGUgc3RhcnQgb2YgYSBidXJzdCBib3VuZGFyeSBpc3N1ZSBhbm90aGVyIFIgY21kIHRvCisJICAgICAgLy8gc3RlcCBzZXF1ZW10aWFsbHkgdGhydSBtZW1vcnksIEVMU0UsCisJICAgICAgLy8gaXNzdWUgcHJlY2hhcmdlL2FjdGl2YXRlIGNvbW1hbmRzIGZyb20gdGhlIGJhbmsgY29udHJvbAorCisJICAgICAgaWYgKGJ1cnN0X2JkcnkgJiB+bF93cmFwKSBiZWdpbgorCQkgc2VsX2IyeCA9IDEnYjA7CisJCSBpX3hmcl9jbWQgPSBgU0RSX1dSSVRFOworCSAgICAgIGVuZCAvLyBpZiAoYnVyc3RfYmRyeSAmIH5sX3dyYXApCisJICAgICAgCisJICAgICAgZWxzZSBiZWdpbgorCQkgc2VsX2IyeCA9IGIyeF9yZXEgJiB+bWdtdF9yZXE7CisJCSBpX3hmcl9jbWQgPSBgU0RSX0RFU0VMOworCSAgICAgIGVuZCAvLyBlbHNlOiAhaWYoYnVyc3RfYmRyeSAmIH5sX3dyYXApCisKKwkgICAgICBuZXh0X3hmcl9zdCA9IGBYRlJfV1JJVEU7CisJICAgZW5kIC8vIGVsc2U6ICFpZihsX3hmcl9lbmQpCisKKwllbmQgLy8gY2FzZTogYFhGUl9XUklURQorCisgICAgICBlbmRjYXNlIC8vIGNhc2UoeGZyX3N0KQorCisgICBlbmQgLy8gYWx3YXlzIEAgKHhmcl9zdCBvciAuLi4pCisKKyAgIC8vIHNpZ25hbHMgdG8gYmFua19jdGwgKHgyYl9yZWZyZXNoLCB4MmJfYWN0X29rLCB4MmJfcmRvaywgeDJiX3dyb2ssCisgICAvLyB4MmJfcHJlX29rWzM6MF0gCisKKyAgIGFzc2lnbiB4MmJfcmVmcmVzaCA9ICh4ZnJfY21kID09IGBTRFJfUkVGUkVTSCkgPyAxJ2IxIDogMSdiMDsKKworICAgYXNzaWduIHgyYl9hY3Rfb2sgPSB+YWN0X2NtZCAmIH5kX2FjdF9jbWQ7CisKKyAgIGFzc2lnbiB4MmJfcmRvayA9IHJkb2s7CisKKyAgIGFzc2lnbiB4MmJfd3JvayA9IHdyb2s7CisKKyAgIC8vYXNzaWduIHgyYl9wcmVfb2tbMF0gPSAobF9iYSA9PSAyJ2IwMCkgPyBjYl9wcmVfb2sgOiAxJ2IxOworICAgLy9hc3NpZ24geDJiX3ByZV9va1sxXSA9IChsX2JhID09IDInYjAxKSA/IGNiX3ByZV9vayA6IDEnYjE7CisgICAvL2Fzc2lnbiB4MmJfcHJlX29rWzJdID0gKGxfYmEgPT0gMidiMTApID8gY2JfcHJlX29rIDogMSdiMTsKKyAgIC8vYXNzaWduIHgyYl9wcmVfb2tbM10gPSAobF9iYSA9PSAyJ2IxMSkgPyBjYl9wcmVfb2sgOiAxJ2IxOworICAgCisgICBhc3NpZ24geDJiX3ByZV9va1swXSA9IGNiX3ByZV9vazsKKyAgIGFzc2lnbiB4MmJfcHJlX29rWzFdID0gY2JfcHJlX29rOworICAgYXNzaWduIHgyYl9wcmVfb2tbMl0gPSBjYl9wcmVfb2s7CisgICBhc3NpZ24geDJiX3ByZV9va1szXSA9IGNiX3ByZV9vazsKKyAgIGFzc2lnbiBsYXN0X2J1cnN0ID0gKGxkX3hmcikgPyBiMnhfbGFzdCA6IGxfbGFzdDsKKyAgIAorICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIC8vIEFQUCBEYXRhIEkvRgorCisgICB3aXJlIFtTRFJfRFctMTowXSAJeDJhX3JkZHQ7CisKKyAgIC8vYXNzaWduIHgyYV9zdGFydCA9IChsZF94ZnIpID8gYjJ4X3N0YXJ0IDogbF9zdGFydDsKKyAgIGFzc2lnbiB4MmFfcmRzdGFydCA9IGRfcmRfc3RhcnQ7CisgICBhc3NpZ24geDJhX3dyc3RhcnQgPSB3cl9zdGFydDsKKyAgIAorICAgYXNzaWduIHgyYV9yZGxhc3QgPSBkX3JkX2xhc3Q7CisgICBhc3NpZ24geDJhX3dybGFzdCA9IHdyX2xhc3Q7CisKKyAgIGFzc2lnbiB4MmFfaWQgPSAobGRfeGZyKSA/IGIyeF9pZCA6IGxfaWQ7CisKKyAgIGFzc2lnbiB4MmFfcmRkdCA9IHNkcl9kaW47CisKKyAgIGFzc2lnbiB4MmFfd3JuZXh0ID0gd3JfbmV4dDsKKworICAgYXNzaWduIHgyYV9yZG9rID0gZF9yZF9uZXh0OworICAgCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgLy8gU0RSQU0gSS9GCisKKyAgIHJlZyAJCQkJc2RyX2NzX24sIHNkcl9ja2UsIHNkcl9yYXNfbiwgc2RyX2Nhc19uLAorCQkJCXNkcl93ZV9uOyAKKyAgIHJlZyBbU0RSX0JXLTE6MF0gCXNkcl9kcW07CisgICByZWcgWzE6MF0gCQkJc2RyX2JhOworICAgcmVnIFsxMjowXSAJCQlzZHJfYWRkcjsKKyAgIHJlZyBbU0RSX0RXLTE6MF0gCXNkcl9kb3V0OworICAgcmVnIFtTRFJfQlctMTowXSAJc2RyX2Rlbl9uOworCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGspCisgICAgICBpZiAofnJlc2V0X24pIGJlZ2luCisJIHNkcl9jc19uIDw9IDEnYjE7CisJIHNkcl9ja2UgPD0gMSdiMTsKKwkgc2RyX3Jhc19uIDw9IDEnYjE7CisJIHNkcl9jYXNfbiA8PSAxJ2IxOworCSBzZHJfd2VfbiA8PSAxJ2IxOworCSBzZHJfZHFtICAgPD0ge1NEUl9CV3sxJ2IxfX07CisJIHNkcl9kZW5fbiA8PSB7U0RSX0JXezEnYjF9fTsKKyAgICAgIGVuZCAvLyBpZiAofnJlc2V0X24pCisgICAgICBlbHNlIGJlZ2luCisJIHNkcl9jc19uIDw9IHhmcl9jbWRbM107CisJIHNkcl9yYXNfbiA8PSB4ZnJfY21kWzJdOworCSBzZHJfY2FzX24gPD0geGZyX2NtZFsxXTsKKwkgc2RyX3dlX24gPD0geGZyX2NtZFswXTsKKwkgc2RyX2NrZSA8PSAoeGZyX3N0ICE9IGBYRlJfSURMRSkgPyAxJ2IxIDogCisJCSAgICB+KG1nbXRfaWRsZSAmIGIyeF9pZGxlICYgcjJ4X2lkbGUpOworCSBzZHJfZHFtIDw9ICh3cl9uZXh0KSA/IGEyeF93cmVuX24gOiB7U0RSX0JXezEnYjB9fTsKKyAgICAgICAgIHNkcl9kZW5fbiA8PSAod3JfbmV4dCkgPyB7U0RSX0JXezEnYjB9fSA6IHtTRFJfQld7MSdiMX19OworICAgICAgZW5kIC8vIGVsc2U6ICFpZih+cmVzZXRfbikKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKSBiZWdpbiAKKworICAgICAgaWYgKH54ZnJfY21kWzNdKSBiZWdpbiAKKwkgc2RyX2FkZHIgPD0geGZyX2FkZHI7CisJIHNkcl9iYSA8PSB4ZnJfYmE7CisgICAgICBlbmQgLy8gaWYgKH54ZnJfY21kWzNdKQorICAgICAgCisgICAgICBzZHJfZG91dCA8PSAod3JfbmV4dCkgPyBhMnhfd3JkdCA6IHNkcl9kb3V0OworCisgICBlbmQgLy8gYWx3YXlzIEAgKHBvc2VkZ2UgY2xrKQorICAgCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgLy8gUmVmcmVzaCBhbmQgSW5pdGlhbGl6YXRpb24KKworICAgYGRlZmluZSBNR01fUE9XRVJVUCAgICAgICAgIDMnYjAwMAorICAgYGRlZmluZSBNR01fUFJFQ0hBUkdFICAgIDMnYjAwMQorICAgYGRlZmluZSBNR01fUENIV1QgICAgICAgIDMnYjAxMAorICAgYGRlZmluZSBNR01fUkVGUkVTSCAgICAgIDMnYjAxMQorICAgYGRlZmluZSBNR01fUkVGV1QgICAgICAgIDMnYjEwMAorICAgYGRlZmluZSBNR01fTU9ERV9SRUcgICAgIDMnYjEwMQorICAgYGRlZmluZSBNR01fTU9ERV9XVCAgICAgIDMnYjExMAorICAgYGRlZmluZSBNR01fQUNUSVZFICAgICAgIDMnYjExMQorICAgCisgICByZWcgWzI6MF0gICAgICAgbWdtdF9zdCwgbmV4dF9tZ210X3N0OworICAgcmVnIFszOjBdIAkgICB0bXIwLCB0bXIwX2Q7CisgICByZWcgWzM6MF0gCSAgIGNudHIxLCBjbnRyMV9kOworICAgd2lyZSAJICAgdG1yMF90YywgY250cjFfdGMsIHJmc2hfdGltZXJfdGMsIHJlZl9yZXEsIHByZWNoYXJnZV9vazsKKyAgIHJlZyAJCSAgIGxkX3RtcjAsIGxkX2NudHIxLCBkZWNfY250cjEsIHNldF9zZHJfaW5pdF9kb25lOworICAgcmVnIFtgU0RSX1JGU0hfVElNRVJfVy0xIDogMF0gIHJmc2hfdGltZXI7CisgICByZWcgW2BTRFJfUkZTSF9ST1dfQ05UX1ctMTowXSAgcmZzaF9yb3dfY250OworICAgCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGspIAorICAgICAgaWYgKH5yZXNldF9uKSBiZWdpbgorCSBtZ210X3N0IDw9IGBNR01fUE9XRVJVUDsKKwkgdG1yMCA8PSA0J2IwOworCSBjbnRyMSA8PSA0J2g3OworCSByZnNoX3RpbWVyIDw9IDA7CisJIHJmc2hfcm93X2NudCA8PSAwOworCSBzZHJfaW5pdF9kb25lIDw9IDEnYjA7CisgICAgICBlbmQgLy8gaWYgKH5yZXNldF9uKQorICAgICAgZWxzZSBiZWdpbgorCSBtZ210X3N0IDw9IG5leHRfbWdtdF9zdDsKKwkgdG1yMCA8PSAobGRfdG1yMCkgPyB0bXIwX2QgOgorCQkgICh+dG1yMF90YykgPyB0bXIwIC0gMSA6IHRtcjA7CisJIGNudHIxIDw9IChsZF9jbnRyMSkgPyBjbnRyMV9kIDoKKwkJICAoZGVjX2NudHIxKSA/IGNudHIxIC0gMSA6IGNudHIxOworCSBzZHJfaW5pdF9kb25lIDw9IChzZXRfc2RyX2luaXRfZG9uZSB8IHNkcl9pbml0X2RvbmUpICYgc2RyYW1fZW5hYmxlOworCSByZnNoX3RpbWVyIDw9IChyZnNoX3RpbWVyX3RjKSA/IDAgOiByZnNoX3RpbWVyICsgMTsKKwkgcmZzaF9yb3dfY250IDw9ICh+c2V0X3Nkcl9pbml0X2RvbmUpID8gMCA6CisJCQkgKHJmc2hfdGltZXJfdGMpID8gcmZzaF9yb3dfY250ICsgMSA6IHJmc2hfcm93X2NudDsKKyAgICAgIGVuZCAvLyBlbHNlOiAhaWYofnJlc2V0X24pCisKKyAgIGFzc2lnbiB0bXIwX3RjID0gfnx0bXIwOworCisgICBhc3NpZ24gY250cjFfdGMgPSB+fGNudHIxOworCisgICBhc3NpZ24gcmZzaF90aW1lcl90YyA9IChyZnNoX3RpbWVyID09IHJmc2hfdGltZSkgPyAxJ2IxIDogMSdiMDsKKworICAgYXNzaWduIHJlZl9yZXEgPSAocmZzaF9yb3dfY250ID49IHJmc2hfcm1heCkgPyAxJ2IxIDogMSdiMDsKKworICAgYXNzaWduIHByZWNoYXJnZV9vayA9IGNiX3ByZV9vayAmIGIyeF90cmFzX29rOworCisgICBhc3NpZ24geGZyX2Jhbmtfc2VsID0gbF9iYTsKKyAgIAorICAgYWx3YXlzIEAgKG1nbXRfc3Qgb3Igc2RyYW1fZW5hYmxlIG9yIG1nbXRfYWNrIG9yIHRycF9kZWxheSBvciB0bXIwX3RjIG9yCisJICAgICBjbnRyMV90YyBvciB0cmNhcl9kZWxheSBvciByZnNoX3Jvd19jbnQgb3IgcmVmX3JlcSBvciBzZHJfaW5pdF9kb25lCisJICAgICBvciBwcmVjaGFyZ2Vfb2sgb3Igc2RyYW1fbW9kZV9yZWcpIGJlZ2luIAorCisgICAgICBjYXNlIChtZ210X3N0KSAgICAgICAgICAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCisJYE1HTV9QT1dFUlVQIDogYmVnaW4KKwkgICBtZ210X2lkbGUgPSAxJ2IwOworCSAgIG1nbXRfcmVxID0gMSdiMDsKKwkgICBtZ210X2NtZCA9IGBTRFJfREVTRUw7CisJICAgbWdtdF9iYSA9IDInYjA7CisJICAgbWdtdF9hZGRyID0gMTMnaDQwMDsgICAgLy8gQTEwID0gMSA9PiBhbGwgYmFua3MKKwkgICBsZF90bXIwID0gMSdiMDsKKwkgICB0bXIwX2QgPSA0J2IwOworCSAgIGRlY19jbnRyMSA9IDEnYjA7CisJICAgbGRfY250cjEgPSAxJ2IxOworCSAgIGNudHIxX2QgPSA0J2hmOyAvLyBjaGFuZ2VkIGZvciBzZHJhbXMgd2l0aCBoaWdoZXIgcmVmcmVzaCBjeWNsZXMgZHVyaW5nIGluaXRpYWxpemF0aW9uCisJICAgc2V0X3Nkcl9pbml0X2RvbmUgPSAxJ2IwOworCSAgIG5leHRfbWdtdF9zdCA9IChzZHJhbV9lbmFibGUpID8gYE1HTV9QUkVDSEFSR0UgOiBgTUdNX1BPV0VSVVA7IAorCWVuZCAvLyBjYXNlOiBgTUdNX1BPV0VSVVAKKworCWBNR01fUFJFQ0hBUkdFIDogYmVnaW4JICAgLy8gUHJlY2hhcmdlIGFsbCBiYW5rcworCSAgIG1nbXRfaWRsZSA9IDEnYjA7CisJICAgbWdtdF9yZXEgPSAxJ2IxOworCSAgIG1nbXRfY21kID0gKHByZWNoYXJnZV9vaykgPyBgU0RSX1BSRUNIQVJHRSA6IGBTRFJfREVTRUw7CisJICAgbWdtdF9iYSA9IDInYjA7CisJICAgbWdtdF9hZGRyID0gMTMnaDQwMDsJICAgLy8gQTEwID0gMSA9PiBhbGwgYmFua3MKKwkgICBsZF90bXIwID0gbWdtdF9hY2s7CisJICAgdG1yMF9kID0gdHJwX2RlbGF5OworCSAgIGxkX2NudHIxID0gMSdiMDsKKwkgICBjbnRyMV9kID0gNCdoNzsKKwkgICBkZWNfY250cjEgPSAxJ2IwOworCSAgIHNldF9zZHJfaW5pdF9kb25lID0gMSdiMDsKKwkgICBuZXh0X21nbXRfc3QgPSAocHJlY2hhcmdlX29rICYgbWdtdF9hY2spID8gYE1HTV9QQ0hXVCA6IGBNR01fUFJFQ0hBUkdFOworCWVuZCAvLyBjYXNlOiBgTUdNX1BSRUNIQVJHRQorCQorCWBNR01fUENIV1QgOiBiZWdpbgkgICAvLyBXYWl0IGZvciBUcnAKKwkgICBtZ210X2lkbGUgPSAxJ2IwOworCSAgIG1nbXRfcmVxID0gMSdiMTsKKwkgICBtZ210X2NtZCA9IGBTRFJfREVTRUw7CisJICAgbWdtdF9iYSA9IDInYjA7CisJICAgbWdtdF9hZGRyID0gMTMnaDQwMDsJICAgLy8gQTEwID0gMSA9PiBhbGwgYmFua3MKKwkgICBsZF90bXIwID0gMSdiMDsKKwkgICB0bXIwX2QgPSB0cnBfZGVsYXk7CisJICAgbGRfY250cjEgPSAxJ2IwOworCSAgIGNudHIxX2QgPSA0J2IwOworCSAgIGRlY19jbnRyMSA9IDEnYjA7CisJICAgc2V0X3Nkcl9pbml0X2RvbmUgPSAxJ2IwOworCSAgIG5leHRfbWdtdF9zdCA9ICh0bXIwX3RjKSA/IGBNR01fUkVGUkVTSCA6IGBNR01fUENIV1Q7CisJZW5kIC8vIGNhc2U6IGBNR01fUFJFQ0hBUkdFCisJCisJYE1HTV9SRUZSRVNIIDogYmVnaW4JICAgLy8gUmVmcmVzaAorCSAgIG1nbXRfaWRsZSA9IDEnYjA7CisJICAgbWdtdF9yZXEgPSAxJ2IxOworCSAgIG1nbXRfY21kID0gYFNEUl9SRUZSRVNIOworCSAgIG1nbXRfYmEgPSAyJ2IwOworCSAgIG1nbXRfYWRkciA9IDEzJ2g0MDA7CSAgIC8vIEExMCA9IDEgPT4gYWxsIGJhbmtzCisJICAgbGRfdG1yMCA9IG1nbXRfYWNrOworCSAgIHRtcjBfZCA9IHRyY2FyX2RlbGF5OworCSAgIGRlY19jbnRyMSA9IG1nbXRfYWNrOworCSAgIGxkX2NudHIxID0gMSdiMDsKKwkgICBjbnRyMV9kID0gNCdoNzsKKwkgICBzZXRfc2RyX2luaXRfZG9uZSA9IDEnYjA7CisJICAgbmV4dF9tZ210X3N0ID0gKG1nbXRfYWNrKSA/IGBNR01fUkVGV1QgOiBgTUdNX1JFRlJFU0g7CisJZW5kIC8vIGNhc2U6IGBNR01fUkVGUkVTSAorCQorCWBNR01fUkVGV1QgOiBiZWdpbgkgICAvLyBXYWl0IGZvciB0cmNhcgorCSAgIG1nbXRfaWRsZSA9IDEnYjA7CisJICAgbWdtdF9yZXEgPSAxJ2IxOworCSAgIG1nbXRfY21kID0gYFNEUl9ERVNFTDsKKwkgICBtZ210X2JhID0gMidiMDsKKwkgICBtZ210X2FkZHIgPSAxMydoNDAwOwkgICAvLyBBMTAgPSAxID0+IGFsbCBiYW5rcworCSAgIGxkX3RtcjAgPSAxJ2IwOworCSAgIHRtcjBfZCA9IHRyY2FyX2RlbGF5OworCSAgIGRlY19jbnRyMSA9IDEnYjA7CisJICAgbGRfY250cjEgPSAxJ2IwOworCSAgIGNudHIxX2QgPSA0J2g3OworCSAgIHNldF9zZHJfaW5pdF9kb25lID0gMSdiMDsKKwkgICBuZXh0X21nbXRfc3QgPSAofnRtcjBfdGMpID8gYE1HTV9SRUZXVCA6IAorCQkJICAofmNudHIxX3RjKSA/IGBNR01fUkVGUkVTSCA6CisJCQkgIChzZHJfaW5pdF9kb25lKSA/IGBNR01fQUNUSVZFIDogYE1HTV9NT0RFX1JFRzsKKwllbmQgLy8gY2FzZTogYE1HTV9SRUZXVAorCQorCWBNR01fTU9ERV9SRUcgOiBiZWdpbgkgICAvLyBQcm9ncmFtIG1vZGUgUmVnaXN0ZXIgJiB3YWl0IGZvciAKKwkgICBtZ210X2lkbGUgPSAxJ2IwOworCSAgIG1nbXRfcmVxID0gMSdiMTsKKwkgICBtZ210X2NtZCA9IGBTRFJfTU9ERTsKKwkgICBtZ210X2JhID0gezEnYjAsIHNkcmFtX21vZGVfcmVnWzExXX07CisJICAgbWdtdF9hZGRyID0gc2RyYW1fbW9kZV9yZWc7CisJICAgbGRfdG1yMCA9IG1nbXRfYWNrOworCSAgIHRtcjBfZCA9IDQnaDc7CisJICAgZGVjX2NudHIxID0gMSdiMDsKKwkgICBsZF9jbnRyMSA9IDEnYjA7CisJICAgY250cjFfZCA9IDQnaDc7CisJICAgc2V0X3Nkcl9pbml0X2RvbmUgPSAxJ2IwOworCSAgIG5leHRfbWdtdF9zdCA9IChtZ210X2FjaykgPyBgTUdNX01PREVfV1QgOiBgTUdNX01PREVfUkVHOworCWVuZCAvLyBjYXNlOiBgTUdNX01PREVfUkVHCisJCisJYE1HTV9NT0RFX1dUIDogYmVnaW4JICAgLy8gV2FpdCBmb3IgdE1SRAorCSAgIG1nbXRfaWRsZSA9IDEnYjA7CisJICAgbWdtdF9yZXEgPSAxJ2IxOworCSAgIG1nbXRfY21kID0gYFNEUl9ERVNFTDsKKwkgICBtZ210X2JhID0gMidieDsKKwkgICBtZ210X2FkZHIgPSAxMydieDsKKwkgICBsZF90bXIwID0gMSdiMDsKKwkgICB0bXIwX2QgPSA0J2g3OworCSAgIGRlY19jbnRyMSA9IDEnYjA7CisJICAgbGRfY250cjEgPSAxJ2IwOworCSAgIGNudHIxX2QgPSA0J2g3OworCSAgIHNldF9zZHJfaW5pdF9kb25lID0gMSdiMDsKKwkgICBuZXh0X21nbXRfc3QgPSAofnRtcjBfdGMpID8gYE1HTV9NT0RFX1dUIDogYE1HTV9BQ1RJVkU7CisJZW5kIC8vIGNhc2U6IGBNR01fTU9ERV9XVAorCQorCWBNR01fQUNUSVZFIDogYmVnaW4JICAgLy8gV2FpdCBmb3IgcmVmX3JlcQorCSAgIG1nbXRfaWRsZSA9IH5yZWZfcmVxOworCSAgIG1nbXRfcmVxID0gMSdiMDsKKwkgICBtZ210X2NtZCA9IGBTRFJfREVTRUw7CisJICAgbWdtdF9iYSA9IDInYng7CisJICAgbWdtdF9hZGRyID0gMTMnYng7CisJICAgbGRfdG1yMCA9IDEnYjA7CisJICAgdG1yMF9kID0gNCdoNzsKKwkgICBkZWNfY250cjEgPSAxJ2IwOworCSAgIGxkX2NudHIxID0gcmVmX3JlcTsKKwkgICBjbnRyMV9kID0gcmZzaF9yb3dfY250OworCSAgIHNldF9zZHJfaW5pdF9kb25lID0gMSdiMTsKKwkgICBuZXh0X21nbXRfc3QgPSAgKH5zZHJhbV9lbmFibGUpID8gYE1HTV9QT1dFUlVQIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWZfcmVxKSA/IGBNR01fUFJFQ0hBUkdFIDogYE1HTV9BQ1RJVkU7CisJZW5kIC8vIGNhc2U6IGBNR01fTU9ERV9XVAorCQorICAgICAgZW5kY2FzZSAvLyBjYXNlKG1nbXRfc3QpCisKKyAgIGVuZCAvLyBhbHdheXMgQCAobWdtdF9zdCBvciAuLi4uKQorICAgCisJICAgCisKK2VuZG1vZHVsZSAvLyBzZHJfeGZyX2N0bApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcy9zZHJjX2RlZmluZS52IGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcy9zZHJjX2RlZmluZS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwYzEwZGEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzL3NkcmNfZGVmaW5lLnYKQEAgLTAsMCArMSwzMSBAQAorCitgZGVmaW5lIFNEUl9SRVFfSURfVyAgICAgICA0CisKK2BkZWZpbmUgU0RSX1JGU0hfVElNRVJfVyAgICAxMgorYGRlZmluZSBTRFJfUkZTSF9ST1dfQ05UX1cgICAzCisKKy8vIEIyWCBDb21tYW5kCisKK2BkZWZpbmUgT1BfUFJFICAgICAgICAgICAyJ2IwMAorYGRlZmluZSBPUF9BQ1QgICAgICAgICAgIDInYjAxCitgZGVmaW5lIE9QX1JEICAgICAgICAgICAgMidiMTAKK2BkZWZpbmUgT1BfV1IgICAgICAgICAgICAyJ2IxMQorCisvLyBTRFJBTSBDb21tYW5kcyAoQ1NfTiwgUkFTX04sIENBU19OLCBXRV9OKQorCitgZGVmaW5lIFNEUl9ERVNFTCAgICAgICAgNCdiMTExMQorYGRlZmluZSBTRFJfTk9PUCAgICAgICAgIDQnYjAxMTEKK2BkZWZpbmUgU0RSX0FDVElWQVRFICAgICA0J2IwMDExCitgZGVmaW5lIFNEUl9SRUFEICAgICAgICAgNCdiMDEwMQorYGRlZmluZSBTRFJfV1JJVEUgICAgICAgIDQnYjAxMDAKK2BkZWZpbmUgU0RSX0JUICAgICAgICAgICA0J2IwMTEwCitgZGVmaW5lIFNEUl9QUkVDSEFSR0UgICAgNCdiMDAxMAorYGRlZmluZSBTRFJfUkVGUkVTSCAgICAgIDQnYjAwMDEKK2BkZWZpbmUgU0RSX01PREUgICAgICAgICA0J2IwMDAwCisKK2BkZWZpbmUgIEFTSUMgICAgICAgICAgICAxJ2IxCitgZGVmaW5lICBGUEdBICAgICAgICAgICAgMSdiMAorYGRlZmluZSAgVEFSR0VUX0RFU0lHTiAgIGBGUEdBCisvLyAxMiBiaXQgc3VidHJhY3RvciBpcyBub3QgZmVhc2liaWxlIGZvciBGUEdBLCBzbyBjaGFuZ2VkIHRvIDYgYml0cworYGRlZmluZSAgUkVRX0JXICAgIChgVEFSR0VUX0RFU0lHTiA9PSBgRlBHQSkgPyA2IDogMTIgICAvLyAgUmVxdWVzdCBXaWR0aAorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9maWxlbGlzdF9ydGwuZiBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2ZpbGVsaXN0X3J0bC5mCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY0NWViOWIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9maWxlbGlzdF9ydGwuZgpAQCAtMCwwICsxLDkgQEAKKy4vdG9wL3NkcmNfdG9wLnYgCisuL3diMnNkcmMvd2Iyc2RyYy52IAorLi4vLi4vbGliL2FzeW5jX2ZpZm8uc3YgIAorLi9jb3JlL3NkcmNfY29yZS52IAorLi9jb3JlL3NkcmNfYmFua19jdGwudiAKKy4vY29yZS9zZHJjX2JhbmtfZnNtLnYgCisuL2NvcmUvc2RyY19ic19jb252ZXJ0LnYgCisuL2NvcmUvc2RyY19yZXFfZ2VuLnYgCisuL2NvcmUvc2RyY194ZnJfY3RsLnYgCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9ydW5fbW9kZWxzaW0gYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9ydW5fbW9kZWxzaW0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzUzYTIwYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL3J1bl9tb2RlbHNpbQpAQCAtMCwwICsxLDIgQEAKK3ZsaWIgd29yawordmxvZyAtZiBmaWxlbGlzdF9ydGwuZiAraW5jZGlyKy4vZGVmcwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvdG9wL3NkcmNfdG9wLnYgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy90b3Avc2RyY190b3AudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNzdmNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvdG9wL3NkcmNfdG9wLnYKQEAgLTAsMCArMSwyOTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFNEUkFNIENvbnRyb2xsZXIgdG9wIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKKyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEZXNjcmlwdGlvbjogU0RSQU0gQ29udHJvbGxlciBUb3AgTW9kdWxlLgorICAgIFN1cHBvcnQgODEvNi8zMiBCaXQgU0RSQU0uCisgICAgQ29sdW1uIEFkZHJlc3MgaXMgUHJvZ3JhbW1hYmxlCisgICAgQmFuayBCaXQgYXJlIDIgQml0CisgICAgUm93IEJpdHMgYXJlIDEyIEJpdHMKKworICAgIFRoaXMgYmxvY2sgaW50ZWdyYXRlIGZvbGxvd2luZyBzdWIgbW9kdWxlcworCisgICAgc2RyY19jb3JlICAgCisgICAgICAgIFNEUkFNIENvbnRyb2xsZXIgZmlsZQorICAgIHdiMnNkcmMgICAgCisgICAgICAgIFRoaXMgbW9kdWxlIHRyYW5zYWxhdGUgdGhlIGJ1cyBwcm90b2NsIGZyb20gd2lzaGJvbmUgdG8gY3VzdG9tZQorCXNkcmFtIGNvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgCisgIFZlcnNpb24gIDogMC4wIC0gOHRoIEphbiAyMDEyCisgICAgICAgICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uIHdpdGggMTYvMzIgQml0IFNEUkFNIFN1cHBvcnQKKyAgICAgICAgICAgOiAwLjEgLSAyNHRoIEphbiAyMDEyCisJICAgICAgICAgOCBCaXQgU0RSQU0gU3VwcG9ydCBpcyBhZGRlZAorCSAgICAgMC4yIC0gMzFzdCBKYW4gMjAxMgorCSAgICAgICAgIHNkcmFtX2RxIGFuZCBzZHJhbV9wYWRfY2xrIGFyZSBpbnRlcm5hbGx5IGdlbmVyYXRlZAorCSAgICAgMC4zIC0gMjZ0aCBBcHJpbCAyMDEzCisgICAgICAgICAgICAgICAgICBTZHJhbSBBZGRyZXNzIHdpdGRoIGlzIGluY3JlYXNlZCBmcm9tIDEyIHRvIDEzYml0cworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIAorIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAKKyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgCisgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgCisgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIAorIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAKKyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgCitsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAKKyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgCisgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIAorIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKKyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAKKyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgCisgZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworYGluY2x1ZGUgInNkcmNfZGVmaW5lLnYiCittb2R1bGUgc2RyY190b3AgCisgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl93aWR0aCAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIGNmZ19jb2xiaXRzICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBXQiBidXMKKyAgICAgICAgICAgICAgICAgICAgd2JfcnN0X2kgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHdiX2Nsa19pICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgd2Jfc3RiX2kgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHdiX2Fja19vICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB3Yl9hZGRyX2kgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgd2Jfd2VfaSAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHdiX2RhdF9pICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB3Yl9zZWxfaSAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgd2JfZGF0X28gICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHdiX2N5Y19pICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB3Yl9jdGlfaSAgICAgICAgICAgICwgCisKKwkJCisJCS8qIEludGVyZmFjZSB0byBTRFJBTXMgKi8KKyAgICAgICAgICAgICAgICAgICAgc2RyYW1fY2xrICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHNkcmFtX3Jlc2V0biAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBzZHJfY3NfbiAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgc2RyX2NrZSAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHNkcl9yYXNfbiAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBzZHJfY2FzX24gICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgc2RyX3dlX24gICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHNkcl9kcW0gICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBzZHJfYmEgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgc2RyX2FkZHIgICAgICAgICAgICAsIAorICAgICAgICAgICAgICAgICAgICBzZHJfZHEgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgCisJCS8qIFBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgc2RyX2luaXRfZG9uZSAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIGNmZ19yZXFfZGVwdGggICAgICAgLAkgICAgICAgIC8vaG93IG1hbnkgcmVxLiBidWZmZXIgc2hvdWxkIGhvbGQKKyAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl9lbiAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfbW9kZV9yZWcgICAgLAorICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3RyYXNfZCAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl90cnBfZCAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfdHJjZF9kICAgICAgLAorICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX2NhcyAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl90cmNhcl9kICAgICAsCisgICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfdHdyX2QgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3Jmc2ggICAgICAgICwKKwkgICAgICAgICAgICBjZmdfc2RyX3JmbWF4CisJICAgICk7CisgIAorcGFyYW1ldGVyICAgICAgQVBQX0FXICAgPSAyNjsgIC8vIEFwcGxpY2F0aW9uIEFkZHJlc3MgV2lkdGgKK3BhcmFtZXRlciAgICAgIEFQUF9EVyAgID0gMzI7ICAvLyBBcHBsaWNhdGlvbiBEYXRhIFdpZHRoIAorcGFyYW1ldGVyICAgICAgQVBQX0JXICAgPSA0OyAgIC8vIEFwcGxpY2F0aW9uIEJ5dGUgV2lkdGgKK3BhcmFtZXRlciAgICAgIEFQUF9SVyAgID0gOTsgICAvLyBBcHBsaWNhdGlvbiBSZXF1ZXN0IFdpZHRoCisKK3BhcmFtZXRlciAgICAgIFNEUl9EVyAgID0gMTY7ICAvLyBTRFIgRGF0YSBXaWR0aCAKK3BhcmFtZXRlciAgICAgIFNEUl9CVyAgID0gMjsgICAvLyBTRFIgQnl0ZSBXaWR0aAorICAgICAgICAgICAgIAorcGFyYW1ldGVyICAgICAgZHcgICAgICAgPSAzMjsgIC8vIGRhdGEgd2lkdGgKK3BhcmFtZXRlciAgICAgIHR3ICAgICAgID0gODsgICAvLyB0YWcgaWQgd2lkdGgKK3BhcmFtZXRlciAgICAgIGJsICAgICAgID0gOTsgICAvLyBidXJzdF9sZW5naHRfd2lkdGggCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdsb2JhbCBWYXJpYWJsZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5wdXQgICAgICAgICAgICAgICAgICAgc2RyYW1fY2xrICAgICAgICAgIDsgLy8gU0RSQU0gQ2xvY2sgCitpbnB1dCAgICAgICAgICAgICAgICAgICBzZHJhbV9yZXNldG4gICAgICAgOyAvLyBSZXNldCBTaWduYWwKK2lucHV0IFsxOjBdICAgICAgICAgICAgIGNmZ19zZHJfd2lkdGggICAgICA7IC8vIDInYjAwIC0gMzIgQml0IFNEUiwgMidiMDEgLSAxNiBCaXQgU0RSLCAyJ2IxeCAtIDggQml0CitpbnB1dCBbMTowXSAgICAgICAgICAgICBjZmdfY29sYml0cyAgICAgICAgOyAvLyAyJ2IwMCAtIDggQml0IGNvbHVtbiBhZGRyZXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDInYjAxIC0gOSBCaXQsIDEwIC0gMTAgYml0LCAxMSAtIDExQml0cworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXaXNoIEJvbmUgSW50ZXJmYWNlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgCitpbnB1dCAgICAgICAgICAgICAgICAgICB3Yl9yc3RfaSAgICAgICAgICAgOworaW5wdXQgICAgICAgICAgICAgICAgICAgd2JfY2xrX2kgICAgICAgICAgIDsKKworaW5wdXQgICAgICAgICAgICAgICAgICAgd2Jfc3RiX2kgICAgICAgICAgIDsKK291dHB1dCAgICAgICAgICAgICAgICAgIHdiX2Fja19vICAgICAgICAgICA7CitpbnB1dCBbQVBQX0FXLTE6MF0gICAgICAgICAgICB3Yl9hZGRyX2kgICAgICAgICAgOworaW5wdXQgICAgICAgICAgICAgICAgICAgd2Jfd2VfaSAgICAgICAgICAgIDsgLy8gMSAtIFdyaXRlLCAwIC0gUmVhZAoraW5wdXQgW2R3LTE6MF0gICAgICAgICAgd2JfZGF0X2kgICAgICAgICAgIDsKK2lucHV0IFtkdy84LTE6MF0gICAgICAgIHdiX3NlbF9pICAgICAgICAgICA7IC8vIEJ5dGUgZW5hYmxlCitvdXRwdXQgW2R3LTE6MF0gICAgICAgICB3Yl9kYXRfbyAgICAgICAgICAgOworaW5wdXQgICAgICAgICAgICAgICAgICAgd2JfY3ljX2kgICAgICAgICAgIDsKK2lucHV0ICBbMjowXSAgICAgICAgICAgIHdiX2N0aV9pICAgICAgICAgICA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcmZhY2UgdG8gU0RSQU1zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0ICAgICAgICAgICAgICAgICAgc2RyX2NrZSAgICAgICAgICAgICA7IC8vIFNEUkFNIENLRQorb3V0cHV0IAkJCXNkcl9jc19uICAgICAgICAgICAgOyAvLyBTRFJBTSBDaGlwIFNlbGVjdAorb3V0cHV0ICAgICAgICAgICAgICAgICAgc2RyX3Jhc19uICAgICAgICAgICA7IC8vIFNEUkFNIHJhcworb3V0cHV0ICAgICAgICAgICAgICAgICAgc2RyX2Nhc19uICAgICAgICAgICA7IC8vIFNEUkFNIGNhcworb3V0cHV0CQkJc2RyX3dlX24gICAgICAgICAgICA7IC8vIFNEUkFNIHdyaXRlIGVuYWJsZQorb3V0cHV0IFtTRFJfQlctMTowXSAJc2RyX2RxbSAgICAgICAgICAgICA7IC8vIFNEUkFNIERhdGEgTWFzaworb3V0cHV0IFsxOjBdIAkJc2RyX2JhICAgICAgICAgICAgICA7IC8vIFNEUkFNIEJhbmsgRW5hYmxlCitvdXRwdXQgWzEyOjBdIAkJc2RyX2FkZHIgICAgICAgICAgICA7IC8vIFNEUkFNIEFkZHJlc3MKK2lub3V0IFtTRFJfRFctMTowXSAJc2RyX2RxICAgICAgICAgICAgICA7IC8vIFNEUkEgRGF0YSBJbnB1dC9vdXRwdXQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0ICAgICAgICAgICAgICAgICAgc2RyX2luaXRfZG9uZSAgICAgICA7IC8vIEluZGljYXRlIFNEUkFNIEluaXRpYWxpc2F0aW9uIERvbmUKK2lucHV0IFszOjBdIAkJY2ZnX3Nkcl90cmFzX2QgICAgICA7IC8vIEFjdGl2ZSB0byBwcmVjaGFyZ2UgZGVsYXkKK2lucHV0IFszOjBdICAgICAgICAgICAgIGNmZ19zZHJfdHJwX2QgICAgICAgOyAvLyBQcmVjaGFyZ2UgdG8gYWN0aXZlIGRlbGF5CitpbnB1dCBbMzowXSAgICAgICAgICAgICBjZmdfc2RyX3RyY2RfZCAgICAgIDsgLy8gQWN0aXZlIHRvIFIvVyBkZWxheQoraW5wdXQgCQkJY2ZnX3Nkcl9lbiAgICAgICAgICA7IC8vIEVuYWJsZSBTRFJBTSBjb250cm9sbGVyCitpbnB1dCBbMTowXSAJCWNmZ19yZXFfZGVwdGggICAgICAgOyAvLyBNYXhpbXVtIFJlcXVlc3QgYWNjZXB0ZWQgYnkgU0RSQU0gY29udHJvbGxlcgoraW5wdXQgWzEyOjBdIAkJY2ZnX3Nkcl9tb2RlX3JlZyAgICA7CitpbnB1dCBbMjowXSAJCWNmZ19zZHJfY2FzICAgICAgICAgOyAvLyBTRFJBTSBDQVMgTGF0ZW5jeQoraW5wdXQgWzM6MF0gCQljZmdfc2RyX3RyY2FyX2QgICAgIDsgLy8gQXV0by1yZWZyZXNoIHBlcmlvZAoraW5wdXQgWzM6MF0gICAgICAgICAgICAgY2ZnX3Nkcl90d3JfZCAgICAgICA7IC8vIFdyaXRlIHJlY292ZXJ5IGRlbGF5CitpbnB1dCBbYFNEUl9SRlNIX1RJTUVSX1ctMSA6IDBdIGNmZ19zZHJfcmZzaDsKK2lucHV0IFtgU0RSX1JGU0hfUk9XX0NOVF9XIC0xIDogMF0gY2ZnX3Nkcl9yZm1heDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU0RSQU0gY29udHJvbGxlciBJbnRlcmZhY2UgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgYXBwX3JlcSAgICAgICAgICAgIDsgLy8gU0RSQU0gcmVxdWVzdAord2lyZSBbQVBQX0FXLTE6MF0gICAgIGFwcF9yZXFfYWRkciAgICAgICA7IC8vIFNEUkFNIFJlcXVlc3QgQWRkcmVzcword2lyZSBbYmwtMTowXSAgICAgICAgIGFwcF9yZXFfbGVuICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgYXBwX3JlcV93cl9uICAgICAgIDsgLy8gMCAtIFdyaXRlLCAxIC0+IFJlYWQKK3dpcmUgICAgICAgICAgICAgICAgICBhcHBfcmVxX2FjayAgICAgICAgOyAvLyBTRFJBTSByZXF1ZXN0IEFjY2VwdGVkCit3aXJlICAgICAgICAgICAgICAgICAgYXBwX2J1c3lfbiAgICAgICAgIDsgLy8gMCAtPiBzZHIgYnVzeQord2lyZSBbZHcvOC0xOjBdICAgICAgIGFwcF93cl9lbl9uICAgICAgICA7IC8vIEFjdGl2ZSBsb3cgc2RyIGJ5dGUtd2lzZSB3cml0ZSBkYXRhIHZhbGlkCit3aXJlICAgICAgICAgICAgICAgICAgYXBwX3dyX25leHRfcmVxICAgIDsgLy8gUmVhZHkgdG8gYWNjZXB0IHRoZSBuZXh0IHdyaXRlCit3aXJlICAgICAgICAgICAgICAgICAgYXBwX3JkX3ZhbGlkICAgICAgIDsgLy8gc2RyIHJlYWQgdmFsaWQKK3dpcmUgICAgICAgICAgICAgICAgICBhcHBfbGFzdF9yZCAgICAgICAgOyAvLyBJbmRpY2F0ZSBsYXN0IFJlYWQgb2YgQnVyc3QgVHJhbnNmZXIKK3dpcmUgICAgICAgICAgICAgICAgICBhcHBfbGFzdF93ciAgICAgICAgOyAvLyBJbmRpY2F0ZSBsYXN0IFdyaXRlIG9mIEJ1cnN0IFRyYW5zZmVyCit3aXJlIFtkdy0xOjBdICAgICAgICAgYXBwX3dyX2RhdGEgICAgICAgIDsgLy8gc2RyIHdyaXRlIGRhdGEKK3dpcmUgIFtkdy0xOjBdICAgICAgICBhcHBfcmRfZGF0YSAgICAgICAgOyAvLyBzZHIgcmVhZCBkYXRhCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUaGVzZSBsb2dpYyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgdXNpbmcgUGFkcworKiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit3aXJlICBbU0RSX0RXLTE6MF0gICAgcGFkX3Nkcl9kaW4gICAgICAgICA7IC8vIFNEUkEgRGF0YSBJbnB1dAord2lyZSAgW1NEUl9EVy0xOjBdICAgIHNkcl9kb3V0ICAgICAgICAgICAgOyAvLyBTRFJBTSBEYXRhIE91dHB1dAord2lyZSAgW1NEUl9CVy0xOjBdICAgIHNkcl9kZW5fbiAgICAgICAgICAgOyAvLyBTRFJBTSBEYXRhIE91dHB1dCBlbmFibGUKKworCithc3NpZ24gICBzZHJfZHEgPSAoJnNkcl9kZW5fbiA9PSAxJ2IwKSA/IHNkcl9kb3V0IDogIHtTRFJfRFd7MSdien19OyAKK2Fzc2lnbiAgIHBhZF9zZHJfZGluID0gc2RyX2RxOworCisvLyBzZHJhbSBwYWQgY2xvY2sgaXMgcm91dGVkIGJhY2sgdGhyb3VnaCBwYWQKKy8vIFNEUkFNIENsb2NrIGZyb20gUGFkLCB1c2VkIGZvciByZWdpc3RlcmluZyBSZWFkIERhdGEKK3dpcmUgIygxLjApIHNkcmFtX3BhZF9jbGsgPSBzZHJhbV9jbGs7CisKKy8qKioqKioqKioqKioqKiBFbmRzIEhlcmUgKioqKioqKioqKioqKioqKioqKioqKioqKiovCit3YjJzZHJjICMoLmR3KGR3KSwudHcodHcpLC5ibChibCkpIHVfd2Iyc2RyYyAoCisgICAgICAvLyBXQiBidXMKKyAgICAgICAgICAud2JfcnN0X2kgICAgICAgICAgICh3Yl9yc3RfaSAgICAgICAgICAgKSAsCisgICAgICAgICAgLndiX2Nsa19pICAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICkgLAorCisgICAgICAgICAgLndiX3N0Yl9pICAgICAgICAgICAod2Jfc3RiX2kgICAgICAgICAgICkgLAorICAgICAgICAgIC53Yl9hY2tfbyAgICAgICAgICAgKHdiX2Fja19vICAgICAgICAgICApICwKKyAgICAgICAgICAud2JfYWRkcl9pICAgICAgICAgICh3Yl9hZGRyX2kgICAgICAgICAgKSAsCisgICAgICAgICAgLndiX3dlX2kgICAgICAgICAgICAod2Jfd2VfaSAgICAgICAgICAgICkgLAorICAgICAgICAgIC53Yl9kYXRfaSAgICAgICAgICAgKHdiX2RhdF9pICAgICAgICAgICApICwKKyAgICAgICAgICAud2Jfc2VsX2kgICAgICAgICAgICh3Yl9zZWxfaSAgICAgICAgICAgKSAsCisgICAgICAgICAgLndiX2RhdF9vICAgICAgICAgICAod2JfZGF0X28gICAgICAgICAgICkgLAorICAgICAgICAgIC53Yl9jeWNfaSAgICAgICAgICAgKHdiX2N5Y19pICAgICAgICAgICApICwKKyAgICAgICAgICAud2JfY3RpX2kgICAgICAgICAgICh3Yl9jdGlfaSAgICAgICAgICAgKSAsIAorCisKKyAgICAgIC8vU0RSQU0gQ29udHJvbGxlciBIYW5kLVNoYWtlIFNpZ25hbCAKKyAgICAgICAgICAuc2RyYW1fY2xrICAgICAgICAgIChzZHJhbV9jbGsgICAgICAgICAgKSAsCisgICAgICAgICAgLnNkcmFtX3Jlc2V0biAgICAgICAoc2RyYW1fcmVzZXRuICAgICAgICkgLAorICAgICAgICAgIC5zZHJfcmVxICAgICAgICAgICAgKGFwcF9yZXEgICAgICAgICAgICApICwKKyAgICAgICAgICAuc2RyX3JlcV9hZGRyICAgICAgIChhcHBfcmVxX2FkZHIgICAgICAgKSAsCisgICAgICAgICAgLnNkcl9yZXFfbGVuICAgICAgICAoYXBwX3JlcV9sZW4gICAgICAgICkgLAorICAgICAgICAgIC5zZHJfcmVxX3dyX24gICAgICAgKGFwcF9yZXFfd3JfbiAgICAgICApICwKKyAgICAgICAgICAuc2RyX3JlcV9hY2sgICAgICAgIChhcHBfcmVxX2FjayAgICAgICAgKSAsCisgICAgICAgICAgLnNkcl9idXN5X24gICAgICAgICAoYXBwX2J1c3lfbiAgICAgICAgICkgLAorICAgICAgICAgIC5zZHJfd3JfZW5fbiAgICAgICAgKGFwcF93cl9lbl9uICAgICAgICApICwKKyAgICAgICAgICAuc2RyX3dyX25leHQgICAgICAgIChhcHBfd3JfbmV4dF9yZXEgICAgKSAsCisgICAgICAgICAgLnNkcl9yZF92YWxpZCAgICAgICAoYXBwX3JkX3ZhbGlkICAgICAgICkgLAorICAgICAgICAgIC5zZHJfbGFzdF9yZCAgICAgICAgKGFwcF9sYXN0X3JkICAgICAgICApICwKKyAgICAgICAgICAuc2RyX3dyX2RhdGEgICAgICAgIChhcHBfd3JfZGF0YSAgICAgICAgKSAsCisgICAgICAgICAgLnNkcl9yZF9kYXRhICAgICAgICAoYXBwX3JkX2RhdGEgICAgICAgICkgCisKKyAgICAgICk7IAorCisKK3NkcmNfY29yZSAjKC5TRFJfRFcoU0RSX0RXKSAsIC5TRFJfQlcoU0RSX0JXKSkgdV9zZHJjX2NvcmUgKAorICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHNkcmFtX2NsayAgICAgICAgICApICwKKyAgICAgICAgICAucGFkX2NsayAgICAgICAgICAgIChzZHJhbV9wYWRfY2xrICAgICAgKSAsCisgICAgICAgICAgLnJlc2V0X24gICAgICAgICAgICAoc2RyYW1fcmVzZXRuICAgICAgICkgLAorICAgICAgICAgIC5zZHJfd2lkdGggICAgICAgICAgKGNmZ19zZHJfd2lkdGggICAgICApICwKKyAgICAgICAgICAuY2ZnX2NvbGJpdHMgICAgICAgIChjZmdfY29sYml0cyAgICAgICAgKSAsCisKKyAJCS8qIFJlcXVlc3QgZnJvbSBhcHAgKi8KKyAgICAgICAgICAuYXBwX3JlcSAgICAgICAgICAgIChhcHBfcmVxICAgICAgICAgICAgKSAsLy8gVHJhbnNmZXIgUmVxdWVzdAorICAgICAgICAgIC5hcHBfcmVxX2FkZHIgICAgICAgKGFwcF9yZXFfYWRkciAgICAgICApICwvLyBTRFJBTSBBZGRyZXNzCisgICAgICAgICAgLmFwcF9yZXFfbGVuICAgICAgICAoYXBwX3JlcV9sZW4gICAgICAgICkgLC8vIEJ1cnN0IExlbmd0aCAoaW4gMTYgYml0IHdvcmRzKQorICAgICAgICAgIC5hcHBfcmVxX3dyYXAgICAgICAgKDEnYjAgICAgICAgICAgICAgICApICwvLyBXcmFwIG1vZGUgcmVxdWVzdCAKKyAgICAgICAgICAuYXBwX3JlcV93cl9uICAgICAgIChhcHBfcmVxX3dyX24gICAgICAgKSAsLy8gMCA9PiBXcml0ZSByZXF1ZXN0LCAxID0+IHJlYWQgcmVxCisgICAgICAgICAgLmFwcF9yZXFfYWNrICAgICAgICAoYXBwX3JlcV9hY2sgICAgICAgICkgLC8vIFJlcXVlc3QgaGFzIGJlZW4gYWNjZXB0ZWQKKyAgICAgICAgICAuY2ZnX3JlcV9kZXB0aCAgICAgIChjZmdfcmVxX2RlcHRoICAgICAgKSAsLy9ob3cgbWFueSByZXEuIGJ1ZmZlciBzaG91bGQgaG9sZAorIAkJCisgICAgICAgICAgLmFwcF93cl9kYXRhICAgICAgICAoYXBwX3dyX2RhdGEgICAgICAgICkgLAorICAgICAgICAgIC5hcHBfd3JfZW5fbiAgICAgICAgKGFwcF93cl9lbl9uICAgICAgICApICwKKyAgICAgICAgICAuYXBwX3JkX2RhdGEgICAgICAgIChhcHBfcmRfZGF0YSAgICAgICAgKSAsCisgICAgICAgICAgLmFwcF9yZF92YWxpZCAgICAgICAoYXBwX3JkX3ZhbGlkICAgICAgICkgLAorCSAgLmFwcF9sYXN0X3JkICAgICAgICAoYXBwX2xhc3RfcmQgICAgICAgICkgLAorICAgICAgICAgIC5hcHBfbGFzdF93ciAgICAgICAgKGFwcF9sYXN0X3dyICAgICAgICApICwKKyAgICAgICAgICAuYXBwX3dyX25leHRfcmVxICAgIChhcHBfd3JfbmV4dF9yZXEgICAgKSAsCisgICAgICAgICAgLnNkcl9pbml0X2RvbmUgICAgICAoc2RyX2luaXRfZG9uZSAgICAgICkgLAorICAgICAgICAgIC5hcHBfcmVxX2RtYV9sYXN0ICAgKGFwcF9yZXEgICAgICAgICAgICApICwKKyAKKyAJCS8qIEludGVyZmFjZSB0byBTRFJBTXMgKi8KKyAgICAgICAgICAuc2RyX2NzX24gICAgICAgICAgIChzZHJfY3NfbiAgICAgICAgICAgKSAsCisgICAgICAgICAgLnNkcl9ja2UgICAgICAgICAgICAoc2RyX2NrZSAgICAgICAgICAgICkgLAorICAgICAgICAgIC5zZHJfcmFzX24gICAgICAgICAgKHNkcl9yYXNfbiAgICAgICAgICApICwKKyAgICAgICAgICAuc2RyX2Nhc19uICAgICAgICAgIChzZHJfY2FzX24gICAgICAgICAgKSAsCisgICAgICAgICAgLnNkcl93ZV9uICAgICAgICAgICAoc2RyX3dlX24gICAgICAgICAgICkgLAorICAgICAgICAgIC5zZHJfZHFtICAgICAgICAgICAgKHNkcl9kcW0gICAgICAgICAgICApICwKKyAgICAgICAgICAuc2RyX2JhICAgICAgICAgICAgIChzZHJfYmEgICAgICAgICAgICAgKSAsCisgICAgICAgICAgLnNkcl9hZGRyICAgICAgICAgICAoc2RyX2FkZHIgICAgICAgICAgICkgLCAKKyAgICAgICAgICAucGFkX3Nkcl9kaW4gICAgICAgIChwYWRfc2RyX2RpbiAgICAgICAgKSAsCisgICAgICAgICAgLnNkcl9kb3V0ICAgICAgICAgICAoc2RyX2RvdXQgICAgICAgICAgICkgLAorICAgICAgICAgIC5zZHJfZGVuX24gICAgICAgICAgKHNkcl9kZW5fbiAgICAgICAgICApICwKKyAKKyAJCS8qIFBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAuY2ZnX3Nkcl9lbiAgICAgICAgIChjZmdfc2RyX2VuICAgICAgICAgKSAsCisgICAgICAgICAgLmNmZ19zZHJfbW9kZV9yZWcgICAoY2ZnX3Nkcl9tb2RlX3JlZyAgICkgLAorICAgICAgICAgIC5jZmdfc2RyX3RyYXNfZCAgICAgKGNmZ19zZHJfdHJhc19kICAgICApICwKKyAgICAgICAgICAuY2ZnX3Nkcl90cnBfZCAgICAgIChjZmdfc2RyX3RycF9kICAgICAgKSAsCisgICAgICAgICAgLmNmZ19zZHJfdHJjZF9kICAgICAoY2ZnX3Nkcl90cmNkX2QgICAgICkgLAorICAgICAgICAgIC5jZmdfc2RyX2NhcyAgICAgICAgKGNmZ19zZHJfY2FzICAgICAgICApICwKKyAgICAgICAgICAuY2ZnX3Nkcl90cmNhcl9kICAgIChjZmdfc2RyX3RyY2FyX2QgICAgKSAsCisgICAgICAgICAgLmNmZ19zZHJfdHdyX2QgICAgICAoY2ZnX3Nkcl90d3JfZCAgICAgICkgLAorICAgICAgICAgIC5jZmdfc2RyX3Jmc2ggICAgICAgKGNmZ19zZHJfcmZzaCAgICAgICApICwKKyAgICAgICAgICAuY2ZnX3Nkcl9yZm1heCAgICAgIChjZmdfc2RyX3JmbWF4ICAgICAgKSAKKwkgICAgICAgKTsKKyAgIAorZW5kbW9kdWxlIC8vIHNkcmNfY29yZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvd2Iyc2RyYy93YjJzZHJjLnYgYi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy93YjJzZHJjL3diMnNkcmMudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNTg1NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvd2Iyc2RyYy93YjJzZHJjLnYKQEAgLTAsMCArMSwzNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QgICAgICAgICAgIAorICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvc2RyX2N0cmwvICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIERlc2NyaXB0aW9uOiBXSVNIQk9ORSB0byBTRFJBTSBDb250cm9sbGVyIEJ1cyBUcmFuc2FsYXRvcgorICAgICAxLiBUaGlzIG1vZHVsZSB0cmFuc2xhdGUgdGhlIFdJU0hCT05FIHByb3RvY29sIHRvIGN1c3RvbSBzZHJhbSBjb250cm9sbGVyIGkvZiAKKyAgICAgMi4gQWxzbyBIYW5kbGUgdGhlIGNsb2NrIGRvbWFpbiBjaGFuZ2UgZnJvbSBBcHBsaWNhdGlvbiBsYXllciB0byBTZHJhbSBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgQXV0aG9yKHMpOiAgRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgCisgIFZlcnNpb24gIDogMC4wIC0gSW5pdGlhbCBSZWxlYXNlCisgICAgICAgICAgICAgMC4xIC0gMm5kIEZlYiAyMDEyCisJICAgICAgICAgICBBc3luYyBGaWZvIHRvd2FyZHMgdGhlIGFwcGxpY2F0aW9uIGxheWVyIGlzIHNlbGVjdGVkIAorCQkgICB3aXRoIFJlZ2lzdGVyZWQgRnVsbCBHZW5lcmF0aW9uCisgICAgICAgICAgICAgMC4yIC0gMm5kIEZlYiAyMDEyCisJICAgICAgICAgICBQZW5kaW5nIFJlYWQgZ2VuZXJhdGlvbiBidWcgZml4IGRvbmUgdG8gaGFuZGxlIGJhY2t0byBiYWNrIHdyaXRlIAorCQkgICBmb2xsb3dlZCBieSByZWFkIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK21vZHVsZSB3YjJzZHJjICgKKyAgICAgIC8vIFdCIGJ1cworICAgICAgICAgICAgICAgICAgICB3Yl9yc3RfaSAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2kgICAgICAgICAgICAsCisKKyAgICAgICAgICAgICAgICAgICAgd2Jfc3RiX2kgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHdiX2Fja19vICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB3Yl9hZGRyX2kgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgd2Jfd2VfaSAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHdiX2RhdF9pICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB3Yl9zZWxfaSAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgd2JfZGF0X28gICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHdiX2N5Y19pICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB3Yl9jdGlfaSAgICAgICAgICAgICwgCisKKworICAgICAgLy9TRFJBTSBDb250cm9sbGVyIEhhbmQtU2hha2UgU2lnbmFsIAorICAgICAgICAgICAgICAgICAgICBzZHJhbV9jbGsgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgc2RyYW1fcmVzZXRuICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHNkcl9yZXEgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBzZHJfcmVxX2FkZHIgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgc2RyX3JlcV9sZW4gICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHNkcl9yZXFfd3JfbiAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBzZHJfcmVxX2FjayAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgc2RyX2J1c3lfbiAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHNkcl93cl9lbl9uICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBzZHJfd3JfbmV4dCAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgc2RyX3JkX3ZhbGlkICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHNkcl9sYXN0X3JkICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICBzZHJfd3JfZGF0YSAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgc2RyX3JkX2RhdGEgICAgICAgIAorCisgICAgICApOyAKKworcGFyYW1ldGVyICAgICAgZHcgICAgICAgICAgICAgID0gMzI7ICAvLyBkYXRhIHdpZHRoCitwYXJhbWV0ZXIgICAgICB0dyAgICAgICAgICAgICAgPSA4OyAgIC8vIHRhZyBpZCB3aWR0aAorcGFyYW1ldGVyICAgICAgYmwgICAgICAgICAgICAgID0gOTsgICAvLyBidXJzdF9sZW5naHRfd2lkdGggCitwYXJhbWV0ZXIgICAgICBBUFBfQVcgICAgICAgICAgPSAyNjsgIC8vIEFwcGxpY2F0aW9uIEFkZHJlc3MgV2lkdGgKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdpc2ggQm9uZSBJbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAKK2lucHV0ICAgICAgICAgICAgICAgICAgIHdiX3JzdF9pICAgICAgICAgICA7CitpbnB1dCAgICAgICAgICAgICAgICAgICB3Yl9jbGtfaSAgICAgICAgICAgOworCitpbnB1dCAgICAgICAgICAgICAgICAgICB3Yl9zdGJfaSAgICAgICAgICAgOworb3V0cHV0ICAgICAgICAgICAgICAgICAgd2JfYWNrX28gICAgICAgICAgIDsKK2lucHV0IFtBUFBfQVctMTowXSAgICAgIHdiX2FkZHJfaSAgICAgICAgICA7CitpbnB1dCAgICAgICAgICAgICAgICAgICB3Yl93ZV9pICAgICAgICAgICAgOyAvLyAxIC0gV3JpdGUgLCAwIC0gUmVhZAoraW5wdXQgW2R3LTE6MF0gICAgICAgICAgd2JfZGF0X2kgICAgICAgICAgIDsKK2lucHV0IFtkdy84LTE6MF0gICAgICAgIHdiX3NlbF9pICAgICAgICAgICA7IC8vIEJ5dGUgZW5hYmxlCitvdXRwdXQgW2R3LTE6MF0gICAgICAgICB3Yl9kYXRfbyAgICAgICAgICAgOworaW5wdXQgICAgICAgICAgICAgICAgICAgd2JfY3ljX2kgICAgICAgICAgIDsKK2lucHV0ICBbMjowXSAgICAgICAgICAgIHdiX2N0aV9pICAgICAgICAgICA7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitUaGUgQ3ljbGUgVHlwZSBJZGVuZmllciBbQ1RJX0lPKCldIEFkZHJlc3MgVGFnIHByb3ZpZGVzIAorYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjeWNsZS4gCitUaGUgTUFTVEVSIHNlbmRzIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIFNMQVZFLiBUaGUgU0xBVkUgY2FuIHVzZSB0aGlzCitpbmZvcm1hdGlvbiB0byBwcmVwYXJlIHRoZSByZXNwb25zZSBmb3IgdGhlIG5leHQgY3ljbGUuCitUYWJsZSA0LTIgQ3ljbGUgVHlwZSBJZGVudGlmaWVycworQ1RJX08oMjowKSBEZXNjcmlwdGlvbgorkTAwMJIgQ2xhc3NpYyBjeWNsZS4KK5EwMDGSIENvbnN0YW50IGFkZHJlc3MgYnVyc3QgY3ljbGUKK5EwMTCSIEluY3JlbWVudGluZyBidXJzdCBjeWNsZQorkTAxMZIgUmVzZXJ2ZWQKK5ExMDCSIFJlc2VydmVkCiuRMTAxIFJlc2VydmVkCiuRMTEwkiBSZXNlcnZlZAorkTExMZIgRW5kLW9mLUJ1cnN0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU0RSQU0gY29udHJvbGxlciBJbnRlcmZhY2UgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnB1dCAgICAgICAgICAgICAgICAgICBzZHJhbV9jbGsgICAgICAgICAgOyAvLyBzZHJhbSBjbG9jaworaW5wdXQgICAgICAgICAgICAgICAgICAgc2RyYW1fcmVzZXRuICAgICAgIDsgLy8gc2RyYW0gcmVzZXQKK291dHB1dCAgICAgICAgICAgICAgICAgIHNkcl9yZXEgICAgICAgICAgICA7IC8vIFNEUkFNIHJlcXVlc3QKK291dHB1dCBbQVBQX0FXLTE6MF0gICAgICAgICAgIHNkcl9yZXFfYWRkciAgICAgICA7IC8vIFNEUkFNIFJlcXVlc3QgQWRkcmVzcworb3V0cHV0IFtibC0xOjBdICAgICAgICAgc2RyX3JlcV9sZW4gICAgICAgIDsKK291dHB1dCAgICAgICAgICAgICAgICAgIHNkcl9yZXFfd3JfbiAgICAgICA7IC8vIDAgLSBXcml0ZSwgMSAtPiBSZWFkCitpbnB1dCAgICAgICAgICAgICAgICAgICBzZHJfcmVxX2FjayAgICAgICAgOyAvLyBTRFJBTSByZXF1ZXN0IEFjY2VwdGVkCitpbnB1dCAgICAgICAgICAgICAgICAgICBzZHJfYnVzeV9uICAgICAgICAgOyAvLyAwIC0+IHNkciBidXN5CitvdXRwdXQgW2R3LzgtMTowXSAgICAgICBzZHJfd3JfZW5fbiAgICAgICAgOyAvLyBBY3RpdmUgbG93IHNkciBieXRlLXdpc2Ugd3JpdGUgZGF0YSB2YWxpZAoraW5wdXQgICAgICAgICAgICAgICAgICAgc2RyX3dyX25leHQgICAgICAgIDsgLy8gUmVhZHkgdG8gYWNjZXB0IHRoZSBuZXh0IHdyaXRlCitpbnB1dCAgICAgICAgICAgICAgICAgICBzZHJfcmRfdmFsaWQgICAgICAgOyAvLyBzZHIgcmVhZCB2YWxpZAoraW5wdXQgICAgICAgICAgICAgICAgICAgc2RyX2xhc3RfcmQgICAgICAgIDsgLy8gSW5kaWNhdGUgbGFzdCBSZWFkIG9mIEJ1cnN0IFRyYW5zZmVyCitvdXRwdXQgW2R3LTE6MF0gICAgICAgICBzZHJfd3JfZGF0YSAgICAgICAgOyAvLyBzZHIgd3JpdGUgZGF0YQoraW5wdXQgIFtkdy0xOjBdICAgICAgICAgc2RyX3JkX2RhdGEgICAgICAgIDsgLy8gc2RyIHJlYWQgZGF0YQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdpcmUgRGVjbGVyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgY21kZmlmb19mdWxsICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgIGNtZGZpZm9fZW1wdHkgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICB3cmRhdGFmaWZvX2Z1bGwgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgd3JkYXRhZmlmb19lbXB0eSAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgIHRhZ2ZpZm9fZnVsbCAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICB0YWdmaWZvX2VtcHR5ICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgcmRkYXRhZmlmb19lbXB0eSAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgIHJkZGF0YWZpZm9fZnVsbCAgICA7CisKK3JlZyAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfcmVhZCAgICAgICA7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWNrIEdlbmVyYWx0aW9uIExvZ2ljCisvLyAgSWYgV3JpdGUgUmVxdWVzdCAtIEFja25vd2xlZGdlIGlmIHRoZSBjb21tYW5kIGFuZCB3cml0ZSBGSUZPIGFyZSBub3QgZnVsbAorLy8gIElmIFJlYWQgUmVxdWVzdCAgLSBHZW5lcmF0ZSB0aGUgQWNrbm93bGVkZ21lbnQgb25jZSByZWFkIGZpZm8gaGFzIGRhdGEKKy8vICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fzc2lnbiB3Yl9hY2tfbyA9ICh3Yl9zdGJfaSAmJiB3Yl9jeWNfaSAmJiB3Yl93ZV9pKSA/ICAvLyBXcml0ZSBQaGFzZQorCSAgICAgICAgICAgICAgICAgICgoIWNtZGZpZm9fZnVsbCkgJiYgKCF3cmRhdGFmaWZvX2Z1bGwpKSA6CisJCSAgKHdiX3N0Yl9pICYmIHdiX2N5Y19pICYmICF3Yl93ZV9pKSA/IC8vIFJlYWQgUGhhc2UgCisJCSAgICAgICAgICAgIXJkZGF0YWZpZm9fZW1wdHkgOiAxJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29tbWFuZCBGSUZPIFdyaXRlIEdlbmVyYXRpb24KKy8vICAgIElmIFdyaXRlIFJlcXVlc3QgLSBHZW5lcmF0ZSB3cml0ZSwgd2hlbiBXcml0ZSBmaWZvIGFuZCBjb21tYW5kIGZpZm8gaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICBub3QgZnVsbAorLy8gICAgSWYgUmVhZCBSZXF1ZXN0IC0gR2VuZXJhdGUgd3JpdGUsIHdoZW4gY29tbWFuZCBmaWZvIG5vdCBmdWxsIGFuZCB0aGVyZQorLy8gICAgICAgICAgICAgICAgICAgICAgaXMgbm8gcGVuZGluZyByZWFkIHJlcXVlc3QuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgY21kZmlmb193ciAgID0gKHdiX3N0Yl9pICYmIHdiX2N5Y19pICYmIHdiX3dlX2kgJiYgKCFjbWRmaWZvX2Z1bGwpICkgPyB3Yl9hY2tfbyA6CisJICAgICAgICAgICAgICAgICAgICAgICh3Yl9zdGJfaSAmJiB3Yl9jeWNfaSAmJiAhd2Jfd2VfaSAmJiAoIWNtZGZpZm9fZnVsbCkpID8gIXBlbmRpbmdfcmVhZDogMSdiMCA7IAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gY29tbWFuZCBmaWZvIHJlYWQgZ2VuZXJhdGlvbgorLy8gICAgQ29tbWFuZCBGSUZvIHJlYWQgd2lsbCBiZSBnZW5lcmF0ZWQsIHdoZW5ldmVyIFNEUkFNIENvbnRyb2xsZXIKKy8vICAgIEFja25vd2xkZ2UgdGhlIFJlcXVlc3QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aXJlICAgICAgICAgICBjbWRmaWZvX3JkICAgPSBzZHJfcmVxX2FjazsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFwcGxpY2F0aW9uIGxheWVyIHJlcXVlc3QgaXMgZ2VuZXJhdGVkIHRvd2FyZHMgdGhlIGNvbnRyb2xsZXIsIHdoZW5ldmVyCisvLyBDb21tYW5kIEZJRk8gaXMgbm90IGZ1bGwKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gICAgICAgICBzZHJfcmVxICAgICAgPSAhY21kZmlmb19lbXB0eTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTaW5jZSBCdXJzdCBsZW5ndGggaXMgbm90IGtub3duIGF0IHRoZSBzdGFydCBvZiB0aGUgQnVyc3QsIEl0J3MgYXNzdW1lZCBhcworLy8gU2luZ2xlIEN5Y2xlIEJ1cnN0LiBXZSBuZWVkIHRvIGltcHJvdmlzZSB0aGlzIC4uLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgW2JsLTE6MF0gIGJ1cnN0X2xlbmd0aCAgPSAxOyAgLy8gMCBNZWFuIDEgVHJhbnNmZXIKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW4gV2lzaCBCb25lIFNwZWMsIEZvciBSZWFkIFJlcXVlc3QgaGFzIHRvIGJlIGFja2VkIGFsb25nIHdpdGggZGF0YS4KKy8vIFdlIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHBlbmRpbmcgcmVhZCByZXF1ZXN0LgorLy8gT25jZSB3ZSBhY2NlcHQgdGhlIHJlYWQgcmVxdWVzdCwgd2Ugc2hvdWxkIG5vdCBhY2NlcHQgb25lIG1vcmUgcmVhZAorLy8gcmVxdWVzdCwgdW50aWxsIHdlIGhhdmUgdHJhbnNtaXR0ZWQgdGhlIHJlYWQgZGF0YS4KKy8vICBQZW5kaW5nIFJlYWQgd2lsbCAKKy8vICAgICBzZXQgLSB3aXRoIFJlYWQgUmVxdWVzdCAKKy8vICAgICByZXNldCAtIHdpdGggUmVhZCBSZXF1ZXN0ICsgQWNrCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQChwb3NlZGdlIHdiX3JzdF9pIG9yIHBvc2VkZ2Ugd2JfY2xrX2kpIGJlZ2luCisgICBpZih3Yl9yc3RfaSkgYmVnaW4KKyAgICAgICBwZW5kaW5nX3JlYWQgPD0gMSdiMDsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAvL3BlbmRpbmdfcmVhZCA8PSAgd2Jfc3RiX2kgJiB3Yl9jeWNfaSAmICF3Yl93ZV9pICYgIXdiX2Fja19vOworICAgICAgcGVuZGluZ19yZWFkIDw9ICAgKGNtZGZpZm9fd3IgJiYgIXdiX3dlX2kpID8gMSdiMToKKwkgICAgICAgICAgICAgICAgKHdiX3N0Yl9pICYgd2JfY3ljX2kgJiAhd2Jfd2VfaSAmIHdiX2Fja19vKSA/IDEnYjA6IHBlbmRpbmdfcmVhZDsKKyAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3luYyBDb21tYW5kIEZJRk8uIFRoaXMgYmxvY2sgaGFuZGxlIHRoZSBjbG9jayBkb21haW4gY2hhbmdlIGZyb20KKy8vIEFwcGxpY2F0aW9uIGxheWVyIHRvIFNEUkFNIENvbnRyb2xsZXIKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLy8gQWRkcmVzcyArIEJ1cnN0IExlbmd0aCArIFcvUiBSZXF1ZXN0IAorICAgIGFzeW5jX2ZpZm8gIyguVyhBUFBfQVcrYmwrMSksLkRQKDQpLC5XUl9GQVNUKDEnYjApLCAuUkRfRkFTVCgxJ2IwKSkgdV9jbWRmaWZvICgKKyAgICAgLy8gV3JpdGUgUGF0aCBTeXMgQ0xvY2sgRG9tYWluCisgICAgICAgICAgLndyX2NsayAgICAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICksCisgICAgICAgICAgLndyX3Jlc2V0X24gICAgICAgICAoIXdiX3JzdF9pICAgICAgICAgICksCisgICAgICAgICAgLndyX2VuICAgICAgICAgICAgICAoY21kZmlmb193ciAgICAgICAgICksCisgICAgICAgICAgLndyX2RhdGEgICAgICAgICAgICAoe2J1cnN0X2xlbmd0aCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgIXdiX3dlX2ksIAorCQkJCXdiX2FkZHJfaX0gICAgICAgICksCisgICAgICAgICAgLmFmdWxsICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmZ1bGwgICAgICAgICAgICAgICAoY21kZmlmb19mdWxsICAgICAgICksCisKKyAgICAgLy8gUmVhZCBQYXRoLCBTRFJBTSBjbG9jayBkb21haW4KKyAgICAgICAgICAucmRfY2xrICAgICAgICAgICAgIChzZHJhbV9jbGsgICAgICAgICAgKSwKKyAgICAgICAgICAucmRfcmVzZXRfbiAgICAgICAgIChzZHJhbV9yZXNldG4gICAgICAgKSwKKyAgICAgICAgICAuYWVtcHR5ICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZW1wdHkgICAgICAgICAgICAgIChjbWRmaWZvX2VtcHR5ICAgICAgKSwKKyAgICAgICAgICAucmRfZW4gICAgICAgICAgICAgIChjbWRmaWZvX3JkICAgICAgICAgKSwKKyAgICAgICAgICAucmRfZGF0YSAgICAgICAgICAgICh7c2RyX3JlcV9sZW4sCisJICAgICAgICAgICAgICAgICAgICAgICAgc2RyX3JlcV93cl9uLAorCQkgICAgICAgICAgICAgICAgc2RyX3JlcV9hZGRyfSAgICAgKQorICAgICApOworCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCithbHdheXMgQChwb3NlZGdlIHdiX2Nsa19pKSBiZWdpbgorICBpZiAoY21kZmlmb19mdWxsID09IDEnYjEgJiYgY21kZmlmb193ciA9PSAxJ2IxKSAgYmVnaW4KKyAgICAgJGRpc3BsYXkoIkVSUk9SOiVtIENPTU1BTkQgRklGTyBXUklURSBPVkVSRkxPVyIpOworICBlbmQgCitlbmQgCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2Fsd2F5cyBAKHBvc2VkZ2Ugc2RyYW1fY2xrKSBiZWdpbgorICAgaWYgKGNtZGZpZm9fZW1wdHkgPT0gMSdiMSAmJiBjbWRmaWZvX3JkID09IDEnYjEpIGJlZ2luCisgICAgICAkZGlzcGxheSgiRVJST1I6JW0gQ09NTUFORCBGSUZPIFJFQUQgT1ZFUkZMT1ciKTsKKyAgIGVuZAorZW5kIAorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXcml0ZSBEYXRhIEZJRk8gV3JpdGUgR2VuZXJhdGlvbiwgd2hlbiBldmVyIEFja2VkICsgV3JpdGUgUmVxdWVzdAorLy8gICBOb3RlOiBBY2sgc2lnbmFsIGdlbmVyYXRpb24gYWxyZWFkeSB0YWtpbmcgYWNjb3VudCBvZiBGSUZPIGZ1bGwgY29uZGl0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lyZSAgd3JkYXRhZmlmb193ciAgPSB3Yl9hY2tfbyAmIHdiX3dlX2kgOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV3JpdGUgRGF0YSBGSUZPIFJlYWQgR2VuZXJhdGlvbiwgV2hlbiBldmVyIE5leHQgV3JpdGUgcmVxdWVzdCBnZW5lcmF0ZWQKKy8vIGZyb20gU0RSQU0gQ29udHJvbGxlcgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICB3cmRhdGFmaWZvX3JkICA9IHNkcl93cl9uZXh0OworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBc3luYyBXcml0ZSBEYXRhIEZJRk8KKy8vICAgIFRoaXMgYmxvY2sgaGFuZGxlIHRoZSBjbG9jayBkb21haW4gY2hhbmdlIG92ZXIgKyBXcml0ZSBEYXRhICsgQnl0ZSBtYXNrIAorLy8gICAgRnJvbSBBcHBsaWNhdGlvbiBsYXllciB0byBTRFJBTSBjb250cm9sbGVyIGxheWVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAvLyBXcml0ZSBEQVRBICsgRGF0YSBNYXNrIEZJRk8KKyAgICBhc3luY19maWZvICMoLlcoZHcrKGR3LzgpKSwgLkRQKDgpLCAuV1JfRkFTVCgxJ2IwKSwgLlJEX0ZBU1QoMSdiMSkpIHVfd3JkYXRhZmlmbyAoCisgICAgICAgLy8gV3JpdGUgUGF0aCAsIFN5c3RlbSBjbG9jayBkb21haW4KKyAgICAgICAgICAud3JfY2xrICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgKSwKKyAgICAgICAgICAud3JfcmVzZXRfbiAgICAgICAgICghd2JfcnN0X2kgICAgICAgICAgKSwKKyAgICAgICAgICAud3JfZW4gICAgICAgICAgICAgICh3cmRhdGFmaWZvX3dyICAgICAgKSwKKyAgICAgICAgICAud3JfZGF0YSAgICAgICAgICAgICh7fndiX3NlbF9pLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgd2JfZGF0X2l9ICAgICAgICApLAorICAgICAgICAgIC5hZnVsbCAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5mdWxsICAgICAgICAgICAgICAgKHdyZGF0YWZpZm9fZnVsbCAgICApLAorCisKKyAgICAgICAvLyBSZWFkIFBhdGggLCBTRFJBTSBjbG9jayBkb21haW4KKyAgICAgICAgICAucmRfY2xrICAgICAgICAgICAgIChzZHJhbV9jbGsgICAgICAgICAgKSwKKyAgICAgICAgICAucmRfcmVzZXRfbiAgICAgICAgIChzZHJhbV9yZXNldG4gICAgICAgKSwKKyAgICAgICAgICAuYWVtcHR5ICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZW1wdHkgICAgICAgICAgICAgICh3cmRhdGFmaWZvX2VtcHR5ICAgKSwKKyAgICAgICAgICAucmRfZW4gICAgICAgICAgICAgICh3cmRhdGFmaWZvX3JkICAgICAgKSwKKyAgICAgICAgICAucmRfZGF0YSAgICAgICAgICAgICh7c2RyX3dyX2VuX24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkcl93cl9kYXRhfSAgICAgICkKKyAgICAgKTsKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2Fsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kpIGJlZ2luCisgIGlmICh3cmRhdGFmaWZvX2Z1bGwgPT0gMSdiMSAmJiB3cmRhdGFmaWZvX3dyID09IDEnYjEpICBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1I6JW0gV1JJVEUgREFUQSBGSUZPIFdSSVRFIE9WRVJGTE9XIik7CisgIGVuZCAKK2VuZCAKKworYWx3YXlzIEAocG9zZWRnZSBzZHJhbV9jbGspIGJlZ2luCisgICBpZiAod3JkYXRhZmlmb19lbXB0eSA9PSAxJ2IxICYmIHdyZGF0YWZpZm9fcmQgPT0gMSdiMSkgYmVnaW4KKyAgICAgICRkaXNwbGF5KCJFUlJPUjolbSBXUklURSBEQVRBIEZJRk8gUkVBRCBPVkVSRkxPVyIpOworICAgZW5kCitlbmQgCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFJFQUQgREFUQSBGSUZPCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgIHJkX2VvcDsgLy8gbGFzdCByZWFkIGluZGljYXRpb24KKworLy8gUmVhZCBGSUZPIHdyaXRlIGdlbmVyYXRpb24sIHdoZW4gZXZlciBTRFJBTSBjb250cm9sbGVyIGlzc3VlcyB0aGUgcmVhZAorLy8gdmFsaWQgc2lnbmFsCit3aXJlICAgIHJkZGF0YWZpZm9fd3IgPSBzZHJfcmRfdmFsaWQ7CisKKy8vIFJlYWQgRklGTyByZWFkIGdlbmVyYXRpb24sIHdoZW4gZXZlciBhY2sgaXMgZ2VuZXJhdGVkIGFsb25nIHdpdGggcmVhZAorLy8gcmVxdWVzdC4KKy8vIE5vdGU6IEFjayBnZW5lcmF0aW9uIGlzIGFscmVhZHkgYWNjb3VudGVkIHRoZSB3cml0ZSBGSUZPIE5vdCBFbXB0eQorLy8gICAgICAgY29uZGl0aW9uCit3aXJlICAgIHJkZGF0YWZpZm9fcmQgPSB3Yl9hY2tfbyAmICF3Yl93ZV9pOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzeW5jIFJlYWQgRklGTworLy8gVGhpcyBibG9jayBoYW5kbGVzIHRoZSBjbG9jayBkb21haW4gY2hhbmdlIG92ZXIgKyBSZWFkIGRhdGEgZnJvbSBTRFJBTQorLy8gY29udHJvbGxlciB0byBBcHBsaWNhdGlvbiBsYXllci4KKy8vICBOb3RlOiAKKy8vICAgIDEuIFJFQUQgREFUQSBGSUZPIGRlcHRoIGlzIGtlcHQgc21hbGwsIGFzc3VtaW5nIHRoYXQgU3lzLUNMb2NrID4gU0RSQU0gQ2xvY2sKKy8vICAgICAgIFJFQUQgREFUQSArIEVPUAorLy8gICAgMi4gRU9QIGluZGljYXRlLCBsYXN0IHRyYW5zZmVyIG9mIEJ1cnN0IFJlYWQgQWNjZXNzLiB1c2UtZnVsbCBmb3IgZnV0dXJlCisvLyAgICAgICBUYWcgaGFuZGxpbmcgcGVyIGJ1cnN0CisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYXN5bmNfZmlmbyAjKC5XKGR3KzEpLCAuRFAoNCksIC5XUl9GQVNUKDEnYjApLCAuUkRfRkFTVCgxJ2IxKSApIHVfcmRkYXRhZmlmbyAoCisgICAgICAgLy8gV3JpdGUgUGF0aCAsIFNEUkFNIGNsb2NrIGRvbWFpbgorICAgICAgICAgIC53cl9jbGsgICAgICAgICAgICAgKHNkcmFtX2NsayAgICAgICAgICApLAorICAgICAgICAgIC53cl9yZXNldF9uICAgICAgICAgKHNkcmFtX3Jlc2V0biAgICAgICApLAorICAgICAgICAgIC53cl9lbiAgICAgICAgICAgICAgKHJkZGF0YWZpZm9fd3IgICAgICApLAorICAgICAgICAgIC53cl9kYXRhICAgICAgICAgICAgKHtzZHJfbGFzdF9yZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICBzZHJfcmRfZGF0YX0gICAgICApLAorICAgICAgICAgIC5hZnVsbCAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5mdWxsICAgICAgICAgICAgICAgKHJkZGF0YWZpZm9fZnVsbCAgICApLAorCisKKyAgICAgICAvLyBSZWFkIFBhdGggLCBTWVMgY2xvY2sgZG9tYWluCisgICAgICAgICAgLnJkX2NsayAgICAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICksCisgICAgICAgICAgLnJkX3Jlc2V0X24gICAgICAgICAoIXdiX3JzdF9pICAgICAgICAgICksCisgICAgICAgICAgLmVtcHR5ICAgICAgICAgICAgICAocmRkYXRhZmlmb19lbXB0eSAgICksCisgICAgICAgICAgLmFlbXB0eSAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnJkX2VuICAgICAgICAgICAgICAocmRkYXRhZmlmb19yZCAgICAgICksCisgICAgICAgICAgLnJkX2RhdGEgICAgICAgICAgICAoe3JkX2VvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfZGF0X299ICAgICAgICAgKQorICAgICApOworCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCithbHdheXMgQChwb3NlZGdlIHNkcmFtX2NsaykgYmVnaW4KKyAgaWYgKHJkZGF0YWZpZm9fZnVsbCA9PSAxJ2IxICYmIHJkZGF0YWZpZm9fd3IgPT0gMSdiMSkgIGJlZ2luCisgICAgICRkaXNwbGF5KCJFUlJPUjolbSBSRUFEIERBVEEgRklGTyBXUklURSBPVkVSRkxPVyIpOworICBlbmQgCitlbmQgCisKK2Fsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kpIGJlZ2luCisgICBpZiAocmRkYXRhZmlmb19lbXB0eSA9PSAxJ2IxICYmIHJkZGF0YWZpZm9fcmQgPT0gMSdiMSkgYmVnaW4KKyAgICAgICRkaXNwbGF5KCJFUlJPUjolbSBSRUFEIERBVEEgRklGTyBSRUFEIE9WRVJGTE9XIik7CisgICBlbmQKK2VuZCAKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCisgCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3diLnN2IGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fd2Iuc3YKaW5kZXggOWFhMGI0ZC4uYWJjNzEyNyAxMDA2NDQKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fd2Iuc3YKKysrIGIvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RtZW1fd2Iuc3YKQEAgLTMzOSwxOCArMzM5LDE3IEBACiB3aXJlIFtTQ1IxX1dCX1dJRFRIK1NDUjFfV0JfV0lEVEgrMys0OjBdIHJlcV9maWZvX2RpbiA9IHtoYmVsX2luLGh3cml0ZV9pbixod2lkdGhfaW4saGFkZHJfaW4saHdkYXRhX2lufTsKIAogIHN5bmNfZmlmbyAjKAotICAgICAgLkRBVEFfV0lEVEgoU0NSMV9XQl9XSURUSCtTQ1IxX1dCX1dJRFRIKzMrMSs0KSwgLy8gRGF0YSBXaWR0aAotICAgICAgLkFERFJfV0lEVEgoMSksICAgLy8gQWRkcmVzcyBXaWR0aAotICAgICAgLkZJRk9fREVQVEgoMikgICAgLy8gRklGTyBERVBUSAorICAgICAgLlcoU0NSMV9XQl9XSURUSCtTQ1IxX1dCX1dJRFRIKzMrMSs0KSwgLy8gRGF0YSBXaWR0aAorICAgICAgLkQoMikgICAgLy8gRklGTyBERVBUSAogICAgICApICAgdV9yZXFfZmlmbygKIAotICAgICAgIC5kb3V0ICAgICAgKHJlcV9maWZvX2RvdXQgICksCisgICAgICAgLnJkX2RhdGEgICAgICAocmVxX2ZpZm9fZG91dCAgKSwKIAotICAgICAgIC5yc3RuICAgICAgKHJzdF9uICAgICAgICAgICksCisgICAgICAgLnJlc2V0X24gICAocnN0X24gICAgICAgICAgKSwKICAgICAgICAuY2xrICAgICAgIChjbGsgICAgICAgICAgICApLAogICAgICAgIC53cl9lbiAgICAgKHJlcV9maWZvX3dyICAgICksIC8vIFdyaXRlCiAgICAgICAgLnJkX2VuICAgICAocmVxX2ZpZm9fcmQgICAgKSwgLy8gUmVhZAotICAgICAgIC5kaW4gICAgICAgKHJlcV9maWZvX2RpbiAgICksCisgICAgICAgLndyX2RhdGEgICAocmVxX2ZpZm9fZGluICAgKSwKICAgICAgICAuZnVsbCAgICAgIChyZXFfZmlmb19mdWxsICApLAogICAgICAgIC5lbXB0eSAgICAgKHJlcV9maWZvX2VtcHR5ICkKICk7CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV93Yi5zdiBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3diLnN2CmluZGV4IDEzNDZiNTkuLmMyYTUzNDkgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3diLnN2CisrKyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3diLnN2CkBAIC0xNjgsMTggKzE2OCwxNyBAQAogCiAKICBzeW5jX2ZpZm8gIygKLSAgICAgIC5EQVRBX1dJRFRIKFNDUjFfV0JfV0lEVEgpLCAvLyBEYXRhIFdpZHRoCi0gICAgICAuQUREUl9XSURUSCgxKSwgICAvLyBBZGRyZXNzIFdpZHRoCi0gICAgICAuRklGT19ERVBUSCgyKSAgICAvLyBGSUZPIERFUFRICisgICAgICAuVyhTQ1IxX1dCX1dJRFRIKSwgLy8gRGF0YSBXaWR0aAorICAgICAgLkQoMikgICAgLy8gRklGTyBERVBUSAogICAgICApICAgdV9yZXFfZmlmbygKIAotICAgICAgIC5kb3V0ICAgICAgKHJlcV9maWZvX2RvdXQgICksCisgICAgICAgLnJkX2RhdGEgICAgKHJlcV9maWZvX2RvdXQgICksCiAKLSAgICAgICAucnN0biAgICAgIChyc3RfbiAgICAgICAgICApLAorICAgICAgIC5yZXNldF9uICAgKHJzdF9uICAgICAgICAgICksCiAgICAgICAgLmNsayAgICAgICAoY2xrICAgICAgICAgICAgKSwKICAgICAgICAud3JfZW4gICAgIChyZXFfZmlmb193ciAgICApLCAvLyBXcml0ZQogICAgICAgIC5yZF9lbiAgICAgKHJlcV9maWZvX3JkICAgICksIC8vIFJlYWQKLSAgICAgICAuZGluICAgICAgIChpbWVtX2FkZHIgICAgICApLAorICAgICAgIC53cl9kYXRhICAgKGltZW1fYWRkciAgICAgICksCiAgICAgICAgLmZ1bGwgICAgICAocmVxX2ZpZm9fZnVsbCAgKSwKICAgICAgICAuZW1wdHkgICAgIChyZXFfZmlmb19lbXB0eSApCiApOwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3diX3RvcC5maWxlcyBiL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy93Yl90b3AuZmlsZXMKaW5kZXggODdkZDM0MS4uMWEzYmE3NCAxMDA2NDQKLS0tIGEvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL3diX3RvcC5maWxlcworKysgYi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvd2JfdG9wLmZpbGVzCkBAIC0xLDkgKzEsOCBAQAogdG9wL3NjcjFfZG1lbV9yb3V0ZXIuc3YKLXRvcC9zY3IxX2ltZW1fcm91dGVyLnN2CiB0b3Avc2NyMV9kcF9tZW1vcnkuc3YKIHRvcC9zY3IxX3RjbS5zdgogdG9wL3NjcjFfdGltZXIuc3YKIHRvcC9zY3IxX2RtZW1fd2Iuc3YKIHRvcC9zY3IxX2ltZW1fd2Iuc3YKIHRvcC9zY3IxX3RvcF93Yi5zdgotLi4vLi4vbGliL3N5bmNfZmlmby5zdgorLi4vLi4vLi4vbGliL3N5bmNfZmlmby5zdgo=