dXJnOiBmaXggJ25hcnJvd2luZyBjb252ZXJzaW9uJyB3aXRoIGdjYzYKCkZpeGVzOgogIGh0dHA6Ly9hdXRvYnVpbGQuYnVpbGRyb290Lm5ldC9yZXN1bHRzL2QwYy9kMGNkMTExNjM3NTNkYjY5YTE0YzAyZTk0MWRiZGE0MGU1Zjk4YmJhLwoKU2lnbmVkLW9mZi1ieTogU2FtdWVsIE1hcnRpbiA8cy5tYXJ0aW40OUBnbWFpbC5jb20+CgotLS0gYS9zcmMvY3BwL3VyZy9TY2lwSGFuZGxlci5jcHAJMjAxNi0wOS0xMSAxNjoxMToxNi4wODM5OTUyMTQgKzAyMDAKKysrIGIvc3JjL2NwcC91cmcvU2NpcEhhbmRsZXIuY3BwCTIwMTYtMDktMTEgMTY6MTE6MjQuMzgwODMyNTQzICswMjAwCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RydWN0IFNjaXBIYW5kbGVyOjpwSW1wbAogDQogICAgICAgLy8gUVQggsyUrY1zDQogICAgICAgaW50IHJldHVybl9jb2RlID0gLTE7DQotICAgICAgY2hhciBxdF9leHBlY3RlZF9yZXNwb25zZVtdID0geyAwLCAtMSB9Ow0KKyAgICAgIGNoYXIgcXRfZXhwZWN0ZWRfcmVzcG9uc2VbXSA9IHsgMCwgKGNoYXIpLTEgfTsNCiAgICAgICAvLyByZXR1cm5fY29kZSCC8I5ngqKCvYKigr2C34FBc2V0TGFzZXJPdXRwdXQoKSCC8JdwgqKCuILJIFFUIILwkZeQTYK3gukNCiAgICAgICBpZiAocmVzcG9uc2UocmV0dXJuX2NvZGUsICJRVFxuIiwgcXRfZXhwZWN0ZWRfcmVzcG9uc2UpKSB7DQogICAgICAgICBsYXNlcl9zdGF0ZV8gPSBMYXNlck9mZjsNCkBAIC0xMzksNyArMTM5LDcgQEAgc3RydWN0IFNjaXBIYW5kbGVyOjpwSW1wbAogDQogICAgICAgfSBlbHNlIGlmIChyZXR1cm5fY29kZSA9PSBTY2lwMTFSZXNwb25zZSkgew0KICAgICAgICAgLy8gU0NJUDEuMSCDdoONg2eDUoOLgsyP6o2HgsyC3YFBU0NJUDIuMCCC8JGXkE2Ct4LpDQotICAgICAgICBjaGFyIHNjaXAyMF9leHBlY3RlZF9yZXNwb25zZVtdID0geyAwLCAtMSB9Ow0KKyAgICAgICAgY2hhciBzY2lwMjBfZXhwZWN0ZWRfcmVzcG9uc2VbXSA9IHsgMCwgKGNoYXIpLTEgfTsNCiAgICAgICAgIGlmICghIHJlc3BvbnNlKHJldHVybl9jb2RlLCAiU0NJUDIuMFxuIiwgc2NpcDIwX2V4cGVjdGVkX3Jlc3BvbnNlKSkgew0KICAgICAgICAgICBlcnJvcl9tZXNzYWdlXyA9DQogICAgICAgICAgICAgIlNDSVAxLjEgcHJvdG9jb2wgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVwZGF0ZSBVUkcgZmlybXdhcmUsIG9yIHJlY29ubmVjdCBhZnRlciBhIGZldyBzZWNvbmRzIGJlY2F1c2Ugc2Vuc29yIGlzIGJvb3RpbmcuIjsNCkBAIC0xNTAsNyArMTUwLDcgQEAgc3RydWN0IFNjaXBIYW5kbGVyOjpwSW1wbAogDQogICAgICAgfSBlbHNlIGlmIChyZXR1cm5fY29kZSA9PSAweEUpIHsNCiAgICAgICAgIC8vIFRNIIOCgVuDaILGgt2CyIK1gUFUTTIggvCUrY1zgreC6Q0KLSAgICAgICAgY2hhciB0bTJfZXhwZWN0ZWRfcmVzcG9uc2VbXSA9IHsgMCwgLTEgfTsNCisgICAgICAgIGNoYXIgdG0yX2V4cGVjdGVkX3Jlc3BvbnNlW10gPSB7IDAsIChjaGFyKS0xIH07DQogICAgICAgICBpZiAocmVzcG9uc2UocmV0dXJuX2NvZGUsICJUTTJcbiIsIHRtMl9leHBlY3RlZF9yZXNwb25zZSkpIHsNCiAgICAgICAgICAgbGFzZXJfc3RhdGVfID0gTGFzZXJPZmY7DQogICAgICAgICAgIHJldHVybiBjaGFuZ2VCb3RoQmF1ZHJhdGUoYmF1ZHJhdGUpOw0KQEAgLTIwMiw3ICsyMDIsNyBAQCBzdHJ1Y3QgU2NpcEhhbmRsZXI6OnBJbXBsCiAgICAgc25wcmludGYoc2VuZF9idWZmZXIsIDEwLCAiU1MlMDZsZFxuIiwgYmF1ZHJhdGUpOw0KICAgICBpbnQgcmV0dXJuX2NvZGUgPSAtMTsNCiAgICAgLy8gISEhIIr5gsmQ3ZLokc6P24LMg3uBW4OMgVuDZ4FBgsyP6o2HgsyW34LokmyC8CBzc19leHBlY3RlZC4uLiCCyZLHicGCt4LpDQotICAgIGNoYXIgc3NfZXhwZWN0ZWRfcmVzcG9uc2VbXSA9IHsgMCwgMHgzLCAweDQsIDB4ZiwgLTEgfTsNCisgICAgY2hhciBzc19leHBlY3RlZF9yZXNwb25zZVtdID0geyAwLCAweDMsIDB4NCwgMHhmLCAoY2hhciktMSB9Ow0KICAgICBpZiAoISByZXNwb25zZShyZXR1cm5fY29kZSwgc2VuZF9idWZmZXIsIHNzX2V4cGVjdGVkX3Jlc3BvbnNlKSkgew0KICAgICAgIGVycm9yX21lc3NhZ2VfID0gIkJhdWRyYXRlIGNoYW5nZSBmYWlsLiI7DQogICAgICAgcmV0dXJuIGZhbHNlOw0KQEAgLTIxNiw3ICsyMTYsNyBAQCBzdHJ1Y3QgU2NpcEhhbmRsZXI6OnBJbXBsCiAgIHsNCiAgICAgLy8gUFAggsyRl5BNgsaDZoFbg16CzI7zkE0NCiAgICAgaW50IHJldHVybl9jb2RlID0gLTE7DQotICAgIGNoYXIgcHBfZXhwZWN0ZWRfcmVzcG9uc2VbXSA9IHsgMCwgLTEgfTsNCisgICAgY2hhciBwcF9leHBlY3RlZF9yZXNwb25zZVtdID0geyAwLCAoY2hhciktMSB9Ow0KICAgICB2ZWN0b3I8c3RyaW5nPiBsaW5lczsNCiAgICAgaWYgKCEgcmVzcG9uc2UocmV0dXJuX2NvZGUsICJQUFxuIiwgcHBfZXhwZWN0ZWRfcmVzcG9uc2UsICZsaW5lcykpIHsNCiAgICAgICBlcnJvcl9tZXNzYWdlXyA9ICJQUCBmYWlsLiI7DQpAQCAtMzU2LDcgKzM1Niw3IEBAIHN0cnVjdCBTY2lwSGFuZGxlcjo6cEltcGwKIA0KICAgICBpZiAob24pIHsNCiAgICAgICBpbnQgcmV0dXJuX2NvZGUgPSAtMTsNCi0gICAgICBjaGFyIGV4cGVjdGVkX3Jlc3BvbnNlW10gPSB7IDAsIC0xIH07DQorICAgICAgY2hhciBleHBlY3RlZF9yZXNwb25zZVtdID0geyAwLCAoY2hhciktMSB9Ow0KICAgICAgIGlmICghIHJlc3BvbnNlKHJldHVybl9jb2RlLCAiQk1cbiIsIGV4cGVjdGVkX3Jlc3BvbnNlKSkgew0KICAgICAgICAgZXJyb3JfbWVzc2FnZV8gPSAiQk0gZmFpbC4iOw0KICAgICAgICAgcmV0dXJuIGZhbHNlOw0KQEAgLTM2OSw3ICszNjksNyBAQCBzdHJ1Y3QgU2NpcEhhbmRsZXI6OnBJbXBsCiAgICAgICBpZiAoISBteF9jYXB0dXJpbmdfKSB7DQogICAgICAgICAvLyCPwZOUgreC6YK9gt+CzCBRVCCCxYLNgUGJnpOagvCR0oLCgteCqw0KICAgICAgICAgaW50IHJldHVybl9jb2RlID0gLTE7DQotICAgICAgICBjaGFyIHF0X2V4cGVjdGVkX3Jlc3BvbnNlW10gPSB7IDAsIC0xIH07DQorICAgICAgICBjaGFyIHF0X2V4cGVjdGVkX3Jlc3BvbnNlW10gPSB7IDAsIChjaGFyKS0xIH07DQogICAgICAgICBpZiAoISByZXNwb25zZShyZXR1cm5fY29kZSwgIlFUXG4iLCBxdF9leHBlY3RlZF9yZXNwb25zZSkpIHsNCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgfQ0KQEAgLTc3Nyw3ICs3NzcsNyBAQCBib29sIFNjaXBIYW5kbGVyOjpsb2FkUGFyYW1ldGVyKFJhbmdlU2VuCiBib29sIFNjaXBIYW5kbGVyOjp2ZXJzaW9uTGluZXModmVjdG9yPHN0cmluZz4mIGxpbmVzKQ0KIHsNCiAgIGludCByZXR1cm5fY29kZSA9IC0xOw0KLSAgY2hhciBleHBlY3RlZF9yZXNwb25zZVtdID0geyAwLCAtMSB9Ow0KKyAgY2hhciBleHBlY3RlZF9yZXNwb25zZVtdID0geyAwLCAoY2hhciktMSB9Ow0KICAgaWYgKCEgcGltcGwtPnJlc3BvbnNlKHJldHVybl9jb2RlLCAiVlZcbiIsIGV4cGVjdGVkX3Jlc3BvbnNlLCAmbGluZXMpKSB7DQogICAgIHJldHVybiBmYWxzZTsNCiAgIH0NCkBAIC03OTIsNyArNzkyLDcgQEAgYm9vbCBTY2lwSGFuZGxlcjo6c2V0UmF3VGltZXN0YW1wTW9kZShibwogDQogICAvLyBUTTAgb3IgVE0yIILMkZeQTQ0KICAgaW50IHJldHVybl9jb2RlID0gLTE7DQotICBjaGFyIGV4cGVjdGVkX3Jlc3BvbnNlW10gPSB7IDAsIC0xIH07DQorICBjaGFyIGV4cGVjdGVkX3Jlc3BvbnNlW10gPSB7IDAsIChjaGFyKS0xIH07DQogICBpZiAoISBwaW1wbC0+cmVzcG9uc2UocmV0dXJuX2NvZGUsIHNlbmRfY29tbWFuZCwgZXhwZWN0ZWRfcmVzcG9uc2UpKSB7DQogICAgIHBpbXBsLT5lcnJvcl9tZXNzYWdlXyA9IChvbikgPyAiVE0wIGZhaWwuIiA6ICJUTTIgZmFpbC4iOw0KICAgICByZXR1cm4gZmFsc2U7DQpAQCAtODA5LDcgKzgwOSw3IEBAIGJvb2wgU2NpcEhhbmRsZXI6OnJhd1RpbWVzdGFtcChpbnQqIHRpbWUKIHsNCiAgIC8vIFRNMSCCzJJsgvCV1IK3DQogICBpbnQgcmV0dXJuX2NvZGUgPSAtMTsNCi0gIGNoYXIgZXhwZWN0ZWRfcmVzcG9uc2VbXSA9IHsgMCwgLTEgfTsNCisgIGNoYXIgZXhwZWN0ZWRfcmVzcG9uc2VbXSA9IHsgMCwgKGNoYXIpLTEgfTsNCiAgIHZlY3RvcjxzdHJpbmc+IGxpbmVzOw0KICAgaWYgKCEgcGltcGwtPnJlc3BvbnNlKHJldHVybl9jb2RlLCAiVE0xXG4iLCBleHBlY3RlZF9yZXNwb25zZSwgJmxpbmVzKSkgew0KICAgICBwaW1wbC0+ZXJyb3JfbWVzc2FnZV8gPSAiVE0xIGZhaWwuIjsNCg==