ZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2ZvcnRyYW4udmltIGIvcnVudGltZS9zeW50YXgvZm9ydHJhbi52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxZmE4YgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvc3ludGF4L2ZvcnRyYW4udmltCkBAIC0wLDAgKzEsNTI2IEBACisiIFZpbSBzeW50YXggZmlsZQorIiBMYW5ndWFnZToJRm9ydHJhbjk1IChhbmQgRm9ydHJhbjkwLCBGb3J0cmFuNzcsIEYgYW5kIGVsZjkwKQorIiBWZXJzaW9uOgkwLjg2CisiIFVSTDoJCWh0dHA6Ly93d3cudW5iLmNhL2NoZW0vYWppdC9zeW50YXgvZm9ydHJhbi52aW0KKyIgTGFzdCBDaGFuZ2U6CTIwMDMgTWFyLiAxMgorIiBNYWludGFpbmVyOglBaml0IEouIFRoYWtrYXIgKGFqaXQgQVQgdW5iLmNhKTsgPGh0dHA6Ly93d3cudW5iLmNhL2NoZW0vYWppdC8+CisiIFVzYWdlOglEbyA6aGVscCBmb3J0cmFuLXN5bnRheCBmcm9tIFZpbQorIiBDcmVkaXRzOgorIiAgVmVyc2lvbiAwLjEgd2FzIGJhc2VkIG9uIHRoZSBmb3J0cmFuIDc3IHN5bnRheCBmaWxlIGJ5IE1hcmlvIEV1c2ViaW8gYW5kCisiICBQcmViZW4gR3VsZGJlcmcuIFVzZWZ1bCBzdWdnZXN0aW9ucyB3ZXJlIG1hZGUgYnk6IEFuZHJlaiBQYW5qa292LAorIiAgQnJhbSBNb29sZW5hYXIsIFRob21hcyBPbHNlbiwgTWljaGFlbCBTdGVybmJlcmcsIENocmlzdGlhbiBSZWlsZSwKKyIgIFdhbHRlciBEaWV1ZG9ubuksIEFsZXhhbmRlciBXYWduZXIsIFJvbWFuIEJlcnRsZSwgQ2hhcmxlcyBSZW5kbGVtYW4sCisiICBhbmQgQW5kcmV3IEdyaWZmaXRocy4gRm9yIGluc3RydWN0aW9ucyBvbiB1c2UsIGRvIDpoZWxwIGZvcnRyYW4gZnJvbSB2aW0KKworIiBGb3IgdmVyc2lvbiA1Lng6IENsZWFyIGFsbCBzeW50YXggaXRlbXMKKyIgRm9yIHZlcnNpb24gNi54OiBRdWl0IGlmIGEgc3ludGF4IGZpbGUgaXMgYWxyZWFkeSBsb2FkZWQKK2lmIHZlcnNpb24gPCA2MDAKKyAgc3ludGF4IGNsZWFyCitlbHNlaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgZmluaXNoCitlbmRpZgorCisiIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9IGZvcnRyYW5fZGlhbGVjdCBpZiBzZXQgY29ycmVjdGx5IGJ5IHVzZXIKK2lmIGV4aXN0cygiZm9ydHJhbl9kaWFsZWN0IikKKyAgaWYgZm9ydHJhbl9kaWFsZWN0ID1+ICdcPFwoZlwoOVswNV1cfDc3XClcfGVsZlx8RlwpXD4nCisgICAgbGV0IGI6Zm9ydHJhbl9kaWFsZWN0ID0gbWF0Y2hzdHIoZm9ydHJhbl9kaWFsZWN0LCdcPFwoZlwoOVswNV1cfDc3XClcfGVsZlx8RlwpXD4nKQorICBlbHNlCisgICAgZWNob2hsIFdhcm5pbmdNc2cgfCBlY2hvICJVbmtub3duIHZhbHVlIG9mIGZvcnRyYW5fZGlhbGVjdCIgfCBlY2hvaGwgTm9uZQorICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9ICJ1bmtub3duIgorICBlbmRpZgorZWxzZQorICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAidW5rbm93biIKK2VuZGlmCisKKyIgZm9ydHJhbl9kaWFsZWN0IG5vdCBzZXQgb3Igc2V0IGluY29ycmVjdGx5IGJ5IHVzZXIsCitpZiBiOmZvcnRyYW5fZGlhbGVjdCA9PSAidW5rbm93biIKKyAgIiBzZXQgYjpmb3J0cmFuX2RpYWxlY3QgZnJvbSBkaXJlY3RpdmUgaW4gZmlyc3QgdGhyZWUgbGluZXMgb2YgZmlsZQorICBsZXQgYjpmb3J0cmFuX3JldHlwZSA9IGdldGxpbmUoMSkuIiAiLmdldGxpbmUoMikuIiAiLmdldGxpbmUoMykKKyAgaWYgYjpmb3J0cmFuX3JldHlwZSA9fiAnXDxmb3J0cmFuX2RpYWxlY3Rccyo9XHMqRlw+JworICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9ICJGIgorICBlbHNlaWYgYjpmb3J0cmFuX3JldHlwZSA9fiAnXDxmb3J0cmFuX2RpYWxlY3Rccyo9XHMqZWxmXD4nCisgICAgbGV0IGI6Zm9ydHJhbl9kaWFsZWN0ID0gImVsZiIKKyAgZWxzZWlmIGI6Zm9ydHJhbl9yZXR5cGUgPX4gJ1w8Zm9ydHJhbl9kaWFsZWN0XHMqPVxzKmY5MFw+JworICAgIGxldCBiOmZvcnRyYW5fZGlhbGVjdCA9ICJmOTAiCisgIGVsc2VpZiBiOmZvcnRyYW5fcmV0eXBlID1+ICdcPGZvcnRyYW5fZGlhbGVjdFxzKj1ccypmOTVcPicKKyAgICBsZXQgYjpmb3J0cmFuX2RpYWxlY3QgPSAiZjk1IgorICBlbHNlaWYgYjpmb3J0cmFuX3JldHlwZSA9fiAnXDxmb3J0cmFuX2RpYWxlY3Rccyo9XHMqZjc3XD4nCisgICAgbGV0IGI6Zm9ydHJhbl9kaWFsZWN0ID0gImY3NyIKKyAgZWxzZQorICAgICIgbm8gZGlyZWN0aXZlIGZvdW5kLCBzbyBhc3N1bWUgZjk1CisgICAgbGV0IGI6Zm9ydHJhbl9kaWFsZWN0ID0gImY5NSIKKyAgZW5kaWYKKyAgdW5sZXQgYjpmb3J0cmFuX3JldHlwZQorZW5kaWYKKworIiBDaG9vc2UgYmV0d2VlbiBmaXhlZCBhbmQgZnJlZSBzb3VyY2UgZm9ybSBpZiB0aGlzIGhhc24ndCBiZWVuIGRvbmUgeWV0CitpZiAhZXhpc3RzKCJiOmZvcnRyYW5fZml4ZWRfc291cmNlIikKKyAgaWYgYjpmb3J0cmFuX2RpYWxlY3QgPT0gImVsZiIgfHwgYjpmb3J0cmFuX2RpYWxlY3QgPT0gIkYiCisgICAgIiBlbGYgYW5kIEYgcmVxdWlyZSBmcmVlIHNvdXJjZSBmb3JtCisgICAgbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAwCisgIGVsc2VpZiBiOmZvcnRyYW5fZGlhbGVjdCA9PSAiZjc3IgorICAgICIgZjc3IHJlcXVpcmVzIGZpeGVkIHNvdXJjZSBmb3JtCisgICAgbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAxCisgIGVsc2VpZiBleGlzdHMoImZvcnRyYW5fZnJlZV9zb3VyY2UiKQorICAgICIgVXNlciBndWFyYW50ZWVzIGZyZWUgc291cmNlIGZvcm0gZm9yIGFsbCBmOTAgYW5kIGY5NSBmaWxlcworICAgIGxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMAorICBlbHNlaWYgZXhpc3RzKCJmb3J0cmFuX2ZpeGVkX3NvdXJjZSIpCisgICAgIiBVc2VyIGd1YXJhbnRlZXMgZml4ZWQgc291cmNlIGZvcm0gZm9yIGFsbCBmOTAgYW5kIGY5NSBmaWxlcworICAgIGxldCBiOmZvcnRyYW5fZml4ZWRfc291cmNlID0gMQorICBlbHNlCisgICAgIiBmOTAgYW5kIGY5NSBhbGxvdyBib3RoIGZpeGVkIGFuZCBmcmVlIHNvdXJjZSBmb3JtLgorICAgICIgQXNzdW1lIGZpeGVkIHNvdXJjZSBmb3JtIHVubGVzcyBzaWducyBvZiBmcmVlIHNvdXJjZSBmb3JtCisgICAgIiBhcmUgZGV0ZWN0ZWQgaW4gdGhlIGZpcnN0IGZpdmUgY29sdW1ucyBvZiB0aGUgZmlyc3QgYjpsbWF4IGxpbmVzLgorICAgICIgRGV0ZWN0aW9uIGJlY29tZXMgbW9yZSBhY2N1cmF0ZSBhbmQgdGltZS1jb25zdW1pbmcgaWYgbW9yZSBsaW5lcworICAgICIgYXJlIGNoZWNrZWQuIEluY3JlYXNlIHRoZSBsaW1pdCBiZWxvdyBpZiB5b3Uga2VlcCBsb3RzIG9mIGNvbW1lbnRzIGF0CisgICAgIiB0aGUgdmVyeSB0b3Agb2YgZWFjaCBmaWxlIGFuZCB5b3UgaGF2ZSBhIGZhc3QgY29tcHV0ZXIuCisgICAgbGV0IGI6bG1heCA9IDI1CisgICAgaWYgKCBiOmxtYXggPiBsaW5lKCIkIikgKQorICAgICAgbGV0IGI6bG1heCA9IGxpbmUoIiQiKQorICAgIGVuZGlmCisgICAgbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAxCisgICAgbGV0IGI6bG49MQorICAgIHdoaWxlIGI6bG4gPD0gYjpsbWF4CisgICAgICBsZXQgYjp0ZXN0ID0gc3RycGFydChnZXRsaW5lKGI6bG4pLDAsNSkKKyAgICAgIGlmIGI6dGVzdFswXSAhfiAnW0NjKiEjXScgJiYgYjp0ZXN0ICF+ICdeIFwrWyEjXScgJiYgYjp0ZXN0ID1+ICdbXiAwLTlcdF0nCisJbGV0IGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPSAwCisJYnJlYWsKKyAgICAgIGVuZGlmCisgICAgICBsZXQgYjpsbiA9IGI6bG4gKyAxCisgICAgZW5kd2hpbGUKKyAgICB1bmxldCBiOmxtYXggYjpsbiBiOnRlc3QKKyAgZW5kaWYKK2VuZGlmCisKK3N5biBjYXNlIGlnbm9yZQorCitpZiBiOmZvcnRyYW5fZGlhbGVjdCA9PSAiZjc3IgorICBzeW4gbWF0Y2ggZm9ydHJhbklkZW50aWZpZXIJCSJcPFxhXChcYVx8XGRcKSpcPiIgY29udGFpbnM9Zm9ydHJhblNlcmlhbE51bWJlcgorZWxzZQorICBzeW4gbWF0Y2ggZm9ydHJhbjkwSWRlbnRpZmllcgkJIlw8XGFcdypcPiIgY29udGFpbnM9Zm9ydHJhblNlcmlhbE51bWJlcgorICBpZiB2ZXJzaW9uID49IDYwMAorICAgIGlmIGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMQorICAgICAgc3luIG1hdGNoIGZvcnRyYW5Db25zdHJ1Y3ROYW1lCSJeXHNcezYsfVx6c1xhXHcqXHplXHMqOiIKKyAgICBlbHNlCisgICAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUJIl5ccypcenNcYVx3Klx6ZVxzKjoiCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoImZvcnRyYW5fbW9yZV9wcmVjaXNlIikKKyAgICAgIHN5biBtYXRjaCBmb3J0cmFuQ29uc3RydWN0TmFtZSAiXChcPGVuZFxzKmRvXHNcK1wpXEA8PVxhXHcqIgorICAgICAgc3luIG1hdGNoIGZvcnRyYW5Db25zdHJ1Y3ROYW1lICJcKFw8ZW5kXHMqaWZcc1wrXClcQDw9XGFcdyoiCisgICAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUgIlwoXDxlbmRccypzZWxlY3Rcc1wrXClcQDw9XGFcdyoiCisgICAgZW5kaWYKKyAgZWxzZQorICAgIGlmIGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMQorICAgICAgc3luIG1hdGNoIGZvcnRyYW5Db25zdHJ1Y3ROYW1lCSJeXHNcezYsfVxhXHcqXHMqOiIKKyAgICBlbHNlCisgICAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUJIl5ccypcYVx3KlxzKjoiCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGlmCisKK3N5biBtYXRjaCAgIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGVuZFw+IgorCitzeW4ga2V5d29yZCBmb3J0cmFuVHlwZQkJY2hhcmFjdGVyIGNvbXBsZXggaW50ZWdlcgorc3luIGtleXdvcmQgZm9ydHJhblR5cGUJCWludHJpbnNpYworc3luIG1hdGNoIGZvcnRyYW5UeXBlCQkiXDxpbXBsaWNpdFw+Igorc3luIGtleXdvcmQgZm9ydHJhblN0cnVjdHVyZQlkaW1lbnNpb24KK3N5biBrZXl3b3JkIGZvcnRyYW5TdG9yYWdlQ2xhc3MJcGFyYW1ldGVyIHNhdmUKK3N5biBtYXRjaCBmb3J0cmFuVW5pdEhlYWRlcgkiXDxzdWJyb3V0aW5lXD4iCitzeW4ga2V5d29yZCBmb3J0cmFuQ2FsbAkJY2FsbAorc3luIG1hdGNoIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGZ1bmN0aW9uXD4iCitzeW4gbWF0Y2ggZm9ydHJhblVuaXRIZWFkZXIJIlw8cHJvZ3JhbVw+Igorc3luIGtleXdvcmQgZm9ydHJhblN0YXRlbWVudAlyZXR1cm4gc3RvcAorc3luIGtleXdvcmQgZm9ydHJhbkNvbmRpdGlvbmFsCWVsc2UgdGhlbgorc3luIG1hdGNoIGZvcnRyYW5Db25kaXRpb25hbAkiXDxpZlw+Igorc3luIG1hdGNoIGZvcnRyYW5SZXBlYXQJCSJcPGRvXD4iCisKK3N5biBrZXl3b3JkIGZvcnRyYW5Ub2RvCQljb250YWluZWQgdG9kbyBmaXhtZQorCisiQ2F0Y2ggZXJyb3JzIGNhdXNlZCBieSB0b28gbWFueSByaWdodCBwYXJlbnRoZXNlcworc3luIHJlZ2lvbiBmb3J0cmFuUGFyZW4gdHJhbnNwYXJlbnQgc3RhcnQ9IigiIGVuZD0iKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5QYXJlbkVycm9yLEBmb3J0cmFuQ29tbWVudEdyb3VwLGNJbmNsdWRlZAorc3luIG1hdGNoICBmb3J0cmFuUGFyZW5FcnJvciAgICIpIgorCitzeW4gbWF0Y2ggZm9ydHJhbk9wZXJhdG9yCSJcLlxzKm5cPWVxdlxzKlwuIgorc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiXC5ccypcKGFuZFx8b3JcfG5vdFwpXHMqXC4iCitzeW4gbWF0Y2ggZm9ydHJhbk9wZXJhdG9yCSJcKCtcfC1cfC9cfFwqXCkiCisKK3N5biBtYXRjaCBmb3J0cmFuQm9vbGVhbgkiXC5ccypcKHRydWVcfGZhbHNlXClccypcLiIKKworc3luIGtleXdvcmQgZm9ydHJhblJlYWRXcml0ZQliYWNrc3BhY2UgY2xvc2UgaW5xdWlyZSBvcGVuIHJld2luZCBlbmRmaWxlCitzeW4ga2V5d29yZCBmb3J0cmFuUmVhZFdyaXRlCXJlYWQgd3JpdGUgcHJpbnQKKworIklmIHRhYnMgYXJlIGFsbG93ZWQgdGhlbiB0aGUgbGVmdCBtYXJnaW4gY2hlY2tzIGRvIG5vdCB3b3JrCitpZiBleGlzdHMoImZvcnRyYW5faGF2ZV90YWJzIikKKyAgc3luIG1hdGNoIGZvcnRyYW5UYWIJCSJcdCIgIHRyYW5zcGFyZW50CitlbHNlCisgIHN5biBtYXRjaCBmb3J0cmFuVGFiCQkiXHQiCitlbmRpZgorCitzeW4ga2V5d29yZCBmb3J0cmFuSU8JCXVuaXQgZmlsZSBpb3N0YXQgYWNjZXNzIGJsYW5rIGZtdCBmb3JtCitzeW4ga2V5d29yZCBmb3J0cmFuSU8JCXJlY2wgc3RhdHVzIGV4aXN0IG9wZW5lZCBudW1iZXIgbmFtZWQgbmFtZQorc3luIGtleXdvcmQgZm9ydHJhbklPCQlzZXF1ZW50aWFsIGRpcmVjdCByZWMKK3N5biBrZXl3b3JkIGZvcnRyYW5JTwkJZm9ybWF0dGVkIHVuZm9ybWF0dGVkIG5leHRyZWMKKworc3luIGtleXdvcmQgZm9ydHJhbjY2SW50cmluc2ljCQljYWJzIGNjb3MgY2V4cCBjbG9nIGNzaW4gY3NxcnQKK3N5biBrZXl3b3JkIGZvcnRyYW42NkludHJpbnNpYwkJZGFjb3MgZGFzaW4gZGF0YW4gZGF0YW4yIGRjb3MgZGNvc2gKK3N5biBrZXl3b3JkIGZvcnRyYW42NkludHJpbnNpYwkJZGRpbSBkZXhwIGRpbnQgZGxvZyBkbG9nMTAgZG1vZCBkYWJzCitzeW4ga2V5d29yZCBmb3J0cmFuNjZJbnRyaW5zaWMJCWRuaW50IGRzaWduIGRzaW4gZHNpbmggZHNxcnQgZHRhbgorc3luIGtleXdvcmQgZm9ydHJhbjY2SW50cmluc2ljCQlkdGFuaCBpYWJzIGlkaW0gaWRuaW50IGlzaWduIGlkaW50IGlmaXgKK3N5biBrZXl3b3JkIGZvcnRyYW42NkludHJpbnNpYwkJYW1heDAgYW1heDEgZG1heDEgbWF4MCBtYXgxCitzeW4ga2V5d29yZCBmb3J0cmFuNjZJbnRyaW5zaWMJCWFtaW4wIGFtaW4xIGRtaW4xIG1pbjAgbWluMQorc3luIGtleXdvcmQgZm9ydHJhbjY2SW50cmluc2ljCQlhbW9kIGZsb2F0IHNuZ2wgYWxvZyBhbG9nMTAKKworIiBJbnRyaW5zaWNzIHByb3ZpZGVkIGJ5IHNvbWUgdmVuZG9ycworc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCWNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydAorc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCWNxYWJzIGNxY29zIGNxZXhwIGNxbG9nIGNxc2luIGNxc3FydAorc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCXFhY29zIHFhc2luIHFhdGFuIHFhdGFuMiBxY29zIHFjb3NoCitzeW4ga2V5d29yZCBmb3J0cmFuRXh0cmFJbnRyaW5zaWMJcWRpbSBxZXhwIGlxaW50IHFsb2cgcWxvZzEwIHFtb2QgcWFicworc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCXFuaW50IHFzaWduIHFzaW4gcXNpbmggcXNxcnQgcXRhbgorc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCXF0YW5oIHFtYXgxIHFtaW4xCitzeW4ga2V5d29yZCBmb3J0cmFuRXh0cmFJbnRyaW5zaWMJZGltYWcgcWltYWcgZGNtcGx4IHFjbXBseCBkY29uamcgcWNvbmpnCitzeW4ga2V5d29yZCBmb3J0cmFuRXh0cmFJbnRyaW5zaWMJZ2FtbWEgZGdhbW1hIHFnYW1tYSBhbGdhbWEgZGxnYW1hIHFsZ2FtYQorc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCWVyZiBkZXJmIHFlcmYgZXJmYyBkZXJmYyBxZXJmYworc3luIGtleXdvcmQgZm9ydHJhbkV4dHJhSW50cmluc2ljCWRmbG9hdAorCitzeW4ga2V5d29yZCBmb3J0cmFuNzdJbnRyaW5zaWMJYWJzIGFjb3MgYWltYWcgYWludCBhbmludCBhc2luIGF0YW4gYXRhbjIKK3N5biBrZXl3b3JkIGZvcnRyYW43N0ludHJpbnNpYwljb3Mgc2luIHRhbiBzaW5oIGNvc2ggdGFuaCBleHAgbG9nIGxvZzEwCitzeW4ga2V5d29yZCBmb3J0cmFuNzdJbnRyaW5zaWMJc2lnbiBzcXJ0IGludCBjbXBseCBuaW50IG1pbiBtYXggY29uamcKK3N5biBrZXl3b3JkIGZvcnRyYW43N0ludHJpbnNpYwljaGFyIGljaGFyIGluZGV4CitzeW4gbWF0Y2ggZm9ydHJhbjc3SW50cmluc2ljCSJcPGxlblxzKlsoLF0ibWU9cyszCitzeW4gbWF0Y2ggZm9ydHJhbjc3SW50cmluc2ljCSJcPHJlYWxccyooIm1lPXMrNAorc3luIG1hdGNoIGZvcnRyYW5UeXBlCQkiXDxpbXBsaWNpdFxzXCtyZWFsIgorc3luIG1hdGNoIGZvcnRyYW5UeXBlCQkiXlxzKnJlYWxcPiIKK3N5biBtYXRjaCBmb3J0cmFuOTBJbnRyaW5zaWMJIlw8bG9naWNhbFxzKigibWU9cys3CitzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCSJcPGltcGxpY2l0XHNcK2xvZ2ljYWwiCitzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCSJeXHMqbG9naWNhbFw+IgorCisiTnVtYmVycyBvZiB2YXJpb3VzIHNvcnRzCisiIEludGVnZXJzCitzeW4gbWF0Y2ggZm9ydHJhbk51bWJlcglkaXNwbGF5ICJcPFxkXCtcKF9cYVx3KlwpXD1cPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB3aXRob3V0IGEgZGVjaW1hbCBwb2ludAorc3luIG1hdGNoIGZvcnRyYW5GbG9hdE5vRGVjCWRpc3BsYXkJIlw8XGRcK1tkZXFdWy0rXVw9XGRcK1woX1xhXHcqXClcPVw+IgorIiBmbG9hdGluZyBwb2ludCBudW1iZXIsIHN0YXJ0aW5nIHdpdGggYSBkZWNpbWFsIHBvaW50CitzeW4gbWF0Y2ggZm9ydHJhbkZsb2F0SW5pRGVjCWRpc3BsYXkJIlwuXGRcK1woW2RlcV1bLStdXD1cZFwrXClcPVwoX1xhXHcqXClcPVw+IgorIiBmbG9hdGluZyBwb2ludCBudW1iZXIsIG5vIGRpZ2l0cyBhZnRlciBkZWNpbWFsCitzeW4gbWF0Y2ggZm9ydHJhbkZsb2F0RW5kRGVjCWRpc3BsYXkJIlw8XGRcK1wuXChbZGVxXVstK11cPVxkXCtcKVw9XChfXGFcdypcKVw9XD4iCisiIGZsb2F0aW5nIHBvaW50IG51bWJlciwgRCBvciBRIGV4cG9uZW50cworc3luIG1hdGNoIGZvcnRyYW5GbG9hdERFeHAJZGlzcGxheQkiXDxcZFwrXC5cZFwrXChbZHFdWy0rXVw9XGRcK1wpXD1cKF9cYVx3KlwpXD1cPiIKKyIgZmxvYXRpbmcgcG9pbnQgbnVtYmVyCitzeW4gbWF0Y2ggZm9ydHJhbkZsb2F0CWRpc3BsYXkJIlw8XGRcK1wuXGRcK1woZVstK11cPVxkXCtcKVw9XChfXGFcdypcKVw9XD4iCisiIE51bWJlcnMgaW4gZm9ybWF0cworc3luIG1hdGNoIGZvcnRyYW5Gb3JtYXRTcGVjCWRpc3BsYXkJIlxkKmZcZFwrXC5cZFwrIgorc3luIG1hdGNoIGZvcnRyYW5Gb3JtYXRTcGVjCWRpc3BsYXkJIlxkKmVbc25dXD1cZFwrXC5cZFwrXChlXGQrXD5cKVw9Igorc3luIG1hdGNoIGZvcnRyYW5Gb3JtYXRTcGVjCWRpc3BsYXkJIlxkKlwoZFx8cVx8Z1wpXGRcK1wuXGRcK1woZVxkK1wpXD0iCitzeW4gbWF0Y2ggZm9ydHJhbkZvcm1hdFNwZWMJZGlzcGxheQkiXGRcK3hcPiIKKyIgVGhlIG5leHQgbWF0Y2ggY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCB3b3VsZCBwaWNrIHVwIGlkZW50aWZpZXJzIGFzIHdlbGwKKyIgc3luIG1hdGNoIGZvcnRyYW5Gb3JtYXRTcGVjCWRpc3BsYXkJIlw8XChhXHxpXClcZFwrIgorCisiIE51bWJlcnMgYXMgbGFiZWxzCitzeW4gbWF0Y2ggZm9ydHJhbkxhYmVsTnVtYmVyCWRpc3BsYXkJIl5cZFx7MSw1fVxzIm1lPWUtMQorc3luIG1hdGNoIGZvcnRyYW5MYWJlbE51bWJlcglkaXNwbGF5CSJeIFxkXHsxLDR9XHMibXM9cysxLG1lPWUtMQorc3luIG1hdGNoIGZvcnRyYW5MYWJlbE51bWJlcglkaXNwbGF5CSJeICBcZFx7MSwzfVxzIm1zPXMrMixtZT1lLTEKK3N5biBtYXRjaCBmb3J0cmFuTGFiZWxOdW1iZXIJZGlzcGxheQkiXiAgIFxkXGRcPVxzIm1zPXMrMyxtZT1lLTEKK3N5biBtYXRjaCBmb3J0cmFuTGFiZWxOdW1iZXIJZGlzcGxheQkiXiAgICBcZFxzIm1zPXMrNCxtZT1lLTEKKworaWYgdmVyc2lvbiA+PSA2MDAgJiYgZXhpc3RzKCJmb3J0cmFuX21vcmVfcHJlY2lzZSIpCisgICIgTnVtYmVycyBhcyB0YXJnZXRzCisgIHN5biBtYXRjaCBmb3J0cmFuVGFyZ2V0CWRpc3BsYXkJIlwoXDxpZlxzKiguXCspXHMqXClcQDw9XChcZFwrXHMqLFxzKlwpXHsyfVxkXCtcPiIKKyAgc3luIG1hdGNoIGZvcnRyYW5UYXJnZXQJZGlzcGxheQkiXChcPGRvXHNcK1wpXEA8PVxkXCtcPiIKKyAgc3luIG1hdGNoIGZvcnRyYW5UYXJnZXQJZGlzcGxheQkiXChcPGdvXHMqdG9ccyooXD1cKVxAPD1cKFxkXCtccyosXHMqXCkqXGRcK1w+IgorZW5kaWYKKworc3luIGtleXdvcmQgZm9ydHJhblR5cGVFeAlleHRlcm5hbAorc3luIGtleXdvcmQgZm9ydHJhbklPRXgJCWZvcm1hdAorc3luIGtleXdvcmQgZm9ydHJhblN0YXRlbWVudEV4CWNvbnRpbnVlCitzeW4gbWF0Y2ggZm9ydHJhblN0YXRlbWVudEV4CSJcPGdvXHMqdG9cPiIKK3N5biByZWdpb24gZm9ydHJhblN0cmluZ0V4CXN0YXJ0PSsnKyBlbmQ9KycrIGNvbnRhaW5zPWZvcnRyYW5Db250aW51ZU1hcmssZm9ydHJhbkxlZnRNYXJnaW4sZm9ydHJhblNlcmlhbE51bWJlcgorc3luIGtleXdvcmQgZm9ydHJhbjc3SW50cmluc2ljRXgJZGltIGxnZSBsZ3QgbGxlIGxsdCBtb2QKK3N5biBrZXl3b3JkIGZvcnRyYW5TdGF0ZW1lbnRPYglhc3NpZ24gcGF1c2UgdG8KKworaWYgYjpmb3J0cmFuX2RpYWxlY3QgIT0gImY3NyIKKworICBzeW4ga2V5d29yZCBmb3J0cmFuVHlwZQl0eXBlIG5vbmUKKworICBzeW4ga2V5d29yZCBmb3J0cmFuU3RydWN0dXJlCXByaXZhdGUgcHVibGljIGludGVudCBvcHRpb25hbAorICBzeW4ga2V5d29yZCBmb3J0cmFuU3RydWN0dXJlCXBvaW50ZXIgdGFyZ2V0IGFsbG9jYXRhYmxlCisgIHN5biBrZXl3b3JkIGZvcnRyYW5TdG9yYWdlQ2xhc3MJaW4gb3V0CisgIHN5biBtYXRjaCBmb3J0cmFuU3RvcmFnZUNsYXNzCSJcPGtpbmRccyo9Im1lPXMrNAorICBzeW4gbWF0Y2ggZm9ydHJhblN0b3JhZ2VDbGFzcwkiXDxsZW5ccyo9Im1lPXMrMworCisgIHN5biBtYXRjaCBmb3J0cmFuVW5pdEhlYWRlcgkiXDxtb2R1bGVcPiIKKyAgc3luIGtleXdvcmQgZm9ydHJhblVuaXRIZWFkZXIJdXNlIG9ubHkgY29udGFpbnMKKyAgc3luIGtleXdvcmQgZm9ydHJhblVuaXRIZWFkZXIJcmVzdWx0IG9wZXJhdG9yIGFzc2lnbm1lbnQKKyAgc3luIG1hdGNoIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGludGVyZmFjZVw+IgorICBzeW4gbWF0Y2ggZm9ydHJhblVuaXRIZWFkZXIJIlw8cmVjdXJzaXZlXD4iCisgIHN5biBrZXl3b3JkIGZvcnRyYW5TdGF0ZW1lbnQJYWxsb2NhdGUgZGVhbGxvY2F0ZSBudWxsaWZ5IGN5Y2xlIGV4aXQKKyAgc3luIG1hdGNoIGZvcnRyYW5Db25kaXRpb25hbAkiXDxzZWxlY3RcPiIKKyAgc3luIGtleXdvcmQgZm9ydHJhbkNvbmRpdGlvbmFsCWNhc2UgZGVmYXVsdCB3aGVyZSBlbHNld2hlcmUKKworICBzeW4gbWF0Y2ggZm9ydHJhbk9wZXJhdG9yCSJcKFwoPlx8PFwpPVw9XHw9PVx8Lz1cfD1cKSIKKyAgc3luIG1hdGNoIGZvcnRyYW5PcGVyYXRvcgkiPT4iCisKKyAgc3luIHJlZ2lvbiBmb3J0cmFuU3RyaW5nCXN0YXJ0PSsiKyBlbmQ9KyIrCWNvbnRhaW5zPWZvcnRyYW5MZWZ0TWFyZ2luLGZvcnRyYW5Db250aW51ZU1hcmssZm9ydHJhblNlcmlhbE51bWJlcgorICBzeW4ga2V5d29yZCBmb3J0cmFuSU8JCXBhZCBwb3NpdGlvbiBhY3Rpb24gZGVsaW0gcmVhZHdyaXRlCisgIHN5biBrZXl3b3JkIGZvcnRyYW5JTwkJZW9yIGFkdmFuY2Ugbm1sCisKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCWFkanVzdGwgYWRqdXN0ciBhbGwgYWxsb2NhdGVkIGFueQorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJYXNzb2NpYXRlZCBiaXRfc2l6ZSBidGVzdCBjZWlsaW5nCisgIHN5biBrZXl3b3JkIGZvcnRyYW45MEludHJpbnNpYwljb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZQorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJZGlnaXRzIGRvdF9wcm9kdWN0IGVvc2hpZnQgZXBzaWxvbiBleHBvbmVudAorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJZmxvb3IgZnJhY3Rpb24gaHVnZSBpYW5kIGliY2xyIGliaXRzIGlic2V0IGllb3IKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCWlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltCisgIHN5biBrZXl3b3JkIGZvcnRyYW45MEludHJpbnNpYwltYXRtdWwgbWF4ZXhwb25lbnQgbWF4bG9jIG1heHZhbCBtZXJnZQorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJbWluZXhwb25lbnQgbWlubG9jIG1pbnZhbCBtb2R1bG8gbXZiaXRzIG5lYXJlc3QKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCXBhY2sgcHJlc2VudCBwcm9kdWN0IHJhZGl4IHJhbmRvbV9udW1iZXIKKyAgc3luIG1hdGNoIGZvcnRyYW45MEludHJpbnNpYwkJIlw8bm90XD5cKFxzKlwuXClcQCEibWU9cyszCisgIHN5biBrZXl3b3JkIGZvcnRyYW45MEludHJpbnNpYwlyYW5kb21fc2VlZCByYW5nZSByZXBlYXQgcmVzaGFwZSBycnNwYWNpbmcgc2NhbGUKKyAgc3luIGtleXdvcmQgZm9ydHJhbjkwSW50cmluc2ljCXNlbGVjdGVkX2ludF9raW5kIHNlbGVjdGVkX3JlYWxfa2luZCBzY2FuCisgIHN5biBrZXl3b3JkIGZvcnRyYW45MEludHJpbnNpYwlzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHNldF9leHBvbmVudAorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeQorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWMJcHJlY2lzaW9uIHN1bSBzeXN0ZW1fY2xvY2sKKyAgc3luIG1hdGNoIGZvcnRyYW45MEludHJpbnNpYwkiXDxraW5kXD5ccypbKCxdIm1lPXMrNAorCisgIHN5biBtYXRjaCAgZm9ydHJhblVuaXRIZWFkZXIJIlw8ZW5kXHMqZnVuY3Rpb24iCisgIHN5biBtYXRjaCAgZm9ydHJhblVuaXRIZWFkZXIJIlw8ZW5kXHMqaW50ZXJmYWNlIgorICBzeW4gbWF0Y2ggIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGVuZFxzKm1vZHVsZSIKKyAgc3luIG1hdGNoICBmb3J0cmFuVW5pdEhlYWRlcgkiXDxlbmRccypwcm9ncmFtIgorICBzeW4gbWF0Y2ggIGZvcnRyYW5Vbml0SGVhZGVyCSJcPGVuZFxzKnN1YnJvdXRpbmUiCisgIHN5biBtYXRjaCAgZm9ydHJhblJlcGVhdAkiXDxlbmRccypkbyIKKyAgc3luIG1hdGNoICBmb3J0cmFuQ29uZGl0aW9uYWwJIlw8ZW5kXHMqd2hlcmUiCisgIHN5biBtYXRjaCAgZm9ydHJhbkNvbmRpdGlvbmFsCSJcPHNlbGVjdFxzKmNhc2UiCisgIHN5biBtYXRjaCAgZm9ydHJhbkNvbmRpdGlvbmFsCSJcPGVuZFxzKnNlbGVjdCIKKyAgc3luIG1hdGNoICBmb3J0cmFuVHlwZQkiXDxlbmRccyp0eXBlIgorICBzeW4gbWF0Y2ggIGZvcnRyYW5UeXBlCSJcPGluXHMqb3V0IgorCisgIHN5biBrZXl3b3JkIGZvcnRyYW5Vbml0SGVhZGVyRXgJcHJvY2VkdXJlCisgIHN5biBrZXl3b3JkIGZvcnRyYW5JT0V4CQluYW1lbGlzdAorICBzeW4ga2V5d29yZCBmb3J0cmFuQ29uZGl0aW9uYWxFeAl3aGlsZQorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBJbnRyaW5zaWNFeAlhY2hhciBpYWNoYXIgdHJhbnNmZXIKKworICBzeW4ga2V5d29yZCBmb3J0cmFuSW5jbHVkZQkJaW5jbHVkZQorICBzeW4ga2V5d29yZCBmb3J0cmFuOTBTdG9yYWdlQ2xhc3NSCXNlcXVlbmNlCitlbmRpZgorCitzeW4gbWF0Y2ggICBmb3J0cmFuQ29uZGl0aW9uYWwJIlw8ZW5kXHMqaWYiCitzeW4gbWF0Y2ggICBmb3J0cmFuSU8JCWNvbnRhaW5zPWZvcnRyYW5PcGVyYXRvciAiXDxlXChuZFx8cnJcKVxzKj1ccypcZFwrIgorc3luIG1hdGNoICAgZm9ydHJhbkNvbmRpdGlvbmFsCSJcPGVsc2VccyppZiIKKworc3luIGtleXdvcmQgZm9ydHJhblVuaXRIZWFkZXJSCWVudHJ5CitzeW4gbWF0Y2ggZm9ydHJhblR5cGVSCQlkaXNwbGF5ICJkb3VibGVcc1wrcHJlY2lzaW9uIgorc3luIG1hdGNoIGZvcnRyYW5UeXBlUgkJZGlzcGxheSAiZG91YmxlXHNcK2NvbXBsZXgiCitzeW4gbWF0Y2ggZm9ydHJhblVuaXRIZWFkZXJSCWRpc3BsYXkgImJsb2NrXHNcK2RhdGEiCitzeW4ga2V5d29yZCBmb3J0cmFuU3RvcmFnZUNsYXNzUgljb21tb24gZXF1aXZhbGVuY2UgZGF0YQorc3luIGtleXdvcmQgZm9ydHJhbjc3SW50cmluc2ljUglkYmxlIGRwcm9kCitzeW4gbWF0Y2ggICBmb3J0cmFuNzdPcGVyYXRvclIJIlwuXHMqW2dsXVtldF1ccypcLiIKK3N5biBtYXRjaCAgIGZvcnRyYW43N09wZXJhdG9yUgkiXC5ccypcKGVxXHxuZVwpXHMqXC4iCisKK2lmIGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJmOTUiCisgIHN5biBrZXl3b3JkIGZvcnRyYW5SZXBlYXQJCWZvcmFsbAorICBzeW4gbWF0Y2ggZm9ydHJhblJlcGVhdAkJIlw8ZW5kXHMqZm9yYWxsIgorICBzeW4ga2V5d29yZCBmb3J0cmFuOTVJbnRyaW5zaWMJbnVsbCBjcHVfdGltZQorICBzeW4gbWF0Y2ggZm9ydHJhblR5cGUJCQkiXDxlbGVtZW50YWxcPiIKKyAgc3luIG1hdGNoIGZvcnRyYW5UeXBlCQkJIlw8cHVyZVw+IgorICBpZiBleGlzdHMoImZvcnRyYW5fbW9yZV9wcmVjaXNlIikKKyAgICBzeW4gbWF0Y2ggZm9ydHJhbkNvbnN0cnVjdE5hbWUgIlwoXDxlbmRccypmb3JhbGxcc1wrXClcQDw9XGFcdypcPiIKKyAgZW5kaWYKK2VuZGlmCisKK3N5biBjbHVzdGVyIGZvcnRyYW5Db21tZW50R3JvdXAgY29udGFpbnM9Zm9ydHJhblRvZG8KKworaWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMSkKKyAgaWYgIWV4aXN0cygiZm9ydHJhbl9oYXZlX3RhYnMiKQorICAgICJGbGFnIGl0ZW1zIGJleW9uZCBjb2x1bW4gNzIKKyAgICBzeW4gbWF0Y2ggZm9ydHJhblNlcmlhbE51bWJlcglleGNsdWRlbmwgIl4uXHs3Myx9JCJsYz03MgorICAgICJGbGFnIGxlZnQgbWFyZ2luIGVycm9ycworICAgIHN5biBtYXRjaCBmb3J0cmFuTGFiZWxFcnJvcgkiXi5cey0sNH1bXjAtOSBdIiBjb250YWlucz1mb3J0cmFuVGFiCisgICAgc3luIG1hdGNoIGZvcnRyYW5MYWJlbEVycm9yCSJeLlx7NH1cZFxTIgorICBlbmRpZgorICBzeW4gbWF0Y2ggZm9ydHJhbkNvbW1lbnQJCWV4Y2x1ZGVubCAiXlshYypdLiokIiBjb250YWlucz1AZm9ydHJhbkNvbW1lbnRHcm91cAorICBzeW4gbWF0Y2ggZm9ydHJhbkxlZnRNYXJnaW4JCXRyYW5zcGFyZW50ICJeIFx7NX0iCisgIHN5biBtYXRjaCBmb3J0cmFuQ29udGludWVNYXJrCQlkaXNwbGF5ICJeLlx7NX1cUyJsYz01CitlbHNlCisgIHN5biBtYXRjaCBmb3J0cmFuQ29udGludWVNYXJrCQlkaXNwbGF5ICImIgorZW5kaWYKKworaWYgYjpmb3J0cmFuX2RpYWxlY3QgIT0gImY3NyIKKyAgc3luIG1hdGNoIGZvcnRyYW5Db21tZW50CWV4Y2x1ZGVubCAiIS4qJCIgY29udGFpbnM9QGZvcnRyYW5Db21tZW50R3JvdXAKK2VuZGlmCisKKyJjcHAgaXMgb2Z0ZW4gdXNlZCB3aXRoIEZvcnRyYW4KK3N5biBtYXRjaAljUHJlUHJvYwkJIl5ccyojXHMqXChkZWZpbmVcfGlmZGVmXClcPi4qIgorc3luIG1hdGNoCWNQcmVQcm9jCQkiXlxzKiNccypcKGVsaWZcfGlmXClcPi4qIgorc3luIG1hdGNoCWNQcmVQcm9jCQkiXlxzKiNccypcKGlmbmRlZlx8dW5kZWZcKVw+LioiCitzeW4gbWF0Y2gJY1ByZUNvbmRpdAkJIl5ccyojXHMqXChlbHNlXHxlbmRpZlwpXD4uKiIKK3N5biByZWdpb24JY0luY2x1ZGVkCWNvbnRhaW5lZCBzdGFydD0rIlteKF0rIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKyBjb250YWlucz1mb3J0cmFuTGVmdE1hcmdpbixmb3J0cmFuQ29udGludWVNYXJrLGZvcnRyYW5TZXJpYWxOdW1iZXIKK3N5biBtYXRjaAljSW5jbHVkZWQJCWNvbnRhaW5lZCAiPFtePl0qPiIKK3N5biBtYXRjaAljSW5jbHVkZQkJIl5ccyojXHMqaW5jbHVkZVw+XHMqWyI8XSIgY29udGFpbnM9Y0luY2x1ZGVkCisKKyJTeW5jaHJvbmlzaW5nIGxpbWl0cyBhc3N1bWUgdGhhdCBjb21tZW50IGFuZCBjb250aW51YXRpb24gbGluZXMgYXJlIG5vdCBtaXhlZAoraWYgKGI6Zm9ydHJhbl9maXhlZF9zb3VyY2UgPT0gMCkKKyAgc3luIHN5bmMgbGluZWNvbnQgIiYiIG1heGxpbmVzPTQwCitlbHNlCisgIHN5biBzeW5jIG1pbmxpbmVzPTIwCitlbmRpZgorCitpZiB2ZXJzaW9uID49IDYwMCAmJiBleGlzdHMoImZvcnRyYW5fZm9sZCIpCisKKyAgc3luIHN5bmMgZnJvbXN0YXJ0CisgIGlmIChiOmZvcnRyYW5fZml4ZWRfc291cmNlID09IDEpCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuUHJvZ3JhbSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgc3RhcnQ9Il5ccypwcm9ncmFtXHNcK1x6KFxhXHcqXCkiIHNraXA9Il5cKFshYypdXHxccyojXCkuKiQiIGV4Y2x1ZGVubCBlbmQ9Ilw8ZW5kXHMqXChwcm9ncmFtXChcc1wrXHoxXD5cKVw9XHwkXCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuTW9kdWxlCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuTW9kdWxlIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXlxzKm1vZHVsZVxzXCtcKHByb2NlZHVyZVwpXEAhXHooXGFcdypcKSIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKG1vZHVsZVwoXHNcK1x6MVw+XClcPVx8JFwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0KKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5GdW5jdGlvbiB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJeXHMqXChlbGVtZW50YWwgXHxwdXJlIFx8cmVjdXJzaXZlIFwpXD1ccypmdW5jdGlvblxzXCtceihcYVx3KlwpIiBza2lwPSJeXChbIWMqXVx8XHMqI1wpLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKlwoJFx8ZnVuY3Rpb25cKFxzXCtcejFcPlwpXD1cKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUKKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5TdWJyb3V0aW5lIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9Il5ccypcKGVsZW1lbnRhbCBcfHB1cmUgXHxyZWN1cnNpdmUgXClcPVxzKnN1YnJvdXRpbmVcc1wrXHooXGFcdypcKSIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfHN1YnJvdXRpbmVcKFxzXCtcejFcPlwpXD1cKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUKKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5CbG9ja0RhdGEgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJcPGJsb2NrXHMqZGF0YVxzXCtceihcYVx3KlwpIiBza2lwPSJeXChbIWMqXVx8XHMqI1wpLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKlwoJFx8YmxvY2tccypkYXRhXChcc1wrXHoxXD5cKVw9XCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlLGZvcnRyYW5TdWJyb3V0aW5lLGZvcnRyYW5GdW5jdGlvbixmb3J0cmFuNzdMb29wLGZvcnRyYW5DYXNlLGZvcnRyYW45MExvb3AsZm9ydHJhbklmQmxvY2sKKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5JbnRlcmZhY2UgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXlxzKmludGVyZmFjZVw+IiBza2lwPSJeXChbIWMqXVx8XHMqI1wpLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKmludGVyZmFjZVw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuNzdMb29wLGZvcnRyYW5DYXNlLGZvcnRyYW45MExvb3AsZm9ydHJhbklmQmxvY2sKKyAgZWxzZQorICAgIHN5biByZWdpb24gZm9ydHJhblByb2dyYW0gdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJeXHMqcHJvZ3JhbVxzXCtceihcYVx3KlwpIiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKHByb2dyYW1cKFxzXCtcejFcPlwpXD1cfCRcKSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Nb2R1bGUKKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5Nb2R1bGUgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJeXHMqbW9kdWxlXHNcK1wocHJvY2VkdXJlXClcQCFceihcYVx3KlwpIiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKG1vZHVsZVwoXHNcK1x6MVw+XClcPVx8JFwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0KKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5GdW5jdGlvbiB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJeXHMqXChlbGVtZW50YWwgXHxwdXJlIFx8cmVjdXJzaXZlIFwpXD1ccypmdW5jdGlvblxzXCtceihcYVx3KlwpIiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccypcKCRcfGZ1bmN0aW9uXChcc1wrXHoxXD5cKVw9XCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlCisgICAgc3luIHJlZ2lvbiBmb3J0cmFuU3Vicm91dGluZSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJeXHMqXChlbGVtZW50YWwgXHxwdXJlIFx8cmVjdXJzaXZlIFwpXD1ccypzdWJyb3V0aW5lXHNcK1x6KFxhXHcqXCkiIHNraXA9Il5ccypbISNdLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKlwoJFx8c3Vicm91dGluZVwoXHNcK1x6MVw+XClcPVwpIiBjb250YWlucz1BTExCVVQsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZQorICAgIHN5biByZWdpb24gZm9ydHJhbkJsb2NrRGF0YSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgc3RhcnQ9Ilw8YmxvY2tccypkYXRhXHNcK1x6KFxhXHcqXCkiIHNraXA9Il5ccypbISNdLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKlwoJFx8YmxvY2tccypkYXRhXChcc1wrXHoxXD5cKVw9XCkiIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuUHJvZ3JhbSxmb3J0cmFuTW9kdWxlLGZvcnRyYW5TdWJyb3V0aW5lLGZvcnRyYW5GdW5jdGlvbixmb3J0cmFuNzdMb29wLGZvcnRyYW5DYXNlLGZvcnRyYW45MExvb3AsZm9ydHJhbklmQmxvY2sKKyAgICBzeW4gcmVnaW9uIGZvcnRyYW5JbnRlcmZhY2UgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXlxzKmludGVyZmFjZVw+IiBza2lwPSJeXHMqWyEjXS4qJCIgZXhjbHVkZW5sIGVuZD0iXDxlbmRccyppbnRlcmZhY2VcPiIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhbjc3TG9vcCxmb3J0cmFuQ2FzZSxmb3J0cmFuOTBMb29wLGZvcnRyYW5JZkJsb2NrCisgIGVuZGlmCisKKyAgaWYgZXhpc3RzKCJmb3J0cmFuX2ZvbGRfY29uZGl0aW9uYWxzIikKKyAgICBpZiAoYjpmb3J0cmFuX2ZpeGVkX3NvdXJjZSA9PSAxKQorICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuNzdMb29wIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBzdGFydD0iXDxkb1xzXCtceihcZFwrXCkiIGVuZD0iXlxzKlx6MVw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKKyAgICAgIHN5biByZWdpb24gZm9ydHJhbjkwTG9vcCB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJcKFw8ZW5kXHNcK1wpXEA8IVw8ZG9cKFxzXCtcYVx8XHMqJFwpIiBza2lwPSJeXChbIWMqXVx8XHMqI1wpLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKmRvXD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuVW5pdEhlYWRlcixmb3J0cmFuU3RydWN0dXJlLGZvcnRyYW5TdG9yYWdlQ2xhc3MsZm9ydHJhblR5cGUsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbkJsb2NrRGF0YQorICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuSWZCbG9jayB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJcKFw8ZVwobmRcfGxzZVwpXHNcK1wpXEA8IVw8aWZccyooLlwrKVxzKnRoZW5cPiIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZW5kPSJcPGVuZFxzKmlmXD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuVW5pdEhlYWRlcixmb3J0cmFuU3RydWN0dXJlLGZvcnRyYW5TdG9yYWdlQ2xhc3MsZm9ydHJhblR5cGUsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbkJsb2NrRGF0YQorICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuQ2FzZSB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJcPHNlbGVjdFxzKmNhc2VcPiIgc2tpcD0iXlwoWyFjKl1cfFxzKiNcKS4qJCIgZW5kPSJcPGVuZFxzKnNlbGVjdFw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKKyAgICBlbHNlCisgICAgICBzeW4gcmVnaW9uIGZvcnRyYW43N0xvb3AgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIHN0YXJ0PSJcPGRvXHNcK1x6KFxkXCtcKSIgZW5kPSJeXHMqXHoxXD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuVW5pdEhlYWRlcixmb3J0cmFuU3RydWN0dXJlLGZvcnRyYW5TdG9yYWdlQ2xhc3MsZm9ydHJhblR5cGUsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbkJsb2NrRGF0YQorICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuOTBMb29wIHRyYW5zcGFyZW50IGZvbGQga2VlcGVuZCBleHRlbmQgc3RhcnQ9IlwoXDxlbmRcc1wrXClcQDwhXDxkb1woXHNcK1xhXHxccyokXCkiIHNraXA9Il5ccypbISNdLiokIiBleGNsdWRlbmwgZW5kPSJcPGVuZFxzKmRvXD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuVW5pdEhlYWRlcixmb3J0cmFuU3RydWN0dXJlLGZvcnRyYW5TdG9yYWdlQ2xhc3MsZm9ydHJhblR5cGUsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbkJsb2NrRGF0YQorICAgICAgc3luIHJlZ2lvbiBmb3J0cmFuSWZCbG9jayB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgZXh0ZW5kIHN0YXJ0PSJcKFw8ZVwobmRcfGxzZVwpXHNcK1wpXEA8IVw8aWZccyooLlwrKVxzKnRoZW5cPiIgc2tpcD0iXlxzKlshI10uKiQiIGVuZD0iXDxlbmRccyppZlw+IiBjb250YWlucz1BTExCVVQsZm9ydHJhblVuaXRIZWFkZXIsZm9ydHJhblN0cnVjdHVyZSxmb3J0cmFuU3RvcmFnZUNsYXNzLGZvcnRyYW5UeXBlLGZvcnRyYW5Qcm9ncmFtLGZvcnRyYW5Nb2R1bGUsZm9ydHJhblN1YnJvdXRpbmUsZm9ydHJhbkZ1bmN0aW9uLGZvcnRyYW5CbG9ja0RhdGEKKyAgICAgIHN5biByZWdpb24gZm9ydHJhbkNhc2UgdHJhbnNwYXJlbnQgZm9sZCBrZWVwZW5kIGV4dGVuZCBzdGFydD0iXDxzZWxlY3RccypjYXNlXD4iIHNraXA9Il5ccypbISNdLiokIiBlbmQ9Ilw8ZW5kXHMqc2VsZWN0XD4iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuVW5pdEhlYWRlcixmb3J0cmFuU3RydWN0dXJlLGZvcnRyYW5TdG9yYWdlQ2xhc3MsZm9ydHJhblR5cGUsZm9ydHJhblByb2dyYW0sZm9ydHJhbk1vZHVsZSxmb3J0cmFuU3Vicm91dGluZSxmb3J0cmFuRnVuY3Rpb24sZm9ydHJhbkJsb2NrRGF0YQorICAgIGVuZGlmCisgIGVuZGlmCisKKyAgaWYgZXhpc3RzKCJmb3J0cmFuX2ZvbGRfbXVsdGlsaW5lY29tbWVudHMiKQorICAgIGlmIChiOmZvcnRyYW5fZml4ZWRfc291cmNlID09IDEpCisgICAgICBzeW4gbWF0Y2ggZm9ydHJhbk11bHRpTGluZUNvbW1lbnRzIHRyYW5zcGFyZW50IGZvbGQgIlwoXlshYypdLipcKFxuXHxcJSRcKVwpXHs0LH0iIGNvbnRhaW5zPUFMTEJVVCxmb3J0cmFuTXVsdGlDb21tZW50TGluZXMKKyAgICBlbHNlCisgICAgICBzeW4gbWF0Y2ggZm9ydHJhbk11bHRpTGluZUNvbW1lbnRzIHRyYW5zcGFyZW50IGZvbGQgIlwoXlxzKiEuKlwoXG5cfFwlJFwpXClcezQsfSIgY29udGFpbnM9QUxMQlVULGZvcnRyYW5NdWx0aUNvbW1lbnRMaW5lcworICAgIGVuZGlmCisgIGVuZGlmCitlbmRpZgorCisiIERlZmluZSB0aGUgZGVmYXVsdCBoaWdobGlnaHRpbmcuCisiIEZvciB2ZXJzaW9uIDUuNyBhbmQgZWFybGllcjogb25seSB3aGVuIG5vdCBkb25lIGFscmVhZHkKKyIgRm9yIHZlcnNpb24gNS44IGFuZCBsYXRlcjogb25seSB3aGVuIGFuIGl0ZW0gZG9lc24ndCBoYXZlIGhpZ2hsaWdodGluZyB5ZXQKK2lmIHZlcnNpb24gPj0gNTA4IHx8ICFleGlzdHMoImRpZF9mb3J0cmFuX3N5bl9pbml0cyIpCisgIGlmIHZlcnNpb24gPCA1MDgKKyAgICBsZXQgZGlkX2ZvcnRyYW5fc3luX2luaXRzID0gMQorICAgIGNvbW1hbmQgLW5hcmdzPSsgSGlMaW5rIGhpIGxpbmsgPGFyZ3M+CisgIGVsc2UKKyAgICBjb21tYW5kIC1uYXJncz0rIEhpTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgZW5kaWYKKworICAiIFRoZSBkZWZhdWx0IGhpZ2hsaWdodGluZyBkaWZmZXJzIGZvciBlYWNoIGRpYWxlY3QuCisgICIgVHJhbnNwYXJlbnQgZ3JvdXBzOgorICAiIGZvcnRyYW5QYXJlbiwgZm9ydHJhbkxlZnRNYXJnaW4KKyAgIiBmb3J0cmFuUHJvZ3JhbSwgZm9ydHJhbk1vZHVsZSwgZm9ydHJhblN1YnJvdXRpbmUsIGZvcnRyYW5GdW5jdGlvbiwKKyAgIiBmb3J0cmFuQmxvY2tEYXRhCisgICIgZm9ydHJhbjc3TG9vcCwgZm9ydHJhbjkwTG9vcCwgZm9ydHJhbklmQmxvY2ssIGZvcnRyYW5DYXNlCisgICIgZm9ydHJhbk11bHRpQ29tbWVudExpbmVzCisgIEhpTGluayBmb3J0cmFuU3RhdGVtZW50CQlTdGF0ZW1lbnQKKyAgSGlMaW5rIGZvcnRyYW5Db25zdHJ1Y3ROYW1lCVNwZWNpYWwKKyAgSGlMaW5rIGZvcnRyYW5Db25kaXRpb25hbAkJQ29uZGl0aW9uYWwKKyAgSGlMaW5rIGZvcnRyYW5SZXBlYXQJCVJlcGVhdAorICBIaUxpbmsgZm9ydHJhblRvZG8JCQlUb2RvCisgIEhpTGluayBmb3J0cmFuQ29udGludWVNYXJrCQlUb2RvCisgIEhpTGluayBmb3J0cmFuU3RyaW5nCQlTdHJpbmcKKyAgSGlMaW5rIGZvcnRyYW5OdW1iZXIJCU51bWJlcgorICBIaUxpbmsgZm9ydHJhbk9wZXJhdG9yCQlPcGVyYXRvcgorICBIaUxpbmsgZm9ydHJhbkJvb2xlYW4JCUJvb2xlYW4KKyAgSGlMaW5rIGZvcnRyYW5MYWJlbEVycm9yCQlFcnJvcgorICBIaUxpbmsgZm9ydHJhbk9ic29sZXRlCQlUb2RvCisgIEhpTGluayBmb3J0cmFuVHlwZQkJCVR5cGUKKyAgSGlMaW5rIGZvcnRyYW5TdHJ1Y3R1cmUJCVR5cGUKKyAgSGlMaW5rIGZvcnRyYW5TdG9yYWdlQ2xhc3MJCVN0b3JhZ2VDbGFzcworICBIaUxpbmsgZm9ydHJhbkNhbGwJCQlmb3J0cmFuVW5pdEhlYWRlcgorICBIaUxpbmsgZm9ydHJhblVuaXRIZWFkZXIJCWZvcnRyYW5QcmVDb25kaXQKKyAgSGlMaW5rIGZvcnRyYW5SZWFkV3JpdGUJCWZvcnRyYW45MEludHJpbnNpYworICBIaUxpbmsgZm9ydHJhbklPCQkJZm9ydHJhbjkwSW50cmluc2ljCisgIEhpTGluayBmb3J0cmFuOTVJbnRyaW5zaWMJCWZvcnRyYW45MEludHJpbnNpYworICBIaUxpbmsgZm9ydHJhbjc3SW50cmluc2ljCQlmb3J0cmFuOTBJbnRyaW5zaWMKKyAgSGlMaW5rIGZvcnRyYW45MEludHJpbnNpYwkJU3BlY2lhbAorCisgIGlmICggYjpmb3J0cmFuX2RpYWxlY3QgPT0gImVsZiIgfHwgYjpmb3J0cmFuX2RpYWxlY3QgPT0gIkYiICkKKyAgICBIaUxpbmsgZm9ydHJhblN0YXRlbWVudE9iCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuNjZJbnRyaW5zaWMJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW43N0ludHJpbnNpY1IJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5Vbml0SGVhZGVyUglmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhblR5cGVSCQlmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhblN0b3JhZ2VDbGFzc1IJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW45MFN0b3JhZ2VDbGFzc1IJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW43N09wZXJhdG9yUglmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhbkluY2x1ZGUJCWZvcnRyYW5PYnNvbGV0ZQorICBlbHNlCisgICAgSGlMaW5rIGZvcnRyYW5TdGF0ZW1lbnRPYglTdGF0ZW1lbnQKKyAgICBIaUxpbmsgZm9ydHJhbjY2SW50cmluc2ljCWZvcnRyYW45MEludHJpbnNpYworICAgIEhpTGluayBmb3J0cmFuNzdJbnRyaW5zaWNSCWZvcnRyYW45MEludHJpbnNpYworICAgIEhpTGluayBmb3J0cmFuVW5pdEhlYWRlclIJZm9ydHJhblByZUNvbmRpdAorICAgIEhpTGluayBmb3J0cmFuVHlwZVIJCWZvcnRyYW5UeXBlCisgICAgSGlMaW5rIGZvcnRyYW5TdG9yYWdlQ2xhc3NSCWZvcnRyYW5TdG9yYWdlQ2xhc3MKKyAgICBIaUxpbmsgZm9ydHJhbjc3T3BlcmF0b3JSCWZvcnRyYW5PcGVyYXRvcgorICAgIEhpTGluayBmb3J0cmFuSW5jbHVkZQkJSW5jbHVkZQorICAgIEhpTGluayBmb3J0cmFuOTBTdG9yYWdlQ2xhc3NSCWZvcnRyYW5TdG9yYWdlQ2xhc3MKKyAgZW5kaWYKKworICBpZiAoIGI6Zm9ydHJhbl9kaWFsZWN0ID09ICJGIiApCisgICAgSGlMaW5rIGZvcnRyYW5MYWJlbE51bWJlcglmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhblRhcmdldAkJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5Gb3JtYXRTcGVjCQlmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhbkZsb2F0REV4cAkJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5GbG9hdE5vRGVjCQlmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhbkZsb2F0SW5pRGVjCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuRmxvYXRFbmREZWMJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5UeXBlRXgJCWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuSU9FeAkJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5TdGF0ZW1lbnRFeAlmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhblN0cmluZ0V4CQlmb3J0cmFuT2Jzb2xldGUKKyAgICBIaUxpbmsgZm9ydHJhbjc3SW50cmluc2ljRXgJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5Vbml0SGVhZGVyRXgJZm9ydHJhbk9ic29sZXRlCisgICAgSGlMaW5rIGZvcnRyYW5Db25kaXRpb25hbEV4CWZvcnRyYW5PYnNvbGV0ZQorICAgIEhpTGluayBmb3J0cmFuOTBJbnRyaW5zaWNFeAlmb3J0cmFuT2Jzb2xldGUKKyAgZWxzZQorICAgIEhpTGluayBmb3J0cmFuTGFiZWxOdW1iZXIJU3BlY2lhbAorICAgIEhpTGluayBmb3J0cmFuVGFyZ2V0CQlTcGVjaWFsCisgICAgSGlMaW5rIGZvcnRyYW5Gb3JtYXRTcGVjCQlJZGVudGlmaWVyCisgICAgSGlMaW5rIGZvcnRyYW5GbG9hdERFeHAJCWZvcnRyYW5GbG9hdAorICAgIEhpTGluayBmb3J0cmFuRmxvYXROb0RlYwkJZm9ydHJhbkZsb2F0CisgICAgSGlMaW5rIGZvcnRyYW5GbG9hdEluaURlYwlmb3J0cmFuRmxvYXQKKyAgICBIaUxpbmsgZm9ydHJhbkZsb2F0RW5kRGVjCWZvcnRyYW5GbG9hdAorICAgIEhpTGluayBmb3J0cmFuVHlwZUV4CQlmb3J0cmFuVHlwZQorICAgIEhpTGluayBmb3J0cmFuSU9FeAkJZm9ydHJhbklPCisgICAgSGlMaW5rIGZvcnRyYW5TdGF0ZW1lbnRFeAlmb3J0cmFuU3RhdGVtZW50CisgICAgSGlMaW5rIGZvcnRyYW5TdHJpbmdFeAkJZm9ydHJhblN0cmluZworICAgIEhpTGluayBmb3J0cmFuNzdJbnRyaW5zaWNFeAlmb3J0cmFuOTBJbnRyaW5zaWMKKyAgICBIaUxpbmsgZm9ydHJhblVuaXRIZWFkZXJFeAlmb3J0cmFuVW5pdEhlYWRlcgorICAgIEhpTGluayBmb3J0cmFuQ29uZGl0aW9uYWxFeAlmb3J0cmFuQ29uZGl0aW9uYWwKKyAgICBIaUxpbmsgZm9ydHJhbjkwSW50cmluc2ljRXgJZm9ydHJhbjkwSW50cmluc2ljCisgIGVuZGlmCisKKyAgSGlMaW5rIGZvcnRyYW5GbG9hdAkJRmxvYXQKKyAgSGlMaW5rIGZvcnRyYW45MElkZW50aWZpZXIJCWZvcnRyYW5JZGVudGlmaWVyCisgICJVbmNvbW1lbnQgdGhlIG5leHQgbGluZSBpZiB5b3Ugd2FudCBhbGwgZm9ydHJhbiB2YXJpYWJsZXMgdG8gYmUgaGlnaGxpZ2h0ZWQKKyAgIkhpTGluayBmb3J0cmFuSWRlbnRpZmllcgkJSWRlbnRpZmllcgorICBIaUxpbmsgZm9ydHJhblByZUNvbmRpdAkJUHJlQ29uZGl0CisgIEhpTGluayBmb3J0cmFuSW5jbHVkZQkJSW5jbHVkZQorICBIaUxpbmsgY0luY2x1ZGVkCQkJZm9ydHJhblN0cmluZworICBIaUxpbmsgY0luY2x1ZGUJCQlJbmNsdWRlCisgIEhpTGluayBjUHJlUHJvYwkJCVByZVByb2MKKyAgSGlMaW5rIGNQcmVDb25kaXQJCQlQcmVDb25kaXQKKyAgSGlMaW5rIGZvcnRyYW5QYXJlbkVycm9yCQlFcnJvcgorICBIaUxpbmsgZm9ydHJhbkNvbW1lbnQJCUNvbW1lbnQKKyAgSGlMaW5rIGZvcnRyYW5TZXJpYWxOdW1iZXIJCVRvZG8KKyAgSGlMaW5rIGZvcnRyYW5UYWIJCQlFcnJvcgorICAiIFZlbmRvciBleHRlbnNpb25zCisgIEhpTGluayBmb3J0cmFuRXh0cmFJbnRyaW5zaWMJU3BlY2lhbAorCisgIGRlbGNvbW1hbmQgSGlMaW5rCitlbmRpZgorCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJmb3J0cmFuIgorCisiIHZpbTogdHM9OCB0dz0xMzIK