From df627152f7c1269fe9414a0905503a41f464f944 Mon Sep 17 00:00:00 2001 From: David R Newman Date: Thu, 7 Nov 2024 16:54:54 +0000 Subject: [PATCH] Properly sorts out checksum mismatch for Screen/Report.pm --- reports.epm | 960 ++++++++++++++++++++++++++------------------------- reports.epmi | 2 +- 2 files changed, 482 insertions(+), 480 deletions(-) diff --git a/reports.epm b/reports.epm index d23652c..44033a4 100644 --- a/reports.epm +++ b/reports.epm @@ -1,5 +1,5 @@ - + reports https://epm.eprints-hosting.org/id/epm/reports @@ -763,9 +763,9 @@ YWx1ZVwiIjsKCX0KCglyZXR1cm4gJHZhbHVlOwp9CgoKMTsK plugins/EPrints/Plugin/Screen/Report.pm text/plain - e88058df69ea1db3f145b316f6d1ada2 + 3f19c242174320590c457b433eaf6639 MD5 - 43956 + 44116 cGFja2FnZSBFUHJpbnRzOjpQbHVnaW46OlNjcmVlbjo6UmVwb3J0OwoKIyBBYnN0cmFjdCBjbGFz cyB0aGF0IGhhbmRsZXMgdGhlIFJlcG9ydCB0b29scwoKdXNlIEpTT04gcXcoZW5jb2RlX2pzb24p Owp1c2UgRVByaW50czo6UGx1Z2luOjpTY3JlZW47CkBJU0EgPSAoICdFUHJpbnRzOjpQbHVnaW46 @@ -1062,482 +1062,484 @@ aWR9ID0gJGZyYWcgdW5sZXNzIGV4aXN0cyAkc2VhcmNoX2Zvcm1zeyRmb3JtaWR9OwoJCX0JCgl9 CgkkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvcnRfc2VsZWN0ICk7CgkkZm9ybS0+YXBwZW5kQ2hp bGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAic2NyZWVuIiwgJHNlbGYtPntzY3JlZW5p ZH0gKSApOwoKCSNyZW5kZXIgcG9zc2libGUgc2VhcmNoIGZvcm1zCglmb3JlYWNoIG15ICRmb3Jt -aWQgKGtleXMgJXNlYXJjaF9mb3JtcykKCXsKCQlteSAkdGFibGUgPSAkcmVwby0+bWFrZV9lbGVt -ZW50KCAidGFibGUiLCBjbGFzcz0+ImVwX3NlYXJjaF9maWVsZHMiLCBpZD0+JGZvcm1pZCwgc3R5 -bGU9PiJkaXNwbGF5OiBub25lIiApOwoJICAgICAgICAkZm9ybS0+YXBwZW5kQ2hpbGQoICR0YWJs -ZSApOwoJICAgICAgICAkdGFibGUtPmFwcGVuZENoaWxkKCAkc2VhcmNoX2Zvcm1zeyRmb3JtaWR9 -ICk7Cgl9CgoJJGZvcm0tPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVyX2NvbnRyb2xzICk7Cgkk -Y3VzdG9tLT5hcHBlbmRDaGlsZCggJGZvcm0gKTsKCgkjamF2YXNjcmlwdCBmb3IgY2hhbmdpbmcg -Zm9ybXMgYmFzZWQgb24gcmVwb3J0IHNlbGVjdGlvbgoJJGN1c3RvbS0+YXBwZW5kQ2hpbGQoICRy -ZXBvLT5tYWtlX2phdmFzY3JpcHQoICdpbml0UmVwb3J0Rm9ybSgpOycgKSApOwoKCWlmKCAkY3Vz -dG9tX3JlcG9ydHMgJiYgJHByZXNldHNfYWRkZWQgPiAwICkgI3NldCB1cCB0YWIgaW50ZXJmYWNl -Cgl7CgkJbXkgQGxhYmVsczsKCSAgICAgICAgbXkgQHBhbmVsczsKCgkJcHVzaCBAbGFiZWxzLCAk -cmVwby0+aHRtbF9waHJhc2UoICJyZXBvcnRzX3ByZXNldCIgKTsKCQlwdXNoIEBsYWJlbHMsICRy -ZXBvLT5odG1sX3BocmFzZSggInJlcG9ydHNfY3VzdG9tIiApOwoKCQlwdXNoIEBwYW5lbHMsICRw -cmVzZXQ7CgkJcHVzaCBAcGFuZWxzLCAkY3VzdG9tOwoKCQlteSAlb3B0czsKCQlpZiggJHNlbGYt -Pntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAibmV3c2VhcmNoIiB8fCAkc2VsZi0+e3Byb2Nlc3Nv -cn0tPnthY3Rpb259IGVxICJ1cGRhdGUiICApCgkJewoJCQkkb3B0c3tjdXJyZW50fSA9IDE7CgkJ -fQoKCQlyZXR1cm4gJHJlcG8tPnhodG1sLT50YWJzKFxAbGFiZWxzLCBcQHBhbmVscywgJW9wdHMg -KTsKCX0KCWVsc2lmKCAkcHJlc2V0c19hZGRlZCA+IDAgKQoJewkKCQlyZXR1cm4gJHByZXNldDsK -CX0KCWVsc2UKCXsKCQlyZXR1cm4gJGN1c3RvbTsKCX0KfQoKc3ViIHJlbmRlcl9zZWFyY2hfZmll -bGRzCnsKICAgICAgICBteSggJHNlbGYsICRzZWFyY2gsICRmb3JtaWQgKSA9IEBfOwoKCW15ICRl -eHAgPSAkc2VsZi0+e3Nlc3Npb259LT5wYXJhbSggImV4cCIgKTsKCW15ICRzY29uZiA9ICRzZWxm -LT57c2Vzc2lvbn0tPnBhcmFtKCAic2NvbmYiICk7CiAgICAgICAgaWYoIGRlZmluZWQgJGV4cCAm -JiBkZWZpbmVkICRzY29uZiAmJiAkc2NvbmYgZXEgJGZvcm1pZCApCgl7CiAgICAgICAgICAgICAg -ICAkc2VhcmNoLT5mcm9tX3N0cmluZyggJGV4cCApOwogIAl9CgogICAgICAgIG15ICRmcmFnID0g -JHNlbGYtPntzZXNzaW9ufS0+bWFrZV9kb2NfZnJhZ21lbnQ7CiAgICAgICAgZm9yZWFjaCBteSAk -c2YgKCAkc2VhcmNoLT5nZXRfbm9uX2ZpbHRlcl9zZWFyY2hmaWVsZHMgKQogICAgICAgIHsKCSAg -ICAgICAgICRmcmFnLT5hcHBlbmRDaGlsZCgKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYt -PntzZXNzaW9ufS0+cmVuZGVyX3Jvd193aXRoX2hlbHAoCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaGVscF9wcmVmaXggPT4gJHNmLT5nZXRfZm9ybV9wcmVmaXguIl9oZWxwIiwKICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwID0+ICRzZi0+cmVuZGVyX2hlbHAsCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPT4gJHNmLT5yZW5kZXJfbmFtZSwK -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9PiAkc2YtPnJlbmRlciwKICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub190b2dnbGUgPT4gKCAkc2YtPntzaG93X2hl -bHB9IGVxICJhbHdheXMiICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9faGVs -cCA9PiAoICRzZi0+e3Nob3dfaGVscH0gZXEgIm5ldmVyIiApLAogICAgICAgIAkpICk7CiAgICAg -ICAgfQoKICAgICAgICByZXR1cm4gJGZyYWc7Cn0KCnN1YiByZW5kZXJfY29udHJvbHMKewoJbXko -ICRzZWxmLCAkd2l0aF9qcyApID0gQF87CgoJbXkgJGRpdiA9ICRzZWxmLT57c2Vzc2lvbn0tPm1h -a2VfZWxlbWVudCgKICAgICAgICAgICAgICAgICJkaXYiICwKICAgICAgICAgICAgICAgIGNsYXNz -ID0+ICJlcF9zZWFyY2hfYnV0dG9ucyIgKTsKICAgICAgICAkZGl2LT5hcHBlbmRDaGlsZCggJHNl -bGYtPntzZXNzaW9ufS0+cmVuZGVyX2FjdGlvbl9idXR0b25zKAogICAgICAgICAgICAgICAgX29y -ZGVyID0+IFsgInNlYXJjaCIgXSwKICAgICAgICAgICAgICAgICNuZXdzZWFyY2ggPT4gJHNlbGYt -PntzZXNzaW9ufS0+cGhyYXNlKCAibGliL3NlYXJjaGV4cHJlc3Npb246YWN0aW9uX3Jlc2V0IiAp -LAogICAgICAgICAgICAgICAgc2VhcmNoID0+ICRzZWxmLT57c2Vzc2lvbn0tPnBocmFzZSggImxp -Yi9zZWFyY2hleHByZXNzaW9uOmFjdGlvbl9zZWFyY2giICkgKQogICAgICAgICk7CgkKCW15ICR4 -bWwgPSAkc2VsZi0+e3Nlc3Npb259LT54bWw7CgoJaWYoICR3aXRoX2pzICkKCXsKCQlteSAkY2xl -YXJfZm9ybSA9ICRkaXYtPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVyX2NsZWFyZm9ybSggJHht -bCApICk7Cgl9CgogICAgICAgIG15ICRjbGVhcl9idG4gPSAkZGl2LT5hcHBlbmRDaGlsZCggJHht -bC0+Y3JlYXRlX2VsZW1lbnQoICJidXR0b24iLAogICAgICAgIAl0eXBlID0+ICJidXR0b24iLAog -ICAgICAgICAgICAgICAgb25jbGljayA9PiAiY2xlYXJGb3JtKCk7IiwKICAgICAgICAgICAgICAg -IGNsYXNzID0+ICJlcF9mb3JtX2FjdGlvbl9idXR0b24gY2xlYXJfYnV0dG9uIiwKICAgICAgICAg -ICAgICAgICkgKTsKICAgICAgICAkY2xlYXJfYnRuLT5hcHBlbmRDaGlsZCggJHhtbC0+Y3JlYXRl -X3RleHRfbm9kZSggJHNlbGYtPntzZXNzaW9ufS0+aHRtbF9waHJhc2UoICJsaWIvc2VhcmNoZXhw -cmVzc2lvbjphY3Rpb25fcmVzZXQiICkgKSApOwoJcmV0dXJuICRkaXY7Cn0KCnN1YiByZW5kZXIK -ewoJbXkoICRzZWxmICkgPSBAXzsKCgkjIGlmIHVzZXJzIGFjY2VzcyBTY3JlZW46OlJlcG9ydCBk -aXJlY3RseSB3ZSB3YW50IHRvIGRpc3BsYXkgc29tZSBzb3J0IG9mIG1lbnUKCSMgd2hlcmUgdXNl -cnMgY2FuIHNlbGVjdCB2aWV3YWJsZSByZXBvcnRzCglpZiggKCAiRVByaW50czo6UGx1Z2luOjoi -LiRzZWxmLT5nZXRfaWQgZXEgX19QQUNLQUdFX18gJiYgJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0 -aW9ufSBuZSAic2VhcmNoIiApIHx8ICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gZXEgIm5l -d3NlYXJjaCIgKQoJewkKCQlyZXR1cm4gJHNlbGYtPnJlbmRlcl9zcGxhc2hfcGFnZTsKCX0KCglt -eSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoKCW15ICRjaHVuayA9ICRyZXBvLT5tYWtlX2Rv -Y19mcmFnbWVudDsKCgkkY2h1bmstPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVyX2V4cG9ydF9i -YXIgKTsKCSRjaHVuay0+YXBwZW5kQ2hpbGQoICRzZWxmLT5yZW5kZXJfZ3JvdXBfb3B0aW9ucyAp -OwoJJGNodW5rLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9zb3J0X29wdGlvbnMgKTsKCglp -ZiggJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAic2VhcmNoIiApCgl7CgkJJGNodW5r -LT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9yZWZpbmVfc2VhcmNoICk7Cgl9CgoJbXkgJGl0 -ZW1zID0gJHNlbGYtPml0ZW1zOwoJaWYoICFkZWZpbmVkICRpdGVtcyB8fCAkaXRlbXMtPmNvdW50 -ID09IDAgKQoJewoJCSMgTm8gaXRlbXMgbWVzc2FnZQoJfQoKCW15ICRqc29uOwoKCWlmKCBkZWZp -bmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwfSAmJiAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntn -cm91cH0gbmUgIiIgKQoJewoJCW15ICRncm91cGVkID0gJHNlbGYtPmdldF9ncm91cGVkX2l0ZW1z -KCAkaXRlbXMsIDEgKTsKCQkkanNvbiA9IGVuY29kZV9qc29uICRncm91cGVkOwoJfQoJZWxzZQoJ -ewoJCW15ICRpdGVtX2lkcyA9IGRlZmluZWQgJGl0ZW1zID8gJGl0ZW1zLT5pZHMgOiBbXTsKCQkk -anNvbiA9ICJbIi5qb2luKCcsJyxAJGl0ZW1faWRzKS4iXSI7Cgl9CgogICAgICAgIG15ICR1cmwg -PSAkcmVwby0+Y3VycmVudF91cmwoIGhvc3QgPT4gMSApOwogICAgICAgIG15ICRwYXJhbWV0ZXJz -ID0gVVJJLT5uZXc7CiAgICAgICAgJHBhcmFtZXRlcnMtPnF1ZXJ5X2Zvcm0oCiAgICAgICAgICAg -ICAgICAkc2VsZi0+aGlkZGVuX2JpdHMsCiAgICAgICAgKTsKICAgICAgICAkcGFyYW1ldGVycyA9 -ICRwYXJhbWV0ZXJzLT5xdWVyeTsKCQkKCW15ICRkcyA9ICRyZXBvLT5kYXRhc2V0KCAkc2VsZi0+ -cGFyYW0oICdkYXRhc2V0aWQnICkgKSBpZiBkZWZpbmVkICRzZWxmLT5wYXJhbSggJ2RhdGFzZXRp -ZCcgKTsKCW15ICRwcmVmaXggPSAkZHMtPmJhc2VfaWQgaWYgZGVmaW5lZCAkZHM7CgoJIyB0aGUg -bWFpbiA8ZGl2PgoJbXkgJGNvbnRhaW5lcl9pZCA9IHNwcmludGYoICJlcF9yZXBvcnRfJXNcX2Nv -bnRhaW5lciIsICRzZWxmLT5nZXRfcmVwb3J0ICk7CgoJI3VwZGF0ZSBqYXZhc2NyaXB0IHBhcmFt -ZXRlcnMgaWYgY29taW5nIGZyb20gYSBzZWFyY2ggcmVxdWVzdAoJaWYoICRzZWxmLT57cHJvY2Vz -c29yfS0+e2FjdGlvbn0gZXEgInNlYXJjaCIgKQoJewoJCW15ICRwbHVnaW4gPSAkc2VsZi0+e3By -b2Nlc3Nvcn0tPntyZXBvcnR9OwoJCSRwbHVnaW4gPX4gcy86LyUzQS9nOwoJCSRwYXJhbWV0ZXJz -ID0gInNjcmVlbj0kcGx1Z2luIjsKCQkkcHJlZml4ID0gJHNlbGYtPntwcm9jZXNzb3J9LT57ZGF0 -YXNldGlkfTsKCQkkY29udGFpbmVyX2lkID0gc3ByaW50ZiggImVwX3JlcG9ydF8lc1xfY29udGFp -bmVyIiwgJHNlbGYtPntwcm9jZXNzb3J9LT57cmVwb3J0X3BsdWdpbn0tPntyZXBvcnR9ICk7Cgl9 -CgkKCSNzaG93L2hpZGUgY29tcGxpYW5jZQoJbXkgJHNob3dfY29tcGxpYW5jZSA9IDE7Cgkkc2hv -d19jb21wbGlhbmNlID0gJHNlbGYtPntzaG93X2NvbXBsaWFuY2V9IGlmIGRlZmluZWQgJHNlbGYt -PntzaG93X2NvbXBsaWFuY2V9OwoKCSNjdXN0b20gbGFiZWxzCglteSAkbGFiZWxzID0gMDsKCSRs -YWJlbHMgPSBlbmNvZGVfanNvbiAkc2VsZi0+e2xhYmVsc30gaWYgZGVmaW5lZCAkc2VsZi0+e2xh -YmVsc307CgoJJGNodW5rLT5hcHBlbmRDaGlsZCggJHJlcG8tPm1ha2VfamF2YXNjcmlwdCggPDwi -RU9KIiApICk7CmRvY3VtZW50Lm9ic2VydmUoImRvbTpsb2FkZWQiLCBmdW5jdGlvbigpIHsKCW5l -dyBFUHJpbnRzX1NjcmVlbl9SZXBvcnRfTG9hZGVyKCB7CgkJaWRzOiAkanNvbiwKCQlzdGVwOiAy -MCwKCQlwcmVmaXg6ICckcHJlZml4JywKCQl1cmw6ICckdXJsJywKCQlwYXJhbWV0ZXJzOiAnJHBh -cmFtZXRlcnMnLAkJCgkJY29udGFpbmVyX2lkOiAnJGNvbnRhaW5lcl9pZCcsCgkJc2hvd19jb21w -bGlhbmNlOiAkc2hvd19jb21wbGlhbmNlLAoJCWxhYmVsczogJGxhYmVscwoJfSApLmV4ZWN1dGUo -KTsKCn0pOwpFT0oKCSRjaHVuay0+YXBwZW5kQ2hpbGQoICRyZXBvLT5tYWtlX2VsZW1lbnQoICdk -aXYnLCBjbGFzcyA9PiAnZXBfcmVwb3J0X3BhZ2UnLCBpZCA9PiAkY29udGFpbmVyX2lkICkgKTsK -Cgkjc2hvdyBzZWFyY2ggY29udHJvbHMgYWZ0ZXIgdGhlIHJlc3VsdHMgdG9vCglpZiggJHNlbGYt -Pntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAic2VhcmNoIiApCiAgICAgICAgewogICAgICAgICAg -ICAgICAgJGNodW5rLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9yZWZpbmVfc2VhcmNoICk7 -CiAgICAgICAgfQoKCXJldHVybiAkY2h1bms7Cn0KCgpzdWIgcmVuZGVyX2V4cG9ydF9iYXIKewoJ -bXkoICRzZWxmICkgPSBAXzsKCglteSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoKCW15ICRj -aHVuayA9ICRyZXBvLT5tYWtlX2RvY19mcmFnbWVudDsKCglteSBAcGx1Z2lucyA9ICRzZWxmLT5l -eHBvcnRfcGx1Z2luczsKCXJldHVybiAkY2h1bmsgdW5sZXNzKCBzY2FsYXIoIEBwbHVnaW5zICkg -fHwgZGVmaW5lZCggJHJlcG8tPmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRm -aWVsZHMiICkgKSApOwoKCW15ICRyZXBvcnRfZHMgPSAkcmVwby0+ZGF0YXNldCggJHNlbGYtPntk -YXRhc2V0aWR9ICk7CglteSAkZm9ybSA9ICRzZWxmLT5yZW5kZXJfZm9ybTsKCSRmb3JtLT5zZXRB -dHRyaWJ1dGUoIG1ldGhvZCA9PiAiZ2V0IiApOwoKCWlmKCBkZWZpbmVkICRzZWxmLT5yZXBvc2l0 -b3J5LT5wYXJhbSggInNlYXJjaCIgKSB8fCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rpb259IGVx -ICJzZWFyY2giICkKCXsKCQkkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVu -X2ZpZWxkKCAic2VhcmNoIiwgICRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPnNlcmlhbGlz -ZSkgKTsKCX0KCQkKCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e3NvcnR9ICkKCXsK -CQkkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAic29ydCIs -ICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fSApICk7Cgl9CQoKCWlmKCBkZWZpbmVkICRzZWxm -LT57cHJvY2Vzc29yfS0+e2dyb3VwX2V4cH0gKQoJewoJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJl -cG8tPnJlbmRlcl9oaWRkZW5fZmllbGQoICJncm91cCIsICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntn -cm91cF9leHB9ICkgKTsKCX0JCgoJaWYoICFkZWZpbmVkKCAkcmVwby0+Y29uZmlnKCAkc2VsZi0+ -e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkcyIgKSApICkKCXsKCQkjbm8gY3VzdG9tIGV4cG9y -dCBmaWVsZHMgZGVmaW5lZCwgdXNlIGV4cG9ydCBwbHVnaW5zIGRlc2lnbmVkIGZvciB0aGlzIHJl -cG9ydAoJCW15ICRzZWxlY3QgPSAkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfb3B0 -aW9uX2xpc3QoCgkJCW5hbWUgPT4gJ2V4cG9ydCcsCgkJCXZhbHVlcyA9PiBbbWFwIHsgJF8tPmdl -dF9zdWJ0eXBlIH0gQHBsdWdpbnNdLAoJCQlsYWJlbHMgPT4ge21hcCB7ICRfLT5nZXRfc3VidHlw -ZSA9PiAkXy0+Z2V0X25hbWUgfSBAcGx1Z2luc30sCgkJKSApOwoJfQoJZWxzZQoJewoJCSNwcm92 -aWRlIGxpc3Qgb2YgZGVmYXVsdCBleHBvcnQgcGx1Z2lucyBmb3IgcmVwb3J0cwoJCUBwbHVnaW5z -ID0gJHNlbGYtPmV4cG9ydF9wbHVnaW5zKCAiZ2VuZXJpYyIgKTsKCQlteSAkc2VsZWN0ID0gJGZv -cm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX29wdGlvbl9saXN0KAoJCQluYW1lID0+ICdl -eHBvcnQnLAoJCQl2YWx1ZXMgPT4gW21hcCB7ICRfLT5nZXRfc3VidHlwZSB9IEBwbHVnaW5zXSwK -CQkJbGFiZWxzID0+IHttYXAgeyAkXy0+Z2V0X3N1YnR5cGUgPT4gJF8tPmdldF9uYW1lIH0gQHBs -dWdpbnN9LAoJCSkgKTsKCgkJI2NyZWF0ZSBsYWJlbHMgYW5kIHBhbmVscyBmb3IgdGFiYmVkIGlu -dGVyZmFjZWQKCQlteSAkeG1sID0gJHJlcG8tPnhtbDsKCQlteSAkeGh0bWwgPSAkcmVwby0+eGh0 -bWw7CgoJCW15ICRzZWxlY3RfYWxsID0gJGZvcm0tPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVy -X3NlbGVjdGFsbCggJHhtbCApICk7CgkJbXkgJHNlbGVjdF9idG4gPSAkZm9ybS0+YXBwZW5kQ2hp -bGQoICR4bWwtPmNyZWF0ZV9lbGVtZW50KCAiYnV0dG9uIiwKCSAgICAgICAgICAgICAgICAgICAg -dHlwZSA9PiAiYnV0dG9uIiwKCSAgICAgICAgICAgICAgICAgICAgb25jbGljayA9PiAidG9nZ2xl -Q2hlY2tib3hlcygpOyIsCgkgICAgICAgICAgICAgICAgICAgIGNsYXNzID0+ICJlcF9mb3JtX2Fj -dGlvbl9idXR0b24gc2VsZWN0X2J1dHRvbiIsCgkJKSApOwoJICAgIAkkc2VsZWN0X2J0bi0+YXBw -ZW5kQ2hpbGQoICR4bWwtPmNyZWF0ZV90ZXh0X25vZGUoICRyZXBvLT5odG1sX3BocmFzZSggInJl -cG9ydF9zZWxlY3QiICkgKSApOwoKCQkjYWxsb3cgdXNlciB0byBjaG9vc2Ugd2hpY2ggZmllbGRz -IHRoZXkgd2FudCB0byBleHBvcnQKCQlteSAkZXhwb3J0X29wdGlvbnMgPSAkcmVwby0+bWFrZV9l -bGVtZW50KCAiZGl2IiApOwoKCQlteSBAa2V5czsKCQlpZiggZGVmaW5lZCAkcmVwby0+Y29uZmln -KCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkX29yZGVyIiApICkKCQl7CgkJCUBr -ZXlzID0gQHskcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxk -X29yZGVyIiApfTsKCQl9CgkJZWxzZQoJCXsKCQkJQGtleXMgPSBrZXlzICV7JHJlcG8tPmNvbmZp -ZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRmaWVsZHMiICl9OyAKCQl9CgkJZm9yZWFj -aCBteSAka2V5ICggQGtleXMgKQoJCXsKCQkJI2NyZWF0ZSBhIG5ldyBsaXN0CQkJCgkJCW15ICR1 -bCA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJ1bCIsCgkgICAgICAgICAgICAgICAgCXN0eWxlID0+ -ICJsaXN0LXN0eWxlLXR5cGU6IG5vbmUiCgkgICAgICAgIAkpOwoJCQkKCQkJbXkgJGNvdW50ID0g -MDsgI2NvdW50IGhvdyBtYW55IGZpZWxkcyB3ZSBhZGQKCQkJZm9yZWFjaCBteSAkZmllbGRuYW1l -KCBAeyRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRzIiAp -LT57JGtleX19ICkKCQkJewoJCQkJaWYoIGRlZmluZWQgJHJlcG8tPmNvbmZpZyggJHNlbGYtPntl -eHBvcnRfY29uZn0sICJjdXN0b21fZXhwb3J0IiApICYmIGV4aXN0cyAkeyRyZXBvLT5jb25maWco -ICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiY3VzdG9tX2V4cG9ydCIgKX17JGZpZWxkbmFtZX0gKSAj -d2UgaGF2ZSBhIGN1c3RvbSBleHBvcnQgZnVuY3Rpb24gaW5zdGVhZCAKCQkJCXsKCQkJCQkkY291 -bnQrKzsKCQkJCQkkc2VsZi0+X2V4cG9ydF9maWVsZF9jaGVja2JveCggJHJlcG8sICRmaWVsZG5h -bWUsICR1bCwgJHJlcG8tPmh0bWxfcGhyYXNlKCAiZXhwb3J0ZmllbGRvcHRpb25zOiRmaWVsZG5h -bWUiICkgKTsgCgkJCQl9CgkJCQllbHNpZiggZGVmaW5lZCBFUHJpbnRzOjpVdGlsczo6ZmllbGRf -ZnJvbV9jb25maWdfc3RyaW5nKCAkcmVwb3J0X2RzLCAkZmllbGRuYW1lICkgKQoJCQkJewoJCQkJ -CW15ICRmaWVsZCA9IEVQcmludHM6OlV0aWxzOjpmaWVsZF9mcm9tX2NvbmZpZ19zdHJpbmcoICRy -ZXBvcnRfZHMsICRmaWVsZG5hbWUgKTsKCQkJCQkkY291bnQrKzsKICAgICAgIAkJCSAgICAgICAg -CSRzZWxmLT5fZXhwb3J0X2ZpZWxkX2NoZWNrYm94KCAkcmVwbywgJGZpZWxkbmFtZSwgJHVsLCAk -ZmllbGQtPnJlbmRlcl9uYW1lICk7CgoJCQkJfQoJCQl9CgkJCWlmKCAkY291bnQgKSAjb25seSBh -ZGQgb3B0aW9ucyBpZiB3ZSBoYXZlIGFueSBmaWVsZHMgdG8gc2hvdwoJCQl7CgkJCQlteSAkZGl2 -ID0gJHJlcG8tPm1ha2VfZWxlbWVudCggImRpdiIsIGNsYXNzPT4icmVwb3J0X2V4cG9ydF9vcHRp -b25zIiApOwoJCQkJJGRpdi0+YXBwZW5kQ2hpbGQoIG15ICRoID0gJHJlcG8tPm1ha2VfZWxlbWVu -dCggImg0IiApICk7CgkJCQkkaC0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggImV4 -cG9ydGZpZWxkczoka2V5IiApICk7CQoJCQkJJGRpdi0+YXBwZW5kQ2hpbGQoICR1bCApOwoJCQkJ -JGV4cG9ydF9vcHRpb25zLT5hcHBlbmRDaGlsZCggJGRpdiApOwoJCQl9CiAgICAgICAJCX0KCQkk -Zm9ybS0+YXBwZW5kQ2hpbGQoICRleHBvcnRfb3B0aW9ucyApOwoJfQoKCSRmb3JtLT5hcHBlbmRD -aGlsZCggCgkJJHJlcG8tPnJlbmRlcl9idXR0b24oCgkJCW5hbWUgPT4gIl9hY3Rpb25fZXhwb3J0 -IiwKCQkJY2xhc3MgPT4gImVwX2Zvcm1fYWN0aW9uX2J1dHRvbiIsCgkJCXZhbHVlID0+ICRyZXBv -LT5waHJhc2UoICdjZ2kvdXNlcnMvZWRpdF9lcHJpbnQ6ZXhwb3J0JyApCgkpICk7CgoJI2NyZWF0 -ZSBhIGNvbGxhcHNpYmxlIGJveAoJbXkgJGltYWdlc3VybCA9ICRyZXBvLT5jdXJyZW50X3VybCgg -cGF0aCA9PiAic3RhdGljIiwgInN0eWxlL2ltYWdlcyIgKTsKCW15ICVvcHRpb25zOwoJJG9wdGlv -bnN7c2Vzc2lvbn0gPSAkcmVwbzsKICAgICAgICAkb3B0aW9uc3tpZH0gPSAiZXBfcmVwb3J0X2V4 -cG9ydCI7CiAgICAgICAgJG9wdGlvbnN7dGl0bGV9ID0gJHJlcG8tPmh0bWxfcGhyYXNlKCAiZXhw -b3J0X3RpdGxlIiApOwogICAgICAgICRvcHRpb25ze2NvbGxhcHNlZH0gPSAxOwoJJG9wdGlvbnN7 -Y29udGVudH0gPSAkZm9ybTsKICAgICAgICAkb3B0aW9uc3tzaG93X2ljb25fdXJsfSA9ICIkaW1h -Z2VzdXJsL211bHRpX2Rvd24ucG5nIjsKCSRvcHRpb25ze2hpZGVfaWNvbl91cmx9ID0gIiRpbWFn -ZXN1cmwvbXVsdGlfdXAucG5nIjsKCglteSAkYm94ID0gJHJlcG8tPm1ha2VfZWxlbWVudCggImRp -diIsIHN0eWxlPT4idGV4dC1hbGlnbjogbGVmdCIgKTsKCSRib3gtPmFwcGVuZENoaWxkKCBFUHJp -bnRzOjpCb3g6OnJlbmRlciggJW9wdGlvbnMgKSApOwoJJGNodW5rLT5hcHBlbmRDaGlsZCggJGJv -eCApOwoKCXJldHVybiAkY2h1bms7Cn0KCnN1YiByZW5kZXJfc29ydF9vcHRpb25zCnsKCW15KCAk -c2VsZiApID0gQF87CgoJbXkgJHJlcG8gPSAkc2VsZi0+cmVwb3NpdG9yeTsKCglteSAkY2h1bmsg -PSAkcmVwby0+bWFrZV9kb2NfZnJhZ21lbnQ7CgoJcmV0dXJuICRjaHVuayB1bmxlc3MoIGRlZmlu -ZWQoICRyZXBvLT5jb25maWcoICRzZWxmLT57c29ydF9jb25mfSwgInNvcnRmaWVsZHMiICkgKSAp -OwoKCW15ICRzb3J0X2NvbmYgPSAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e3NvcnRfY29uZn0sICJz -b3J0ZmllbGRzIiApOwoKCSNidWlsZCB0aGUgZm9ybQoJbXkgJGZvcm0gPSAkc2VsZi0+cmVuZGVy -X2Zvcm07CgkkZm9ybS0+c2V0QXR0cmlidXRlKCBuYW1lID0+ICJzb3J0X3JlcG9ydCIgKTsKICAg -ICAgICAkZm9ybS0+c2V0QXR0cmlidXRlKCBtZXRob2QgPT4gImdldCIgKTsKCSRjaHVuay0+YXBw -ZW5kQ2hpbGQoICRmb3JtICk7CgkKCWlmKCBkZWZpbmVkICRyZXBvLT5wYXJhbSggInNlYXJjaCIg -KSB8fCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rpb259IGVxICJzZWFyY2giICkKCXsKCQkkZm9y -bS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAic2VhcmNoIiwgICRz -ZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPnNlcmlhbGlzZSkgKTsKCX0KCglpZiggZGVmaW5l -ZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9leHB9ICkKCXsKCQkkZm9ybS0+YXBwZW5kQ2hp -bGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAiZ3JvdXAiLCAgJHNlbGYtPntwcm9jZXNz -b3J9LT57Z3JvdXBfZXhwfSApICk7Cgl9CgoJI2Rpc3BsYXkgdGhlIGxpbmtzIHRoYXQgd2lsbCB0 -cmlnZ2VyIHRoZSBmb3JtCglteSAkZmlyc3QgPSAxOwoJbXkgJHNvcnRfbGlua3MgPSAkcmVwby0+ -bWFrZV9kb2NfZnJhZ21lbnQ7Cglmb3JlYWNoIG15ICRzb3J0X25hbWUgKCBrZXlzICV7JHNvcnRf -Y29uZn0gKQogICAgICAgIHsKCQlteSAkc29ydF92YWx1ZSA9ICRzb3J0X2NvbmYtPnskc29ydF9u -YW1lfTsKCQlpZiggJGZpcnN0ICkKCQl7CgkJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJl -bmRlcl9oaWRkZW5fZmllbGQoICJzb3J0IiwgJHNvcnRfdmFsdWUpICk7CgkJfQoKCQlpZiggISRm -aXJzdCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAJJHNvcnRfbGlua3MtPmFw -cGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJVcGRhdGUvVmlld3M6Z3JvdXBfc2VwZXJh -dG9yIiApICk7CiAgICAgICAgICAgICAgICB9CgkJCgkJaWYoIGRlZmluZWQgJHNlbGYtPntwcm9j -ZXNzb3J9LT57c29ydH0gJiYgJHNlbGYtPntwcm9jZXNzb3J9LT57c29ydH0gZXEgJHNvcnRfdmFs -dWUgKQoJCXsKCQkJbXkgJHN0cm9uZyA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJzdHJvbmciICk7 -CgkJCSRzdHJvbmctPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICRzZWxmLT57c29y -dF9jb25mfSAuICI6c29ydDoiIC4gJHNvcnRfbmFtZSApICk7CgkJCSRzb3J0X2xpbmtzLT5hcHBl -bmRDaGlsZCggJHN0cm9uZyApOwoJCX0KCQllbHNlCgkJewoJCQlteSAkbGluayA9ICRyZXBvLT5y -ZW5kZXJfbGluayggJ2phdmFzY3JpcHQ6c29ydF9yZXBvcnQoIicuJHNvcnRfdmFsdWUuJyIpJyAp -OwkKCQkJJGxpbmstPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICRzZWxmLT57c29y -dF9jb25mfSAuICI6c29ydDoiIC4gJHNvcnRfbmFtZSApICk7CgkJCSRzb3J0X2xpbmtzLT5hcHBl -bmRDaGlsZCggJGxpbmsgKTsKCQl9CgkJJGZpcnN0ID0gMDsKICAgICAgICB9ICAgICAgICAgICAK -CSRjaHVuay0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggIlJlcG9ydDpzb3J0X2xp -bmtzIiwgbGlua3M9PiRzb3J0X2xpbmtzICkgKTsKCXJldHVybiAkY2h1bms7Cn0KCnN1YiByZW5k -ZXJfZ3JvdXBfb3B0aW9ucwp7CglteSggJHNlbGYgKSA9IEBfOwoKCW15ICRyZXBvID0gJHNlbGYt -PnJlcG9zaXRvcnk7CgoJbXkgJGNodW5rID0gJHJlcG8tPm1ha2VfZG9jX2ZyYWdtZW50OwoKCXJl -dHVybiAkY2h1bmsgdW5sZXNzKCBkZWZpbmVkKCAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e2dyb3Vw -X2NvbmZ9LCAiZ3JvdXBmaWVsZHMiICkgKSApOwoKCW15ICRncm91cF9jb25mID0gJHJlcG8tPmNv -bmZpZyggJHNlbGYtPntncm91cF9jb25mfSwgImdyb3VwZmllbGRzIiApOwoKCSNidWlsZCB0aGUg -Zm9ybQoJbXkgJGZvcm0gPSAkc2VsZi0+cmVuZGVyX2Zvcm07CgkkZm9ybS0+c2V0QXR0cmlidXRl -KCBuYW1lID0+ICJncm91cF9yZXBvcnQiICk7CiAgICAgICAgJGZvcm0tPnNldEF0dHJpYnV0ZSgg -bWV0aG9kID0+ICJnZXQiICk7CgkkY2h1bmstPmFwcGVuZENoaWxkKCAkZm9ybSApOwoJCglpZigg -ZGVmaW5lZCAkcmVwby0+cGFyYW0oICJzZWFyY2giICkgfHwgJHNlbGYtPntwcm9jZXNzb3J9LT57 -YWN0aW9ufSBlcSAic2VhcmNoIiApCgl7CgkJJGZvcm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVu -ZGVyX2hpZGRlbl9maWVsZCggInNlYXJjaCIsICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9 -LT5zZXJpYWxpc2UpICk7Cgl9CgoJaWYoIGRlZmluZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57c29y -dH0gKQoJewoJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJlbmRlcl9oaWRkZW5fZmllbGQo -ICJzb3J0IiwgICRzZWxmLT57cHJvY2Vzc29yfS0+e3NvcnR9ICkgKTsKCX0KCgkjZGlzcGxheSB0 -aGUgbGlua3MgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGZvcm0KCW15ICRmaXJzdCA9IDE7CglteSAk -Z3JvdXBfbGlua3MgPSAkcmVwby0+bWFrZV9kb2NfZnJhZ21lbnQ7Cglmb3JlYWNoIG15ICRncm91 -cF92YWx1ZSAoIEB7JGdyb3VwX2NvbmZ9ICkKICAgICAgICB7CgkJbXkgKCRncm91cF9maWVsZCkg -PSBzcGxpdCgvOy8sICRncm91cF92YWx1ZSApOwoJCWlmKCAkZmlyc3QgKQoJCXsKCQkJJGZvcm0t -PmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX2hpZGRlbl9maWVsZCggImdyb3VwIiwgJGdyb3Vw -X3ZhbHVlKSApOwoJCX0KCgkJaWYoICEkZmlyc3QgKQogICAgICAgICAgICAgICAgewogICAgICAg -ICAgICAgICAgCSRncm91cF9saW5rcy0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSgg -IlVwZGF0ZS9WaWV3czpncm91cF9zZXBlcmF0b3IiICkgKTsKICAgICAgICAgICAgICAgIH0KCQkK -CQlpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cH0gJiYgJHNlbGYtPntwcm9j -ZXNzb3J9LT57Z3JvdXB9IGVxICRncm91cF9maWVsZCApCgkJewoJCQlteSAkc3Ryb25nID0gJHJl -cG8tPm1ha2VfZWxlbWVudCggInN0cm9uZyIgKTsKCQkJJHN0cm9uZy0+YXBwZW5kQ2hpbGQoICRy -ZXBvLT5odG1sX3BocmFzZSggJHNlbGYtPntncm91cF9jb25mfSAuICI6Z3JvdXA6IiAuICRncm91 -cF9maWVsZCApICk7CgkJCSRncm91cF9saW5rcy0+YXBwZW5kQ2hpbGQoICRzdHJvbmcgKTsKCQl9 -CgkJZWxzZQoJCXsKCQkJbXkgJGxpbmsgPSAkcmVwby0+cmVuZGVyX2xpbmsoICdqYXZhc2NyaXB0 -Omdyb3VwX3JlcG9ydCgiJy4kZ3JvdXBfdmFsdWUuJyIpJyApOwkKCQkJJGxpbmstPmFwcGVuZENo -aWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICRzZWxmLT57Z3JvdXBfY29uZn0gLiAiOmdyb3VwOiIg -LiAkZ3JvdXBfZmllbGQgKSApOwoJCQkkZ3JvdXBfbGlua3MtPmFwcGVuZENoaWxkKCAkbGluayAp -OwoJCX0KCQkkZmlyc3QgPSAwOwogICAgICAgIH0gICAgICAgICAgIAoJCgkjbm8gZ3JvdXBpbmcg -bGluayBhdCB0aGUgZW5kCgkkZ3JvdXBfbGlua3MtPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9w -aHJhc2UoICJVcGRhdGUvVmlld3M6Z3JvdXBfc2VwZXJhdG9yIiApICk7CglpZiggZGVmaW5lZCAk -c2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cH0gJiYgJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXB9 -IG5lICIiICkKCXsKCQlteSAkbGluayA9ICRyZXBvLT5yZW5kZXJfbGluayggJ2phdmFzY3JpcHQ6 -Z3JvdXBfcmVwb3J0KCIiKScgKTsJCgkJJGxpbmstPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9w -aHJhc2UoICJyZXBvcnQ6bm9fZ3JvdXBpbmciICkgKTsKCQkkZ3JvdXBfbGlua3MtPmFwcGVuZENo -aWxkKCAkbGluayApOwoJfQoJZWxzZQoJewoJCW15ICRzdHJvbmcgPSAkcmVwby0+bWFrZV9lbGVt -ZW50KCAic3Ryb25nIiApOwogCQkkc3Ryb25nLT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhy -YXNlKCAicmVwb3J0Om5vX2dyb3VwaW5nIiApICk7CgkJJGdyb3VwX2xpbmtzLT5hcHBlbmRDaGls -ZCggJHN0cm9uZyApOwoJfQoJCgkkY2h1bmstPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJh -c2UoICJSZXBvcnQ6Z3JvdXBfbGlua3MiLCBsaW5rcz0+JGdyb3VwX2xpbmtzICkgKTsKCglyZXR1 -cm4gJGNodW5rOwp9CgpzdWIgcmVuZGVyX3JlZmluZV9zZWFyY2gKewoJbXkoICRzZWxmICkgPSBA -XzsKCglteSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoKCW15ICRjaHVuayA9ICRyZXBvLT5t -YWtlX2RvY19mcmFnbWVudDsKCQoJaWYoIGRlZmluZWQgJHJlcG8tPnBhcmFtKCAic2VhcmNoIiAp -IHx8ICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gZXEgInNlYXJjaCIgKQoJewoJCW15ICRl -c2NleHAgPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9LT5zZXJpYWxpc2U7CgkJbXkgJGNh -Y2hlaWQgPSAkcmVwby0+cGFyYW0oICJjYWNoZSIgKTsKCQlteSAkc2NvbmYgPSAkc2VsZi0+e3Nj -b25mfTsJCgoJCSNzZXQgdXAgbmV3IHNlYXJjaCBsaW5rCgkJbXkgJG5ld19iYXNldXJsID0gVVJJ -LT5uZXcoICRzZWxmLT57c2Vzc2lvbn0tPmdldF91cmkgKTsKICAgICAgICAJJG5ld19iYXNldXJs -LT5xdWVyeV9mb3JtKAoJICAgICAgICAgICAgICAgIHNjcmVlbiA9PiAiUmVwb3J0IiwKCQkJc2Nv -bmYgPT4gJHNjb25mLAogICAgICAgIAkpOwoKCQlteSAkc2VhcmNoX2xpbmtzID0gJHJlcG8tPm1h -a2VfZG9jX2ZyYWdtZW50OwoJCW15ICRuZXdfbGluayA9ICRyZXBvLT5yZW5kZXJfbGluayggIiRu -ZXdfYmFzZXVybCZfYWN0aW9uX25ld3NlYXJjaD0xIiApOwoJICAgCSRuZXdfbGluay0+YXBwZW5k -Q2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggImxpYi9zZWFyY2hleHByZXNzaW9uOm5ldyIgKSAp -OwoJCSRzZWFyY2hfbGlua3MtPmFwcGVuZENoaWxkKCAkbmV3X2xpbmsgKTsKCgkJI2FkZCBhIHNl -cGFyYXRvci4uLgoJCSRzZWFyY2hfbGlua3MtPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJh -c2UoICJVcGRhdGUvVmlld3M6Z3JvdXBfc2VwZXJhdG9yIiApICk7CgoJCSNzZXQgdXAgcmVmaW5l -IHNlYXJjaCBsaW5rCgkJbXkgJHJlZmluZV9iYXNldXJsID0gVVJJLT5uZXcoICRzZWxmLT57c2Vz -c2lvbn0tPmdldF91cmkgKTsKICAgICAgICAJJHJlZmluZV9iYXNldXJsLT5xdWVyeV9mb3JtKAoJ -ICAgICAgICAJY2FjaGUgPT4gJGNhY2hlaWQsCgkgICAgICAgICAgICAgICAgZXhwID0+ICRlc2Nl -eHAsCiAgICAgICAgCSAgICAgICAgc2NyZWVuID0+ICJSZXBvcnQiLAogICAgICAgICAgICAgICAg -CWRhdGFzZXQgPT4gJHNlbGYtPntkYXRhc2V0aWR9LAogICAgICAgICAgICAgICAgCW9yZGVyID0+ -ICRzZWxmLT57cHJvY2Vzc29yfS0+e3NlYXJjaH0tPntjdXN0b21fb3JkZXJ9LAoJCQlzY29uZiA9 -PiAkc2NvbmYsCiAgICAgICAgCSk7CgoJCW15ICRyZWZpbmVfbGluayA9ICRyZXBvLT5yZW5kZXJf -bGluayggIiRyZWZpbmVfYmFzZXVybCZfYWN0aW9uX3VwZGF0ZT0xIiApOwogICAgICAJCSRyZWZp -bmVfbGluay0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggImxpYi9zZWFyY2hleHBy -ZXNzaW9uOnJlZmluZSIgKSApOyAgIAkgICAgICAgICAKCSAgICAgICAgJHNlYXJjaF9saW5rcy0+ -YXBwZW5kQ2hpbGQoICRyZWZpbmVfbGluayApOwoKCQkkY2h1bmstPmFwcGVuZENoaWxkKCAkcmVw -by0+aHRtbF9waHJhc2UoICJSZXBvcnQ6c2VhcmNoX2xpbmtzIiwgbGlua3M9PiRzZWFyY2hfbGlu -a3MgKSApOwoJfQoKCXJldHVybiAkY2h1bms7Cn0KCgojYWRkcyBhIG5ldyBjaGVja2JveCB0byBh -bGxvdyB0aGUgdXNlciB0byBjaG9vc2Ugd2hpY2ggZmllbGRzIHRvIGV4cG9ydApzdWIgX2V4cG9y -dF9maWVsZF9jaGVja2JveAp7CglteSggJHNlbGYsICRyZXBvLCAkZmllbGRuYW1lLCAkdWwsICRm -aWVsZGxhYmVsICkgPSBAXzsKCglteSAkbGkgPSAkcmVwby0+bWFrZV9lbGVtZW50KCAibGkiICk7 -CgkkdWwtPmFwcGVuZENoaWxkKCAkbGkgKTsKCiAgICAgICAgbXkgJGNoZWNrYm94ID0gJHJlcG8t -Pm1ha2VfZWxlbWVudCggImlucHV0IiwgdHlwZSA9PiAiY2hlY2tib3giLCBpZCA9PiAkZmllbGRu -YW1lLCBuYW1lID0+ICRmaWVsZG5hbWUsIHZhbHVlID0+ICRmaWVsZG5hbWUgKTsKCWlmKCBkZWZp -bmVkICRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRfZGVm -YXVsdHMiICkgKQoJewoJCWlmKCAoIGdyZXAgeyAkZmllbGRuYW1lIGVxICRfIH0gQHskcmVwby0+ -Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkX2RlZmF1bHRzIiApfSAp -IHx8ICggc2NhbGFyKCBAeyRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhw -b3J0ZmllbGRfZGVmYXVsdHMiICl9ICkgPT0gMCApICkKCQl7CgkJCSNvbmx5IGNoZWNrIGRlZmF1 -bHRzIG9yIGNoZWNrIGV2ZXJ5dGhpbmcgaWYgZGVmYXVsdHMgbm90IGRlZmluZWQKCQkJJGNoZWNr -Ym94LT5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgInllcyIgKTsKCQl9Cgl9CglteSAkbGFiZWwg -PSAkcmVwby0+bWFrZV9lbGVtZW50KCAibGFiZWwiLCBmb3IgPT4gJGZpZWxkbmFtZSApOwoJJGxh -YmVsLT5hcHBlbmRDaGlsZCggJGZpZWxkbGFiZWwgKTsKCgkkbGktPmFwcGVuZENoaWxkKCAkY2hl -Y2tib3ggKTsKCSRsaS0+YXBwZW5kQ2hpbGQoICRsYWJlbCApOwp9CgojIyMgdXRpbGl0eSBtZXRo -b2RzCgojIFRPRE8gc2hvdWxkIHVzZSAiSlNPTiIgcGFja2FnZQpzdWIgdG9fanNvbgp7CiAgICAg -ICAgbXkoICRzZWxmLCAkb2JqZWN0ICkgPSBAXzsKCglyZXR1cm4gIiIgaWYoICFkZWZpbmVkICRv -YmplY3QgKTsKCiMgVVRGLTggaXNzdWVzOgojCXJldHVybiBKU09OLT5uZXctPnV0ZjgoMSktPmVu -Y29kZSggJG9iamVjdCApOwoKICAgICAgICBpZiggcmVmKCAkb2JqZWN0ICkgZXEgJ0hBU0gnICkK -ICAgICAgICB7CiAgICAgICAgICAgICAgICBteSBAc3R1ZmY7CiAgICAgICAgICAgICAgICB3aGls -ZSggbXkoICRrLCAkdiApID0gZWFjaCggJSRvYmplY3QgKSApCiAgICAgICAgICAgICAgICB7CiAg -ICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYoICFFUHJpbnRzOjpVdGlsczo6aXNfc2V0KCAk -diApICk7ICAgICAgICMgb3IgJ251bGwnID8KICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBA -c3R1ZmYsIEVQcmludHM6OlV0aWxzOjpqc19zdHJpbmcoICRrICkuJzonLiRzZWxmLT50b19qc29u -KCAkdiApCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJ3snIC4gam9p -biggIiwiLCBAc3R1ZmYgKSAuICd9JzsKICAgICAgICB9CiAgICAgICAgZWxzaWYoIHJlZiggJG9i -amVjdCApIGVxICdBUlJBWScgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG15IEBzdHVmZjsK -ICAgICAgICAgICAgICAgIGZvcmVhY2goIEAkb2JqZWN0ICkKICAgICAgICAgICAgICAgIHsKICAg -ICAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiggIUVQcmludHM6OlV0aWxzOjppc19zZXQoICRf -ICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAc3R1ZmYsICRzZWxmLT50b19qc29u -KCAkXyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICdbJyAuIGpv -aW4oICIsIiwgQHN0dWZmICkgLiAnXSc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gRVByaW50 -czo6VXRpbHM6OmpzX3N0cmluZyggJG9iamVjdCApOwp9CgpzdWIgZXhwb3J0X3BsdWdpbnMKewog -ICAgICAgIG15KCAkc2VsZiwgJGdlbmVyaWMgKSA9IEBfOwoKCW15IEBwbHVnaW5faWRzOwoJCglt -eSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5OwoKCWlmKCBkZWZpbmVkICRyZXBvLT5jb25maWco -ICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0X3BsdWdpbnMiICkgKQoJewoJCUBwbHVnaW5f -aWRzID0gQHskcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydF9wbHVn -aW5zIiApfTsKCX0JCgllbHNpZiggJGdlbmVyaWMgKQoJewogCQlAcGx1Z2luX2lkcyA9ICRyZXBv -LT5wbHVnaW5fbGlzdCgKICAgICAgICAgICAgICAgIAl0eXBlID0+ICJFeHBvcnQiLAoJICAgICAg -ICAgICAgICAgIGNhbl9hY2NlcHQgPT4gInJlcG9ydC9nZW5lcmljIiwKICAgICAgICAJICAgICAg -ICBpc192aXNpYmxlID0+ICJzdGFmZiIsCgkJCWlzX2FkdmVydGlzZWQgPT4gMSwKCSAgICAgICAg -KTsKCX0KCWVsc2UKCXsKICAgICAgICAJQHBsdWdpbl9pZHMgPSAkcmVwby0+cGx1Z2luX2xpc3Qo -CiAgICAgICAgICAgICAgICAJdHlwZSA9PiAiRXhwb3J0IiwKCSAgICAgICAgICAgICAgICBjYW5f -YWNjZXB0ID0+ICJyZXBvcnQvIi4kc2VsZi0+Z2V0X3JlcG9ydCwKICAgICAgICAJICAgICAgICBp -c192aXNpYmxlID0+ICJzdGFmZiIsCgkJCWlzX2FkdmVydGlzZWQgPT4gMSwKCSAgICAgICAgKTsK -ICAgICAgICB9CglteSBAcGx1Z2luczsKCWZvcmVhY2ggbXkgJGlkICggQHBsdWdpbl9pZHMgKQog -ICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRwID0gJHJlcG8tPnBsdWdpbiggIiRpZCIgKSBv -ciBuZXh0OwogICAgICAgICAgICAgICAgcHVzaCBAcGx1Z2lucywgJHA7CiAgICAgICAgfQoKICAg -ICAgICByZXR1cm4gQHBsdWdpbnM7Cn0KCnN1YiByZXBvcnRfcGx1Z2lucwp7CglteSggJHNlbGYg -KSA9IEBfOwoKCSMgc2YyIC0gY2FuJ3QgbGlzdCB2aWEgdHlwZSA9PiAiU2VhcmNoOjpSZXBvcnQi -ID8gCiAgICAgICAgbXkgQHBsdWdpbl9pZHMgPSAkc2VsZi0+cmVwb3NpdG9yeS0+cGx1Z2luX2xp -c3QoCiAgICAgICAgICAgICAgICB0eXBlID0+ICJTY3JlZW4iLAogICAgICAgICk7CgogICAgICAg -IG15IEBwbHVnaW5zOwoJZm9yZWFjaCBteSAkaWQgKCBAcGx1Z2luX2lkcyApCiAgICAgICAgewoJ -CW5leHQgaWYoICRpZCAhfiAvXlNjcmVlbjo6UmVwb3J0OjovICk7CSMgbm90ZSB0aGlzIGFsc28g -ZmlsdGVycyBvdXQgJHNlbGYgKGFrYSBTY3JlZW46OlJlcG9ydCkKCiAgICAgICAgICAgICAgICBt -eSAkcCA9ICRzZWxmLT5yZXBvc2l0b3J5LT5wbHVnaW4oICIkaWQiICk7CgkJbmV4dCBpZiggIWRl -ZmluZWQgJHAgfHwgISRwLT5jYW5fYmVfdmlld2VkICk7CgogICAgICAgICAgICAgICAgcHVzaCBA -cGx1Z2lucywgJHA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gQHBsdWdpbnM7Cn0KCiNyZXR1 -cm5zIGEgaGFzaCBvZiB2YWx1ZXMgbWFwcGVkIHRvIGEgbGFiZWwgYW5kIGEgbGlzdAojaWYgaWRz -X29ubHkgaXMgc2V0IHRoZSBsaXN0IG9mIGl0ZW1zIGFyZSBqdXN0IHJlcHJlc2VudGVkIGJ5IHRo -ZWlyIGlkICh1c2VkIGJ5IHJlcG9ydCBKUykKc3ViIGdldF9ncm91cGVkX2l0ZW1zCnsKCW15KCAk -c2VsZiwgJGl0ZW1zLCAkaWRzX29ubHkgKSA9IEBfOwoJbXkgJHNlc3Npb24gPSAkc2VsZi0+e3Nl -c3Npb259OwoJbXkgJWdyb3VwZWQ7CgoJbXkgJGdyb3VwaW5nID0gJHNlbGYtPntwcm9jZXNzb3J9 -LT57Z3JvdXB9OwoKCW15ICRtZXRhZmllbGQgPSAkaXRlbXMtPmdldF9kYXRhc2V0LT5maWVsZCgg -JGdyb3VwaW5nICk7CgoJI3NldCBncm91cF9vcHRzIGlmIGFwcHJvcHJpYXRlCglpZiggZGVmaW5l -ZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfSApCgl7CgkJaWYoICRtZXRhZmllbGQt -PnR5cGUgZXEgImRhdGUiICkKCQl7CgkJCSRtZXRhZmllbGQtPntyZW5kZXJfcmVzfSA9ICRzZWxm -LT57cHJvY2Vzc29yfS0+e2dyb3VwX29wdHN9LT57cmVzfSBpZiBleGlzdHMgJHNlbGYtPntwcm9j -ZXNzb3J9LT57Z3JvdXBfb3B0c30tPntyZXN9OwoJCX0KCX0KCgkjY3JlYXRlIGEgaGFzaCBvZiBm -aWVsZCB2YWx1ZXMgdG8gaXRlbXMgKG9yIGl0ZW0gaWRzKQoJJGl0ZW1zLT5tYXAoIHN1YiB7Cgkg -ICAgICAgCW15KCAkc2Vzc2lvbiwgJGRhdGFzZXQsICRpdGVtICkgPSBAXzsKCQkKCQlteSAkbXVs -dGlwbGUgPSAkbWV0YWZpZWxkLT5nZXRfcHJvcGVydHkoICJtdWx0aXBsZSIgKTsKCQlteSBAZ3Jv -dXBfdmFsdWVzOwoJCWlmKCAkbXVsdGlwbGUgKQogICAgICAgICAgICAgICAgewoJCQlAZ3JvdXBf -dmFsdWVzID0gQHskaXRlbS0+dmFsdWUoICRncm91cGluZyApfTsKCQl9CgkJZWxzZQoJCXsJCQkK -CQkJQGdyb3VwX3ZhbHVlcyA9ICgkaXRlbS0+dmFsdWUoICRncm91cGluZyApKTsKCQl9CgkKCQlp -Ziggc2NhbGFyIEBncm91cF92YWx1ZXMgPiAwICkKCQl7CgkJCWZvcmVhY2ggbXkgJGdyb3VwX3Zh -bHVlICggQGdyb3VwX3ZhbHVlcyApCgkJCXsKCQkJCW15ICRncm91cF9pZCA9ICRtZXRhZmllbGQt -PmdldF9pZF9mcm9tX3ZhbHVlKCAkc2Vzc2lvbiwgJGdyb3VwX3ZhbHVlICk7CgkJCQkjdHJ1bmNh -dGUgZ3JvdXAgaWYgYXBwcm9wcmlhdGUKCQkJCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29y -fS0+e2dyb3VwX29wdHN9ICkKCQkJCXsKCQkJCQkkZ3JvdXBfaWQgPSAgc3Vic3RyKCAiXHUkZ3Jv -dXBfaWQiLCAwLCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfS0+e3RydW5jYXRlfSAp -IGlmIGV4aXN0cyAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfS0+e3RydW5jYXRlfTsK -CQkJCX0KCgkJICAgICAgICAJaWYoIGV4aXN0cyAkZ3JvdXBlZHskZ3JvdXBfaWR9ICkgI3dlJ3Zl -IGFscmVhZHkgc2V0IHRoaXMgbGlzdCB1cCwgcHVzaCBhIG5ldyBpdGVtIG9uIHRvIHRoZSBsaXN0 -CgkJICAgICAgICAgICAgICAgCXsKCQkJCQlpZiggJGlkc19vbmx5ICkgI3NvbWV0aW1lcyB3ZSBv -bmx5IHdhbnQgaWRzIHJhdGhlciB0aGFuIHRoZSB3aG9sZSBpdGVtCgkJCQkJewoJCQkJCQlwdXNo -IEB7JGdyb3VwZWR7JGdyb3VwX2lkfX0sICRpdGVtLT5pZDsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJ -CXsKCQkJCQkJcHVzaCBAeyRncm91cGVkeyRncm91cF9pZH19LCAkaXRlbTsKCQkJCQl9CgkgICAg -ICAgCQkgICAgICAgIH0KICAgICAgICAJICAgICAgCQllbHNlICNzZXQgdXAgYSBsaXN0IGZvciB0 -aGlzIGdyb3VwCgkgICAgICAgIAkgICAgICAgCXsKCQkJCQlteSBAZ3JvdXBlZF9pdGVtczsKCQkJ -CQlpZiggJGlkc19vbmx5ICkgI3NvbWV0aW1lcyB3ZSBvbmx5IHdhbnQgaWRzIHJhdGhlciB0aGFu -IHRoZSB3aG9sZSBpdGVtCgkJICAgICAgICAgICAgICAgICAgICAgICAgewkKICAgICAgICAJCSAg -ICAgICAgICAgICAgICAgICAgICAgIEBncm91cGVkX2l0ZW1zID0gKCRpdGVtLT5pZCk7CiAgICAg -ICAgICAgICAgICAJCSAgICAgICAgfQoJICAgICAgICAgICAgICAgIAkgICAgICAgIGVsc2UKICAg -ICAgICAJICAgICAgICAgICAgICAgIAl7CgkgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAg -ICBAZ3JvdXBlZF9pdGVtcyA9ICgkaXRlbSk7CiAgICAgICAgCQkgICAgICAgICAgICAgICAJfQoJ -ICAgICAgICAgICAgICAgIAkgICAgICAgICRncm91cGVkeyRncm91cF9pZH0gPSBbQGdyb3VwZWRf -aXRlbXNdOwoJCQkJfQogICAgICAgICAgICAgICAJCX0KCQl9CgkJZWxzZQoJCXsKCQkJbXkgJGdy -b3VwX2lkID0gIlVuc3BlY2lmaWVkICIgLiAkbWV0YWZpZWxkLT5uYW1lOwogIAkgICAgCQlpZigg -ZXhpc3RzICRncm91cGVkeyRncm91cF9pZH0gKSAjd2UndmUgYWxyZWFkeSBzZXQgdGhpcyBsaXN0 -IHVwLCBwdXNoIGEgbmV3IGl0ZW0gb24gdG8gdGhlIGxpc3QKCQkgIAl7CgkJCQlpZiggJGlkc19v -bmx5ICkgI3NvbWV0aW1lcyB3ZSBvbmx5IHdhbnQgaWRzIHJhdGhlciB0aGFuIHRoZSB3aG9sZSBp -dGVtCgkJCQl7CgkJCQkJcHVzaCBAeyRncm91cGVkeyRncm91cF9pZH19LCAkaXRlbS0+aWQ7CgkJ -CQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcHVzaCBAeyRncm91cGVkeyRncm91cF9pZH19LCAkaXRl -bTsKCQkJCX0KCSAgICAgICAJCX0KICAgICAgICAJICAgICAgCWVsc2UgI3NldCB1cCBhIGxpc3Qg -Zm9yIHRoaXMgZ3JvdXAKCSAgICAgICAgCXsKCQkJCW15IEBncm91cGVkX2l0ZW1zOwoJCQkJaWYo -ICRpZHNfb25seSApICNzb21ldGltZXMgd2Ugb25seSB3YW50IGlkcyByYXRoZXIgdGhhbiB0aGUg -d2hvbGUgaXRlbQoJCSAgICAgICAgICAgICAgICB7CQogICAgICAgIAkJCQlAZ3JvdXBlZF9pdGVt -cyA9ICgkaXRlbS0+aWQpOwogICAgICAgICAgICAgICAgCQl9CgkgICAgICAgICAgICAgICAgCWVs -c2UKICAgICAgICAJICAgICAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgIAkgICAgICAgICAg -ICAgICAgQGdyb3VwZWRfaXRlbXMgPSAoJGl0ZW0pOwogICAgICAgIAkgICAgICAgICAgICAgICAJ -fQoJICAgICAgICAgICAgICAJICAgICAgICAkZ3JvdXBlZHskZ3JvdXBfaWR9ID0gW0Bncm91cGVk -X2l0ZW1zXTsKCQkJfQoJCX0KICAgICAgIAl9ICk7CgoJI25vdyBzb3J0IHRoZSBncm91cHMgYW5k -IGFkZCBodW1hbiByZWFkYWJsZSBsYWJlbHMKCW15IEBzb3J0ZWRfZ3JvdXBzOwoJCglteSAkcmV2 -ZXJzZSA9IDA7CgkkcmV2ZXJzZSA9ICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwX29wdHN9LT57 -cmV2ZXJzZV9vcmRlcn0gaWYgZXhpc3RzICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwX29wdHN9 -LT57cmV2ZXJzZV9vcmRlcn07CglpZiggJG1ldGFmaWVsZC0+dHlwZSBlcSAibmFtZWRzZXQiICkK -CXsKCQlteSggJHRhZ3MsICRsYWJlbHMgKSA9ICRtZXRhZmllbGQtPnRhZ3NfYW5kX2xhYmVscygg -JHNlc3Npb24gKTsKCQkjY29udmVydCB0YWdzIHRvIGEgaGFzaCBvZiB2YWx1ZXMgYW5kIGEgcHJp -b3JpdHkgKGZvciBvcmRlcmluZykKCQlteSAlcHJpb3JpdHk7CgkJbXkgJGluZGV4ID0gMTsKCQlm -b3JlYWNoIG15ICR0YWcgKEB7JHRhZ3N9ICkKCQl7CgkJCSRwcmlvcml0eXskdGFnfSA9ICRpbmRl -eDsKCQkJJGluZGV4Kys7CgkJfQoJCWZvcmVhY2ggbXkgJGtleSAoc29ydCB7JHByaW9yaXR5eyRh -fSA8PT4gJHByaW9yaXR5eyRifX0ga2V5cyAlZ3JvdXBlZCkKICAgICAgICAJewoJCQlwdXNoIEBz -b3J0ZWRfZ3JvdXBzLCAkc2VsZi0+X21ha2VfZ3JvdXBlZF9pdGVtKCAkZ3JvdXBlZHska2V5fSwg -JGxhYmVscy0+eyRrZXl9ICk7CgkJfQoJfQoJZWxzaWYoICRtZXRhZmllbGQtPnR5cGUgZXEgInN1 -YmplY3QiICkKCXsJCQoJCW15ICRkcyA9ICRzZXNzaW9uLT5kYXRhc2V0KCAic3ViamVjdCIgKTsK -CQlteSBAdmFsdWVzID0ga2V5cyAlZ3JvdXBlZDsKCQlteSAkc29ydGVkID0gJG1ldGFmaWVsZC0+ -c29ydF92YWx1ZXMoICRzZXNzaW9uLCBcQHZhbHVlcyApOwoJCW15ICVwcmlvcml0eTsKCQlteSAk -aW5kZXggPSAxOwogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkdmFsdWUgKEB7JHNvcnRlZH0g -KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkcHJpb3JpdHl7JHZh -bHVlfSA9ICRpbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgJGluZGV4Kys7CiAgICAgICAg -ICAgICAgICB9CgkJZm9yZWFjaCBteSAka2V5IChzb3J0IHskcHJpb3JpdHl7JGF9IDw9PiAkcHJp -b3JpdHl7JGJ9fSBrZXlzICVncm91cGVkKQogICAgICAgICAgICAgICAgewoJCQlteSAkc3ViaiA9 -ICRkcy0+ZGF0YW9iaiggJGtleSApOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBzb3J0 -ZWRfZ3JvdXBzLCAkc2VsZi0+X21ha2VfZ3JvdXBlZF9pdGVtKCAkZ3JvdXBlZHska2V5fSwgRVBy -aW50czo6VXRpbHM6OnRyZWVfdG9fdXRmOCggJHN1YmotPnJlbmRlcl9kZXNjcmlwdGlvbiApICkg -aWYgZGVmaW5lZCAkc3ViajsKICAgICAgICAgICAgICAgIH0KCX0KCWVsc2lmKCAkbWV0YWZpZWxk -LT50eXBlIGVxICJkYXRlIiApCgl7CgkJaWYoICRyZXZlcnNlICkKCQl7CgkJCWZvcmVhY2ggbXkg -JGtleSAoIHNvcnQgeyRiIDw9PiAkYX0ga2V5cyAlZ3JvdXBlZCApCgkJCXsKCQkJCXB1c2ggQHNv -cnRlZF9ncm91cHMsICRzZWxmLT5fbWFrZV9ncm91cGVkX2l0ZW0oICRncm91cGVkeyRrZXl9LCAk -a2V5ICk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCBteSAka2V5ICggc29ydCB7JGEg -PD0+ICRifSBrZXlzICVncm91cGVkICkKCQkJewoJCQkJcHVzaCBAc29ydGVkX2dyb3VwcywgJHNl -bGYtPl9tYWtlX2dyb3VwZWRfaXRlbSggJGdyb3VwZWR7JGtleX0sICRrZXkgKTsKCQkJfQoJCX0K -CX0KCWVsc2UKCXsJCgkJaWYoICRyZXZlcnNlICkKCQl7CgkJCWZvcmVhY2ggbXkgJGtleSAoIHNv -cnQgeyRiIGNtcCAkYX0ga2V5cyAlZ3JvdXBlZCApCgkJCXsKCQkJCXB1c2ggQHNvcnRlZF9ncm91 -cHMsICRzZWxmLT5fbWFrZV9ncm91cGVkX2l0ZW0oICRncm91cGVkeyRrZXl9LCAka2V5ICk7CgkJ -CX0KCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCBteSAka2V5ICggc29ydCBrZXlzICVncm91cGVk -ICkKCQkJewoJCQkJcHVzaCBAc29ydGVkX2dyb3VwcywgJHNlbGYtPl9tYWtlX2dyb3VwZWRfaXRl -bSggJGdyb3VwZWR7JGtleX0sICRrZXkgKTsKCQkJfQoJCX0KCX0KCgkjY2hlY2sgZm9yIGFueSB1 -bnNwZWNpZmllZCBncm91cHMKCW15ICRncm91cF9pZCA9ICJVbnNwZWNpZmllZCAiIC4gJG1ldGFm -aWVsZC0+bmFtZTsKCWlmKCBleGlzdHMgJGdyb3VwZWR7JGdyb3VwX2lkfSApCgl7CgkJcHVzaCBA -c29ydGVkX2dyb3VwcywgJHNlbGYtPl9tYWtlX2dyb3VwZWRfaXRlbSggJGdyb3VwZWR7JGdyb3Vw -X2lkfSwgJGdyb3VwX2lkICk7Cgl9CgoJcmV0dXJuIFxAc29ydGVkX2dyb3VwczsKfQkKCgpzdWIg -X21ha2VfZ3JvdXBlZF9pdGVtCnsKCW15KCAkc2VsZiwgJGxpc3QsICRsYWJlbCApID0gQF87Cglt -eSAlZ3JvdXA7CgkkZ3JvdXB7bGlzdH0gPSAkbGlzdDsKCSRncm91cHtsYWJlbH0gPSAkbGFiZWw7 -CglyZXR1cm4gXCVncm91cDsKfQoKc3ViIHJlbmRlcl9zZWxlY3RhbGwKewoJbXkoICRzZWxmLCAk -eG1sICkgPSBAXzsKCglteSAkdG9nZ2xlX2Z1bmN0aW9uID0gJwoJCXZhciBpc0NoZWNrZWQgPSB0 -cnVlOwoJCWZ1bmN0aW9uIHRvZ2dsZUNoZWNrYm94ZXMoKSB7CgkgICAgICAgIAl2YXIgZXhwb3J0 -X29wdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJyZXBvcnRfZXhwb3J0 -X29wdGlvbnMiKTsKCQkJZm9yKCBleHBvcnRfb3B0aW9uIG9mIGV4cG9ydF9vcHRpb25zICkKCQkJ -ewoJCQkJdmFyIGNoZWNrYm94ZXMgPSBleHBvcnRfb3B0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1l -KCAiaW5wdXQiICkKCQkJCWZvciggY2hlY2tib3ggb2YgY2hlY2tib3hlcyApCgkJCQl7CgkJCQkJ -aWYoaXNDaGVja2VkKQoJCQkJCXsKCSAgICAgICAgICAgICAgICAJCQljaGVja2JveC5jaGVja2Vk -ID0gIiI7CgkJICAJICAgICAgICAJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkgICAgICAgICAgICAg -ICAgY2hlY2tib3guY2hlY2tlZCA9ICJjaGVja2VkIjsKCQkJCQl9CgkgICAgICAgICAJCX0KCQkJ -fQoJCQlpc0NoZWNrZWQgPSAhaXNDaGVja2VkOwoJCX0nOwoJCglteSAkanNfdGFnID0gJHhtbC0+ -Y3JlYXRlX2VsZW1lbnQoICJzY3JpcHQiICk7CgkkanNfdGFnLT5hcHBlbmRDaGlsZCggJHhtbC0+ -Y3JlYXRlX3RleHRfbm9kZSggJHRvZ2dsZV9mdW5jdGlvbiApICk7CglyZXR1cm4gJGpzX3RhZzsK -fQoKc3ViIHJlbmRlcl9jbGVhcmZvcm0KewoJbXkoICRzZWxmLCAkeG1sICkgPSBAXzsKCglteSAk -Y2xlYXJfZnVuY3Rpb24gPSAnCgkJZnVuY3Rpb24gY2xlYXJGb3JtKCl7CgkJCXZhciByZXBvcnQg -PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggImN1c3RvbV9yZXBvcnQiICk7CgkJCXZhciBmb3Jt -ID0gcmVwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInNlbGVjdGVkX2Zvcm0iKVswXTsKCQkJ -dmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJpbnB1dCIgKTsKCQkJZm9y -KCBpbnB1dCBvZiBpbnB1dHMgKQoJCQl7CgkJCQlmaWVsZF90eXBlID0gaW5wdXQudHlwZS50b0xv -d2VyQ2FzZSgpOwkKCQkJCWNvbnNvbGUubG9nKGZpZWxkX3R5cGUpOwoJCQkJc3dpdGNoIChmaWVs -ZF90eXBlKQoJCQkJewoJCQkJY2FzZSAidGV4dCI6CgkJCQljYXNlICJ0ZXh0YXJlYSI6CgkJCQkJ -aW5wdXQudmFsdWUgPSAiIjsKCQkJCQlicmVhazsKCQkJCWNhc2UgInJhZGlvIjoKCQkJCWNhc2Ug -ImNoZWNrYm94IjoKCQkJCQlpZiAoaW5wdXQuY2hlY2tlZCkKCQkJCQl7CiAgICAgICAgCQkJCQlp -bnB1dC5jaGVja2VkID0gZmFsc2U7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSAic2VsZWN0 -LW9uZSI6CgkJCQljYXNlICJzZWxlY3QtbXVsdGkiOgoJCQkJCWlucHV0LnNlbGVjdGVkSW5kZXgg -PSAtMTsKCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0JCgkJ -ICAgICAgICB2YXIgc2VsZWN0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJzZWxlY3Qi -ICk7CgkJCWZvciggc2VsZWN0IG9mIHNlbGVjdHMgKQoJCQl7CQoJCQkJaWYoIHNlbGVjdC5oYXNB -dHRyaWJ1dGUoIm11bHRpcGxlIikgKQoJCQkJewoJCQkJCXNlbGVjdC5zZWxlY3RlZEluZGV4ID0g -LTE7CgkJCQl9CgkJCX0JCQoKCQl9JzsJCQoKCW15ICRqc190YWcgPSAkeG1sLT5jcmVhdGVfZWxl -bWVudCggInNjcmlwdCIgKTsKICAgICAgICAkanNfdGFnLT5hcHBlbmRDaGlsZCggJHhtbC0+Y3Jl -YXRlX3RleHRfbm9kZSggJGNsZWFyX2Z1bmN0aW9uICkgKTsKICAgICAgICByZXR1cm4gJGpzX3Rh -ZzsKfQoKMTsK +aWQgKGtleXMgJXNlYXJjaF9mb3JtcykKCXsKICAgICAgICAgICAgICAgIG15ICRmaWVsZHNfdGFn +ID0gJHNlYXJjaF9mb3Jtc3skZm9ybWlkfS0+ZmluZG5vZGVzKCd0cicpLT5zaXplID4gMCA/ICJ0 +YWJsZSIgOiAiZGl2IjsKICAgICAgICAgICAgICAgIG15ICRmaWVsZHNfd3JhcHBlciA9ICRyZXBv +LT5tYWtlX2VsZW1lbnQoICRmaWVsZHNfdGFnLCBjbGFzcz0+ImVwX3NlYXJjaF9maWVsZHMiLCBp +ZD0+JGZvcm1pZCwgc3R5bGU9PiJkaXNwbGF5OiBub25lIiApOwogICAgICAgICAgICAgICAgJGZv +cm0tPmFwcGVuZENoaWxkKCAkZmllbGRzX3dyYXBwZXIgKTsKICAgICAgICAgICAgICAgICRmaWVs +ZHNfd3JhcHBlci0+YXBwZW5kQ2hpbGQoICRzZWFyY2hfZm9ybXN7JGZvcm1pZH0gKQoJfQoKCSRm +b3JtLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9jb250cm9scyApOwoJJGN1c3RvbS0+YXBw +ZW5kQ2hpbGQoICRmb3JtICk7CgoJI2phdmFzY3JpcHQgZm9yIGNoYW5naW5nIGZvcm1zIGJhc2Vk +IG9uIHJlcG9ydCBzZWxlY3Rpb24KCSRjdXN0b20tPmFwcGVuZENoaWxkKCAkcmVwby0+bWFrZV9q +YXZhc2NyaXB0KCAnaW5pdFJlcG9ydEZvcm0oKTsnICkgKTsKCglpZiggJGN1c3RvbV9yZXBvcnRz +ICYmICRwcmVzZXRzX2FkZGVkID4gMCApICNzZXQgdXAgdGFiIGludGVyZmFjZQoJewoJCW15IEBs +YWJlbHM7CgkgICAgICAgIG15IEBwYW5lbHM7CgoJCXB1c2ggQGxhYmVscywgJHJlcG8tPmh0bWxf +cGhyYXNlKCAicmVwb3J0c19wcmVzZXQiICk7CgkJcHVzaCBAbGFiZWxzLCAkcmVwby0+aHRtbF9w +aHJhc2UoICJyZXBvcnRzX2N1c3RvbSIgKTsKCgkJcHVzaCBAcGFuZWxzLCAkcHJlc2V0OwoJCXB1 +c2ggQHBhbmVscywgJGN1c3RvbTsKCgkJbXkgJW9wdHM7CgkJaWYoICRzZWxmLT57cHJvY2Vzc29y +fS0+e2FjdGlvbn0gZXEgIm5ld3NlYXJjaCIgfHwgJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0aW9u +fSBlcSAidXBkYXRlIiAgKQoJCXsKCQkJJG9wdHN7Y3VycmVudH0gPSAxOwoJCX0KCgkJcmV0dXJu +ICRyZXBvLT54aHRtbC0+dGFicyhcQGxhYmVscywgXEBwYW5lbHMsICVvcHRzICk7Cgl9CgllbHNp +ZiggJHByZXNldHNfYWRkZWQgPiAwICkKCXsJCgkJcmV0dXJuICRwcmVzZXQ7Cgl9CgllbHNlCgl7 +CgkJcmV0dXJuICRjdXN0b207Cgl9Cn0KCnN1YiByZW5kZXJfc2VhcmNoX2ZpZWxkcwp7CiAgICAg +ICAgbXkoICRzZWxmLCAkc2VhcmNoLCAkZm9ybWlkICkgPSBAXzsKCglteSAkZXhwID0gJHNlbGYt +PntzZXNzaW9ufS0+cGFyYW0oICJleHAiICk7CglteSAkc2NvbmYgPSAkc2VsZi0+e3Nlc3Npb259 +LT5wYXJhbSggInNjb25mIiApOwogICAgICAgIGlmKCBkZWZpbmVkICRleHAgJiYgZGVmaW5lZCAk +c2NvbmYgJiYgJHNjb25mIGVxICRmb3JtaWQgKQoJewogICAgICAgICAgICAgICAgJHNlYXJjaC0+ +ZnJvbV9zdHJpbmcoICRleHAgKTsKICAJfQoKICAgICAgICBteSAkZnJhZyA9ICRzZWxmLT57c2Vz +c2lvbn0tPm1ha2VfZG9jX2ZyYWdtZW50OwogICAgICAgIGZvcmVhY2ggbXkgJHNmICggJHNlYXJj +aC0+Z2V0X25vbl9maWx0ZXJfc2VhcmNoZmllbGRzICkKICAgICAgICB7CgkgICAgICAgICAkZnJh +Zy0+YXBwZW5kQ2hpbGQoCiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57c2Vzc2lvbn0t +PnJlbmRlcl9yb3dfd2l0aF9oZWxwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl +bHBfcHJlZml4ID0+ICRzZi0+Z2V0X2Zvcm1fcHJlZml4LiJfaGVscCIsCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgaGVscCA9PiAkc2YtPnJlbmRlcl9oZWxwLAogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGxhYmVsID0+ICRzZi0+cmVuZGVyX25hbWUsCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgZmllbGQgPT4gJHNmLT5yZW5kZXIsCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgbm9fdG9nZ2xlID0+ICggJHNmLT57c2hvd19oZWxwfSBlcSAiYWx3 +YXlzIiApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX2hlbHAgPT4gKCAkc2Yt +PntzaG93X2hlbHB9IGVxICJuZXZlciIgKSwKICAgICAgICAJKSApOwogICAgICAgIH0KCiAgICAg +ICAgcmV0dXJuICRmcmFnOwp9CgpzdWIgcmVuZGVyX2NvbnRyb2xzCnsKCW15KCAkc2VsZiwgJHdp +dGhfanMgKSA9IEBfOwoKCW15ICRkaXYgPSAkc2VsZi0+e3Nlc3Npb259LT5tYWtlX2VsZW1lbnQo +CiAgICAgICAgICAgICAgICAiZGl2IiAsCiAgICAgICAgICAgICAgICBjbGFzcyA9PiAiZXBfc2Vh +cmNoX2J1dHRvbnMiICk7CiAgICAgICAgJGRpdi0+YXBwZW5kQ2hpbGQoICRzZWxmLT57c2Vzc2lv +bn0tPnJlbmRlcl9hY3Rpb25fYnV0dG9ucygKICAgICAgICAgICAgICAgIF9vcmRlciA9PiBbICJz +ZWFyY2giIF0sCiAgICAgICAgICAgICAgICAjbmV3c2VhcmNoID0+ICRzZWxmLT57c2Vzc2lvbn0t +PnBocmFzZSggImxpYi9zZWFyY2hleHByZXNzaW9uOmFjdGlvbl9yZXNldCIgKSwKICAgICAgICAg +ICAgICAgIHNlYXJjaCA9PiAkc2VsZi0+e3Nlc3Npb259LT5waHJhc2UoICJsaWIvc2VhcmNoZXhw +cmVzc2lvbjphY3Rpb25fc2VhcmNoIiApICkKICAgICAgICApOwoJCglteSAkeG1sID0gJHNlbGYt +PntzZXNzaW9ufS0+eG1sOwoKCWlmKCAkd2l0aF9qcyApCgl7CgkJbXkgJGNsZWFyX2Zvcm0gPSAk +ZGl2LT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9jbGVhcmZvcm0oICR4bWwgKSApOwoJfQoK +ICAgICAgICBteSAkY2xlYXJfYnRuID0gJGRpdi0+YXBwZW5kQ2hpbGQoICR4bWwtPmNyZWF0ZV9l +bGVtZW50KCAiYnV0dG9uIiwKICAgICAgICAJdHlwZSA9PiAiYnV0dG9uIiwKICAgICAgICAgICAg +ICAgIG9uY2xpY2sgPT4gImNsZWFyRm9ybSgpOyIsCiAgICAgICAgICAgICAgICBjbGFzcyA9PiAi +ZXBfZm9ybV9hY3Rpb25fYnV0dG9uIGNsZWFyX2J1dHRvbiIsCiAgICAgICAgICAgICAgICApICk7 +CiAgICAgICAgJGNsZWFyX2J0bi0+YXBwZW5kQ2hpbGQoICR4bWwtPmNyZWF0ZV90ZXh0X25vZGUo +ICRzZWxmLT57c2Vzc2lvbn0tPmh0bWxfcGhyYXNlKCAibGliL3NlYXJjaGV4cHJlc3Npb246YWN0 +aW9uX3Jlc2V0IiApICkgKTsKCXJldHVybiAkZGl2Owp9CgpzdWIgcmVuZGVyCnsKCW15KCAkc2Vs +ZiApID0gQF87CgoJIyBpZiB1c2VycyBhY2Nlc3MgU2NyZWVuOjpSZXBvcnQgZGlyZWN0bHkgd2Ug +d2FudCB0byBkaXNwbGF5IHNvbWUgc29ydCBvZiBtZW51CgkjIHdoZXJlIHVzZXJzIGNhbiBzZWxl +Y3Qgdmlld2FibGUgcmVwb3J0cwoJaWYoICggIkVQcmludHM6OlBsdWdpbjo6Ii4kc2VsZi0+Z2V0 +X2lkIGVxIF9fUEFDS0FHRV9fICYmICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gbmUgInNl +YXJjaCIgKSB8fCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rpb259IGVxICJuZXdzZWFyY2giICkK +CXsJCgkJcmV0dXJuICRzZWxmLT5yZW5kZXJfc3BsYXNoX3BhZ2U7Cgl9CgoJbXkgJHJlcG8gPSAk +c2VsZi0+cmVwb3NpdG9yeTsKCglteSAkY2h1bmsgPSAkcmVwby0+bWFrZV9kb2NfZnJhZ21lbnQ7 +CgoJJGNodW5rLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9leHBvcnRfYmFyICk7CgkkY2h1 +bmstPmFwcGVuZENoaWxkKCAkc2VsZi0+cmVuZGVyX2dyb3VwX29wdGlvbnMgKTsKCSRjaHVuay0+ +YXBwZW5kQ2hpbGQoICRzZWxmLT5yZW5kZXJfc29ydF9vcHRpb25zICk7CgoJaWYoICRzZWxmLT57 +cHJvY2Vzc29yfS0+e2FjdGlvbn0gZXEgInNlYXJjaCIgKQoJewoJCSRjaHVuay0+YXBwZW5kQ2hp +bGQoICRzZWxmLT5yZW5kZXJfcmVmaW5lX3NlYXJjaCApOwoJfQoKCW15ICRpdGVtcyA9ICRzZWxm +LT5pdGVtczsKCWlmKCAhZGVmaW5lZCAkaXRlbXMgfHwgJGl0ZW1zLT5jb3VudCA9PSAwICkKCXsK +CQkjIE5vIGl0ZW1zIG1lc3NhZ2UKCX0KCglteSAkanNvbjsKCglpZiggZGVmaW5lZCAkc2VsZi0+ +e3Byb2Nlc3Nvcn0tPntncm91cH0gJiYgJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXB9IG5lICIi +ICkKCXsKCQlteSAkZ3JvdXBlZCA9ICRzZWxmLT5nZXRfZ3JvdXBlZF9pdGVtcyggJGl0ZW1zLCAx +ICk7CgkJJGpzb24gPSBlbmNvZGVfanNvbiAkZ3JvdXBlZDsKCX0KCWVsc2UKCXsKCQlteSAkaXRl +bV9pZHMgPSBkZWZpbmVkICRpdGVtcyA/ICRpdGVtcy0+aWRzIDogW107CgkJJGpzb24gPSAiWyIu +am9pbignLCcsQCRpdGVtX2lkcykuIl0iOwoJfQoKICAgICAgICBteSAkdXJsID0gJHJlcG8tPmN1 +cnJlbnRfdXJsKCBob3N0ID0+IDEgKTsKICAgICAgICBteSAkcGFyYW1ldGVycyA9IFVSSS0+bmV3 +OwogICAgICAgICRwYXJhbWV0ZXJzLT5xdWVyeV9mb3JtKAogICAgICAgICAgICAgICAgJHNlbGYt +PmhpZGRlbl9iaXRzLAogICAgICAgICk7CiAgICAgICAgJHBhcmFtZXRlcnMgPSAkcGFyYW1ldGVy +cy0+cXVlcnk7CgkJCglteSAkZHMgPSAkcmVwby0+ZGF0YXNldCggJHNlbGYtPnBhcmFtKCAnZGF0 +YXNldGlkJyApICkgaWYgZGVmaW5lZCAkc2VsZi0+cGFyYW0oICdkYXRhc2V0aWQnICk7CglteSAk +cHJlZml4ID0gJGRzLT5iYXNlX2lkIGlmIGRlZmluZWQgJGRzOwoKCSMgdGhlIG1haW4gPGRpdj4K +CW15ICRjb250YWluZXJfaWQgPSBzcHJpbnRmKCAiZXBfcmVwb3J0XyVzXF9jb250YWluZXIiLCAk +c2VsZi0+Z2V0X3JlcG9ydCApOwoKCSN1cGRhdGUgamF2YXNjcmlwdCBwYXJhbWV0ZXJzIGlmIGNv +bWluZyBmcm9tIGEgc2VhcmNoIHJlcXVlc3QKCWlmKCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPnthY3Rp +b259IGVxICJzZWFyY2giICkKCXsKCQlteSAkcGx1Z2luID0gJHNlbGYtPntwcm9jZXNzb3J9LT57 +cmVwb3J0fTsKCQkkcGx1Z2luID1+IHMvOi8lM0EvZzsKCQkkcGFyYW1ldGVycyA9ICJzY3JlZW49 +JHBsdWdpbiI7CgkJJHByZWZpeCA9ICRzZWxmLT57cHJvY2Vzc29yfS0+e2RhdGFzZXRpZH07CgkJ +JGNvbnRhaW5lcl9pZCA9IHNwcmludGYoICJlcF9yZXBvcnRfJXNcX2NvbnRhaW5lciIsICRzZWxm +LT57cHJvY2Vzc29yfS0+e3JlcG9ydF9wbHVnaW59LT57cmVwb3J0fSApOwoJfQoJCgkjc2hvdy9o +aWRlIGNvbXBsaWFuY2UKCW15ICRzaG93X2NvbXBsaWFuY2UgPSAxOwoJJHNob3dfY29tcGxpYW5j +ZSA9ICRzZWxmLT57c2hvd19jb21wbGlhbmNlfSBpZiBkZWZpbmVkICRzZWxmLT57c2hvd19jb21w +bGlhbmNlfTsKCgkjY3VzdG9tIGxhYmVscwoJbXkgJGxhYmVscyA9IDA7CgkkbGFiZWxzID0gZW5j +b2RlX2pzb24gJHNlbGYtPntsYWJlbHN9IGlmIGRlZmluZWQgJHNlbGYtPntsYWJlbHN9OwoKCSRj +aHVuay0+YXBwZW5kQ2hpbGQoICRyZXBvLT5tYWtlX2phdmFzY3JpcHQoIDw8IkVPSiIgKSApOwpk +b2N1bWVudC5vYnNlcnZlKCJkb206bG9hZGVkIiwgZnVuY3Rpb24oKSB7CgluZXcgRVByaW50c19T +Y3JlZW5fUmVwb3J0X0xvYWRlciggewoJCWlkczogJGpzb24sCgkJc3RlcDogMjAsCgkJcHJlZml4 +OiAnJHByZWZpeCcsCgkJdXJsOiAnJHVybCcsCgkJcGFyYW1ldGVyczogJyRwYXJhbWV0ZXJzJywJ +CQoJCWNvbnRhaW5lcl9pZDogJyRjb250YWluZXJfaWQnLAoJCXNob3dfY29tcGxpYW5jZTogJHNo +b3dfY29tcGxpYW5jZSwKCQlsYWJlbHM6ICRsYWJlbHMKCX0gKS5leGVjdXRlKCk7Cgp9KTsKRU9K +CgkkY2h1bmstPmFwcGVuZENoaWxkKCAkcmVwby0+bWFrZV9lbGVtZW50KCAnZGl2JywgY2xhc3Mg +PT4gJ2VwX3JlcG9ydF9wYWdlJywgaWQgPT4gJGNvbnRhaW5lcl9pZCApICk7CgoJI3Nob3cgc2Vh +cmNoIGNvbnRyb2xzIGFmdGVyIHRoZSByZXN1bHRzIHRvbwoJaWYoICRzZWxmLT57cHJvY2Vzc29y +fS0+e2FjdGlvbn0gZXEgInNlYXJjaCIgKQogICAgICAgIHsKICAgICAgICAgICAgICAgICRjaHVu +ay0+YXBwZW5kQ2hpbGQoICRzZWxmLT5yZW5kZXJfcmVmaW5lX3NlYXJjaCApOwogICAgICAgIH0K +CglyZXR1cm4gJGNodW5rOwp9CgoKc3ViIHJlbmRlcl9leHBvcnRfYmFyCnsKCW15KCAkc2VsZiAp +ID0gQF87CgoJbXkgJHJlcG8gPSAkc2VsZi0+cmVwb3NpdG9yeTsKCglteSAkY2h1bmsgPSAkcmVw +by0+bWFrZV9kb2NfZnJhZ21lbnQ7CgoJbXkgQHBsdWdpbnMgPSAkc2VsZi0+ZXhwb3J0X3BsdWdp +bnM7CglyZXR1cm4gJGNodW5rIHVubGVzcyggc2NhbGFyKCBAcGx1Z2lucyApIHx8IGRlZmluZWQo +ICRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRzIiApICkg +KTsKCglteSAkcmVwb3J0X2RzID0gJHJlcG8tPmRhdGFzZXQoICRzZWxmLT57ZGF0YXNldGlkfSAp +OwoJbXkgJGZvcm0gPSAkc2VsZi0+cmVuZGVyX2Zvcm07CgkkZm9ybS0+c2V0QXR0cmlidXRlKCBt +ZXRob2QgPT4gImdldCIgKTsKCglpZiggZGVmaW5lZCAkc2VsZi0+cmVwb3NpdG9yeS0+cGFyYW0o +ICJzZWFyY2giICkgfHwgJHNlbGYtPntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAic2VhcmNoIiAp +Cgl7CgkJJGZvcm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX2hpZGRlbl9maWVsZCggInNl +YXJjaCIsICAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzZWFyY2h9LT5zZXJpYWxpc2UpICk7Cgl9CgkJ +CglpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fSApCgl7CgkJJGZvcm0tPmFw +cGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX2hpZGRlbl9maWVsZCggInNvcnQiLCAgJHNlbGYtPntw +cm9jZXNzb3J9LT57c29ydH0gKSApOwoJfQkKCglpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nv +cn0tPntncm91cF9leHB9ICkKCXsKCQkkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJf +aGlkZGVuX2ZpZWxkKCAiZ3JvdXAiLCAgJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXBfZXhwfSAp +ICk7Cgl9CQoKCWlmKCAhZGVmaW5lZCggJHJlcG8tPmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29u +Zn0sICJleHBvcnRmaWVsZHMiICkgKSApCgl7CgkJI25vIGN1c3RvbSBleHBvcnQgZmllbGRzIGRl +ZmluZWQsIHVzZSBleHBvcnQgcGx1Z2lucyBkZXNpZ25lZCBmb3IgdGhpcyByZXBvcnQKCQlteSAk +c2VsZWN0ID0gJGZvcm0tPmFwcGVuZENoaWxkKCAkcmVwby0+cmVuZGVyX29wdGlvbl9saXN0KAoJ +CQluYW1lID0+ICdleHBvcnQnLAoJCQl2YWx1ZXMgPT4gW21hcCB7ICRfLT5nZXRfc3VidHlwZSB9 +IEBwbHVnaW5zXSwKCQkJbGFiZWxzID0+IHttYXAgeyAkXy0+Z2V0X3N1YnR5cGUgPT4gJF8tPmdl +dF9uYW1lIH0gQHBsdWdpbnN9LAoJCSkgKTsKCX0KCWVsc2UKCXsKCQkjcHJvdmlkZSBsaXN0IG9m +IGRlZmF1bHQgZXhwb3J0IHBsdWdpbnMgZm9yIHJlcG9ydHMKCQlAcGx1Z2lucyA9ICRzZWxmLT5l +eHBvcnRfcGx1Z2lucyggImdlbmVyaWMiICk7CgkJbXkgJHNlbGVjdCA9ICRmb3JtLT5hcHBlbmRD +aGlsZCggJHJlcG8tPnJlbmRlcl9vcHRpb25fbGlzdCgKCQkJbmFtZSA9PiAnZXhwb3J0JywKCQkJ +dmFsdWVzID0+IFttYXAgeyAkXy0+Z2V0X3N1YnR5cGUgfSBAcGx1Z2luc10sCgkJCWxhYmVscyA9 +PiB7bWFwIHsgJF8tPmdldF9zdWJ0eXBlID0+ICRfLT5nZXRfbmFtZSB9IEBwbHVnaW5zfSwKCQkp +ICk7CgoJCSNjcmVhdGUgbGFiZWxzIGFuZCBwYW5lbHMgZm9yIHRhYmJlZCBpbnRlcmZhY2VkCgkJ +bXkgJHhtbCA9ICRyZXBvLT54bWw7CgkJbXkgJHhodG1sID0gJHJlcG8tPnhodG1sOwoKCQlteSAk +c2VsZWN0X2FsbCA9ICRmb3JtLT5hcHBlbmRDaGlsZCggJHNlbGYtPnJlbmRlcl9zZWxlY3RhbGwo +ICR4bWwgKSApOwoJCW15ICRzZWxlY3RfYnRuID0gJGZvcm0tPmFwcGVuZENoaWxkKCAkeG1sLT5j +cmVhdGVfZWxlbWVudCggImJ1dHRvbiIsCgkgICAgICAgICAgICAgICAgICAgIHR5cGUgPT4gImJ1 +dHRvbiIsCgkgICAgICAgICAgICAgICAgICAgIG9uY2xpY2sgPT4gInRvZ2dsZUNoZWNrYm94ZXMo +KTsiLAoJICAgICAgICAgICAgICAgICAgICBjbGFzcyA9PiAiZXBfZm9ybV9hY3Rpb25fYnV0dG9u +IHNlbGVjdF9idXR0b24iLAoJCSkgKTsKCSAgICAJJHNlbGVjdF9idG4tPmFwcGVuZENoaWxkKCAk +eG1sLT5jcmVhdGVfdGV4dF9ub2RlKCAkcmVwby0+aHRtbF9waHJhc2UoICJyZXBvcnRfc2VsZWN0 +IiApICkgKTsKCgkJI2FsbG93IHVzZXIgdG8gY2hvb3NlIHdoaWNoIGZpZWxkcyB0aGV5IHdhbnQg +dG8gZXhwb3J0CgkJbXkgJGV4cG9ydF9vcHRpb25zID0gJHJlcG8tPm1ha2VfZWxlbWVudCggImRp +diIgKTsKCgkJbXkgQGtleXM7CgkJaWYoIGRlZmluZWQgJHJlcG8tPmNvbmZpZyggJHNlbGYtPntl +eHBvcnRfY29uZn0sICJleHBvcnRmaWVsZF9vcmRlciIgKSApCgkJewoJCQlAa2V5cyA9IEB7JHJl +cG8tPmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRmaWVsZF9vcmRlciIgKX07 +CgkJfQoJCWVsc2UKCQl7CgkJCUBrZXlzID0ga2V5cyAleyRyZXBvLT5jb25maWcoICRzZWxmLT57 +ZXhwb3J0X2NvbmZ9LCAiZXhwb3J0ZmllbGRzIiApfTsgCgkJfQoJCWZvcmVhY2ggbXkgJGtleSAo +IEBrZXlzICkKCQl7CgkJCSNjcmVhdGUgYSBuZXcgbGlzdAkJCQoJCQlteSAkdWwgPSAkcmVwby0+ +bWFrZV9lbGVtZW50KCAidWwiLAoJICAgICAgICAgICAgICAgIAlzdHlsZSA9PiAibGlzdC1zdHls +ZS10eXBlOiBub25lIgoJICAgICAgICAJKTsKCQkJCgkJCW15ICRjb3VudCA9IDA7ICNjb3VudCBo +b3cgbWFueSBmaWVsZHMgd2UgYWRkCgkJCWZvcmVhY2ggbXkgJGZpZWxkbmFtZSggQHskcmVwby0+ +Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkcyIgKS0+eyRrZXl9fSAp +CgkJCXsKCQkJCWlmKCBkZWZpbmVkICRyZXBvLT5jb25maWcoICRzZWxmLT57ZXhwb3J0X2NvbmZ9 +LCAiY3VzdG9tX2V4cG9ydCIgKSAmJiBleGlzdHMgJHskcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4 +cG9ydF9jb25mfSwgImN1c3RvbV9leHBvcnQiICl9eyRmaWVsZG5hbWV9ICkgI3dlIGhhdmUgYSBj +dXN0b20gZXhwb3J0IGZ1bmN0aW9uIGluc3RlYWQgCgkJCQl7CgkJCQkJJGNvdW50Kys7CgkJCQkJ +JHNlbGYtPl9leHBvcnRfZmllbGRfY2hlY2tib3goICRyZXBvLCAkZmllbGRuYW1lLCAkdWwsICRy +ZXBvLT5odG1sX3BocmFzZSggImV4cG9ydGZpZWxkb3B0aW9uczokZmllbGRuYW1lIiApICk7IAoJ +CQkJfQoJCQkJZWxzaWYoIGRlZmluZWQgRVByaW50czo6VXRpbHM6OmZpZWxkX2Zyb21fY29uZmln +X3N0cmluZyggJHJlcG9ydF9kcywgJGZpZWxkbmFtZSApICkKCQkJCXsKCQkJCQlteSAkZmllbGQg +PSBFUHJpbnRzOjpVdGlsczo6ZmllbGRfZnJvbV9jb25maWdfc3RyaW5nKCAkcmVwb3J0X2RzLCAk +ZmllbGRuYW1lICk7CgkJCQkJJGNvdW50Kys7CiAgICAgICAJCQkgICAgICAgIAkkc2VsZi0+X2V4 +cG9ydF9maWVsZF9jaGVja2JveCggJHJlcG8sICRmaWVsZG5hbWUsICR1bCwgJGZpZWxkLT5yZW5k +ZXJfbmFtZSApOwoKCQkJCX0KCQkJfQoJCQlpZiggJGNvdW50ICkgI29ubHkgYWRkIG9wdGlvbnMg +aWYgd2UgaGF2ZSBhbnkgZmllbGRzIHRvIHNob3cKCQkJewoJCQkJbXkgJGRpdiA9ICRyZXBvLT5t +YWtlX2VsZW1lbnQoICJkaXYiLCBjbGFzcz0+InJlcG9ydF9leHBvcnRfb3B0aW9ucyIgKTsKCQkJ +CSRkaXYtPmFwcGVuZENoaWxkKCBteSAkaCA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJoNCIgKSAp +OwoJCQkJJGgtPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJleHBvcnRmaWVsZHM6 +JGtleSIgKSApOwkKCQkJCSRkaXYtPmFwcGVuZENoaWxkKCAkdWwgKTsKCQkJCSRleHBvcnRfb3B0 +aW9ucy0+YXBwZW5kQ2hpbGQoICRkaXYgKTsKCQkJfQogICAgICAgCQl9CgkJJGZvcm0tPmFwcGVu +ZENoaWxkKCAkZXhwb3J0X29wdGlvbnMgKTsKCX0KCgkkZm9ybS0+YXBwZW5kQ2hpbGQoIAoJCSRy +ZXBvLT5yZW5kZXJfYnV0dG9uKAoJCQluYW1lID0+ICJfYWN0aW9uX2V4cG9ydCIsCgkJCWNsYXNz +ID0+ICJlcF9mb3JtX2FjdGlvbl9idXR0b24iLAoJCQl2YWx1ZSA9PiAkcmVwby0+cGhyYXNlKCAn +Y2dpL3VzZXJzL2VkaXRfZXByaW50OmV4cG9ydCcgKQoJKSApOwoKCSNjcmVhdGUgYSBjb2xsYXBz +aWJsZSBib3gKCW15ICRpbWFnZXN1cmwgPSAkcmVwby0+Y3VycmVudF91cmwoIHBhdGggPT4gInN0 +YXRpYyIsICJzdHlsZS9pbWFnZXMiICk7CglteSAlb3B0aW9uczsKCSRvcHRpb25ze3Nlc3Npb259 +ID0gJHJlcG87CiAgICAgICAgJG9wdGlvbnN7aWR9ID0gImVwX3JlcG9ydF9leHBvcnQiOwogICAg +ICAgICRvcHRpb25ze3RpdGxlfSA9ICRyZXBvLT5odG1sX3BocmFzZSggImV4cG9ydF90aXRsZSIg +KTsKICAgICAgICAkb3B0aW9uc3tjb2xsYXBzZWR9ID0gMTsKCSRvcHRpb25ze2NvbnRlbnR9ID0g +JGZvcm07CiAgICAgICAgJG9wdGlvbnN7c2hvd19pY29uX3VybH0gPSAiJGltYWdlc3VybC9tdWx0 +aV9kb3duLnBuZyI7Cgkkb3B0aW9uc3toaWRlX2ljb25fdXJsfSA9ICIkaW1hZ2VzdXJsL211bHRp +X3VwLnBuZyI7CgoJbXkgJGJveCA9ICRyZXBvLT5tYWtlX2VsZW1lbnQoICJkaXYiLCBzdHlsZT0+ +InRleHQtYWxpZ246IGxlZnQiICk7CgkkYm94LT5hcHBlbmRDaGlsZCggRVByaW50czo6Qm94Ojpy +ZW5kZXIoICVvcHRpb25zICkgKTsKCSRjaHVuay0+YXBwZW5kQ2hpbGQoICRib3ggKTsKCglyZXR1 +cm4gJGNodW5rOwp9CgpzdWIgcmVuZGVyX3NvcnRfb3B0aW9ucwp7CglteSggJHNlbGYgKSA9IEBf +OwoKCW15ICRyZXBvID0gJHNlbGYtPnJlcG9zaXRvcnk7CgoJbXkgJGNodW5rID0gJHJlcG8tPm1h +a2VfZG9jX2ZyYWdtZW50OwoKCXJldHVybiAkY2h1bmsgdW5sZXNzKCBkZWZpbmVkKCAkcmVwby0+ +Y29uZmlnKCAkc2VsZi0+e3NvcnRfY29uZn0sICJzb3J0ZmllbGRzIiApICkgKTsKCglteSAkc29y +dF9jb25mID0gJHJlcG8tPmNvbmZpZyggJHNlbGYtPntzb3J0X2NvbmZ9LCAic29ydGZpZWxkcyIg +KTsKCgkjYnVpbGQgdGhlIGZvcm0KCW15ICRmb3JtID0gJHNlbGYtPnJlbmRlcl9mb3JtOwoJJGZv +cm0tPnNldEF0dHJpYnV0ZSggbmFtZSA9PiAic29ydF9yZXBvcnQiICk7CiAgICAgICAgJGZvcm0t +PnNldEF0dHJpYnV0ZSggbWV0aG9kID0+ICJnZXQiICk7CgkkY2h1bmstPmFwcGVuZENoaWxkKCAk +Zm9ybSApOwoJCglpZiggZGVmaW5lZCAkcmVwby0+cGFyYW0oICJzZWFyY2giICkgfHwgJHNlbGYt +Pntwcm9jZXNzb3J9LT57YWN0aW9ufSBlcSAic2VhcmNoIiApCgl7CgkJJGZvcm0tPmFwcGVuZENo +aWxkKCAkcmVwby0+cmVuZGVyX2hpZGRlbl9maWVsZCggInNlYXJjaCIsICAkc2VsZi0+e3Byb2Nl +c3Nvcn0tPntzZWFyY2h9LT5zZXJpYWxpc2UpICk7Cgl9CgoJaWYoIGRlZmluZWQgJHNlbGYtPntw +cm9jZXNzb3J9LT57Z3JvdXBfZXhwfSApCgl7CgkJJGZvcm0tPmFwcGVuZENoaWxkKCAkcmVwby0+ +cmVuZGVyX2hpZGRlbl9maWVsZCggImdyb3VwIiwgICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3Vw +X2V4cH0gKSApOwoJfQoKCSNkaXNwbGF5IHRoZSBsaW5rcyB0aGF0IHdpbGwgdHJpZ2dlciB0aGUg +Zm9ybQoJbXkgJGZpcnN0ID0gMTsKCW15ICRzb3J0X2xpbmtzID0gJHJlcG8tPm1ha2VfZG9jX2Zy +YWdtZW50OwoJZm9yZWFjaCBteSAkc29ydF9uYW1lICgga2V5cyAleyRzb3J0X2NvbmZ9ICkKICAg +ICAgICB7CgkJbXkgJHNvcnRfdmFsdWUgPSAkc29ydF9jb25mLT57JHNvcnRfbmFtZX07CgkJaWYo +ICRmaXJzdCApCgkJewoJCQkkZm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVu +X2ZpZWxkKCAic29ydCIsICRzb3J0X3ZhbHVlKSApOwoJCX0KCgkJaWYoICEkZmlyc3QgKQogICAg +ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgCSRzb3J0X2xpbmtzLT5hcHBlbmRDaGlsZCgg +JHJlcG8tPmh0bWxfcGhyYXNlKCAiVXBkYXRlL1ZpZXdzOmdyb3VwX3NlcGVyYXRvciIgKSApOwog +ICAgICAgICAgICAgICAgfQoJCQoJCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e3Nv +cnR9ICYmICRzZWxmLT57cHJvY2Vzc29yfS0+e3NvcnR9IGVxICRzb3J0X3ZhbHVlICkKCQl7CgkJ +CW15ICRzdHJvbmcgPSAkcmVwby0+bWFrZV9lbGVtZW50KCAic3Ryb25nIiApOwoJCQkkc3Ryb25n +LT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhyYXNlKCAkc2VsZi0+e3NvcnRfY29uZn0gLiAi +OnNvcnQ6IiAuICRzb3J0X25hbWUgKSApOwoJCQkkc29ydF9saW5rcy0+YXBwZW5kQ2hpbGQoICRz +dHJvbmcgKTsKCQl9CgkJZWxzZQoJCXsKCQkJbXkgJGxpbmsgPSAkcmVwby0+cmVuZGVyX2xpbmso +ICdqYXZhc2NyaXB0OnNvcnRfcmVwb3J0KCInLiRzb3J0X3ZhbHVlLiciKScgKTsJCgkJCSRsaW5r +LT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhyYXNlKCAkc2VsZi0+e3NvcnRfY29uZn0gLiAi +OnNvcnQ6IiAuICRzb3J0X25hbWUgKSApOwoJCQkkc29ydF9saW5rcy0+YXBwZW5kQ2hpbGQoICRs +aW5rICk7CgkJfQoJCSRmaXJzdCA9IDA7CiAgICAgICAgfSAgICAgICAgICAgCgkkY2h1bmstPmFw +cGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJSZXBvcnQ6c29ydF9saW5rcyIsIGxpbmtz +PT4kc29ydF9saW5rcyApICk7CglyZXR1cm4gJGNodW5rOwp9CgpzdWIgcmVuZGVyX2dyb3VwX29w +dGlvbnMKewoJbXkoICRzZWxmICkgPSBAXzsKCglteSAkcmVwbyA9ICRzZWxmLT5yZXBvc2l0b3J5 +OwoKCW15ICRjaHVuayA9ICRyZXBvLT5tYWtlX2RvY19mcmFnbWVudDsKCglyZXR1cm4gJGNodW5r +IHVubGVzcyggZGVmaW5lZCggJHJlcG8tPmNvbmZpZyggJHNlbGYtPntncm91cF9jb25mfSwgImdy +b3VwZmllbGRzIiApICkgKTsKCglteSAkZ3JvdXBfY29uZiA9ICRyZXBvLT5jb25maWcoICRzZWxm +LT57Z3JvdXBfY29uZn0sICJncm91cGZpZWxkcyIgKTsKCgkjYnVpbGQgdGhlIGZvcm0KCW15ICRm +b3JtID0gJHNlbGYtPnJlbmRlcl9mb3JtOwoJJGZvcm0tPnNldEF0dHJpYnV0ZSggbmFtZSA9PiAi +Z3JvdXBfcmVwb3J0IiApOwogICAgICAgICRmb3JtLT5zZXRBdHRyaWJ1dGUoIG1ldGhvZCA9PiAi +Z2V0IiApOwoJJGNodW5rLT5hcHBlbmRDaGlsZCggJGZvcm0gKTsKCQoJaWYoIGRlZmluZWQgJHJl +cG8tPnBhcmFtKCAic2VhcmNoIiApIHx8ICRzZWxmLT57cHJvY2Vzc29yfS0+e2FjdGlvbn0gZXEg +InNlYXJjaCIgKQoJewoJCSRmb3JtLT5hcHBlbmRDaGlsZCggJHJlcG8tPnJlbmRlcl9oaWRkZW5f +ZmllbGQoICJzZWFyY2giLCAgJHNlbGYtPntwcm9jZXNzb3J9LT57c2VhcmNofS0+c2VyaWFsaXNl +KSApOwoJfQoKCWlmKCBkZWZpbmVkICRzZWxmLT57cHJvY2Vzc29yfS0+e3NvcnR9ICkKCXsKCQkk +Zm9ybS0+YXBwZW5kQ2hpbGQoICRyZXBvLT5yZW5kZXJfaGlkZGVuX2ZpZWxkKCAic29ydCIsICAk +c2VsZi0+e3Byb2Nlc3Nvcn0tPntzb3J0fSApICk7Cgl9CgoJI2Rpc3BsYXkgdGhlIGxpbmtzIHRo +YXQgd2lsbCB0cmlnZ2VyIHRoZSBmb3JtCglteSAkZmlyc3QgPSAxOwoJbXkgJGdyb3VwX2xpbmtz +ID0gJHJlcG8tPm1ha2VfZG9jX2ZyYWdtZW50OwoJZm9yZWFjaCBteSAkZ3JvdXBfdmFsdWUgKCBA +eyRncm91cF9jb25mfSApCiAgICAgICAgewoJCW15ICgkZ3JvdXBfZmllbGQpID0gc3BsaXQoLzsv +LCAkZ3JvdXBfdmFsdWUgKTsKCQlpZiggJGZpcnN0ICkKCQl7CgkJCSRmb3JtLT5hcHBlbmRDaGls +ZCggJHJlcG8tPnJlbmRlcl9oaWRkZW5fZmllbGQoICJncm91cCIsICRncm91cF92YWx1ZSkgKTsK +CQl9CgoJCWlmKCAhJGZpcnN0ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIAkk +Z3JvdXBfbGlua3MtPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJVcGRhdGUvVmll +d3M6Z3JvdXBfc2VwZXJhdG9yIiApICk7CiAgICAgICAgICAgICAgICB9CgkJCgkJaWYoIGRlZmlu +ZWQgJHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXB9ICYmICRzZWxmLT57cHJvY2Vzc29yfS0+e2dy +b3VwfSBlcSAkZ3JvdXBfZmllbGQgKQoJCXsKCQkJbXkgJHN0cm9uZyA9ICRyZXBvLT5tYWtlX2Vs +ZW1lbnQoICJzdHJvbmciICk7CgkJCSRzdHJvbmctPmFwcGVuZENoaWxkKCAkcmVwby0+aHRtbF9w +aHJhc2UoICRzZWxmLT57Z3JvdXBfY29uZn0gLiAiOmdyb3VwOiIgLiAkZ3JvdXBfZmllbGQgKSAp +OwoJCQkkZ3JvdXBfbGlua3MtPmFwcGVuZENoaWxkKCAkc3Ryb25nICk7CgkJfQoJCWVsc2UKCQl7 +CgkJCW15ICRsaW5rID0gJHJlcG8tPnJlbmRlcl9saW5rKCAnamF2YXNjcmlwdDpncm91cF9yZXBv +cnQoIicuJGdyb3VwX3ZhbHVlLiciKScgKTsJCgkJCSRsaW5rLT5hcHBlbmRDaGlsZCggJHJlcG8t +Pmh0bWxfcGhyYXNlKCAkc2VsZi0+e2dyb3VwX2NvbmZ9IC4gIjpncm91cDoiIC4gJGdyb3VwX2Zp +ZWxkICkgKTsKCQkJJGdyb3VwX2xpbmtzLT5hcHBlbmRDaGlsZCggJGxpbmsgKTsKCQl9CgkJJGZp +cnN0ID0gMDsKICAgICAgICB9ICAgICAgICAgICAKCQoJI25vIGdyb3VwaW5nIGxpbmsgYXQgdGhl +IGVuZAoJJGdyb3VwX2xpbmtzLT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhyYXNlKCAiVXBk +YXRlL1ZpZXdzOmdyb3VwX3NlcGVyYXRvciIgKSApOwoJaWYoIGRlZmluZWQgJHNlbGYtPntwcm9j +ZXNzb3J9LT57Z3JvdXB9ICYmICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwfSBuZSAiIiApCgl7 +CgkJbXkgJGxpbmsgPSAkcmVwby0+cmVuZGVyX2xpbmsoICdqYXZhc2NyaXB0Omdyb3VwX3JlcG9y +dCgiIiknICk7CQoJCSRsaW5rLT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhyYXNlKCAicmVw +b3J0Om5vX2dyb3VwaW5nIiApICk7CgkJJGdyb3VwX2xpbmtzLT5hcHBlbmRDaGlsZCggJGxpbmsg +KTsKCX0KCWVsc2UKCXsKCQlteSAkc3Ryb25nID0gJHJlcG8tPm1ha2VfZWxlbWVudCggInN0cm9u +ZyIgKTsKIAkJJHN0cm9uZy0+YXBwZW5kQ2hpbGQoICRyZXBvLT5odG1sX3BocmFzZSggInJlcG9y +dDpub19ncm91cGluZyIgKSApOwoJCSRncm91cF9saW5rcy0+YXBwZW5kQ2hpbGQoICRzdHJvbmcg +KTsKCX0KCQoJJGNodW5rLT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhyYXNlKCAiUmVwb3J0 +Omdyb3VwX2xpbmtzIiwgbGlua3M9PiRncm91cF9saW5rcyApICk7CgoJcmV0dXJuICRjaHVuazsK +fQoKc3ViIHJlbmRlcl9yZWZpbmVfc2VhcmNoCnsKCW15KCAkc2VsZiApID0gQF87CgoJbXkgJHJl +cG8gPSAkc2VsZi0+cmVwb3NpdG9yeTsKCglteSAkY2h1bmsgPSAkcmVwby0+bWFrZV9kb2NfZnJh +Z21lbnQ7CgkKCWlmKCBkZWZpbmVkICRyZXBvLT5wYXJhbSggInNlYXJjaCIgKSB8fCAkc2VsZi0+ +e3Byb2Nlc3Nvcn0tPnthY3Rpb259IGVxICJzZWFyY2giICkKCXsKCQlteSAkZXNjZXhwID0gJHNl +bGYtPntwcm9jZXNzb3J9LT57c2VhcmNofS0+c2VyaWFsaXNlOwoJCW15ICRjYWNoZWlkID0gJHJl +cG8tPnBhcmFtKCAiY2FjaGUiICk7CgkJbXkgJHNjb25mID0gJHNlbGYtPntzY29uZn07CQoKCQkj +c2V0IHVwIG5ldyBzZWFyY2ggbGluawoJCW15ICRuZXdfYmFzZXVybCA9IFVSSS0+bmV3KCAkc2Vs +Zi0+e3Nlc3Npb259LT5nZXRfdXJpICk7CiAgICAgICAgCSRuZXdfYmFzZXVybC0+cXVlcnlfZm9y +bSgKCSAgICAgICAgICAgICAgICBzY3JlZW4gPT4gIlJlcG9ydCIsCgkJCXNjb25mID0+ICRzY29u +ZiwKICAgICAgICAJKTsKCgkJbXkgJHNlYXJjaF9saW5rcyA9ICRyZXBvLT5tYWtlX2RvY19mcmFn +bWVudDsKCQlteSAkbmV3X2xpbmsgPSAkcmVwby0+cmVuZGVyX2xpbmsoICIkbmV3X2Jhc2V1cmwm +X2FjdGlvbl9uZXdzZWFyY2g9MSIgKTsKCSAgIAkkbmV3X2xpbmstPmFwcGVuZENoaWxkKCAkcmVw +by0+aHRtbF9waHJhc2UoICJsaWIvc2VhcmNoZXhwcmVzc2lvbjpuZXciICkgKTsKCQkkc2VhcmNo +X2xpbmtzLT5hcHBlbmRDaGlsZCggJG5ld19saW5rICk7CgoJCSNhZGQgYSBzZXBhcmF0b3IuLi4K +CQkkc2VhcmNoX2xpbmtzLT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhyYXNlKCAiVXBkYXRl +L1ZpZXdzOmdyb3VwX3NlcGVyYXRvciIgKSApOwoKCQkjc2V0IHVwIHJlZmluZSBzZWFyY2ggbGlu +awoJCW15ICRyZWZpbmVfYmFzZXVybCA9IFVSSS0+bmV3KCAkc2VsZi0+e3Nlc3Npb259LT5nZXRf +dXJpICk7CiAgICAgICAgCSRyZWZpbmVfYmFzZXVybC0+cXVlcnlfZm9ybSgKCSAgICAgICAgCWNh +Y2hlID0+ICRjYWNoZWlkLAoJICAgICAgICAgICAgICAgIGV4cCA9PiAkZXNjZXhwLAogICAgICAg +IAkgICAgICAgIHNjcmVlbiA9PiAiUmVwb3J0IiwKICAgICAgICAgICAgICAgIAlkYXRhc2V0ID0+ +ICRzZWxmLT57ZGF0YXNldGlkfSwKICAgICAgICAgICAgICAgIAlvcmRlciA9PiAkc2VsZi0+e3By +b2Nlc3Nvcn0tPntzZWFyY2h9LT57Y3VzdG9tX29yZGVyfSwKCQkJc2NvbmYgPT4gJHNjb25mLAog +ICAgICAgIAkpOwoKCQlteSAkcmVmaW5lX2xpbmsgPSAkcmVwby0+cmVuZGVyX2xpbmsoICIkcmVm +aW5lX2Jhc2V1cmwmX2FjdGlvbl91cGRhdGU9MSIgKTsKICAgICAgCQkkcmVmaW5lX2xpbmstPmFw +cGVuZENoaWxkKCAkcmVwby0+aHRtbF9waHJhc2UoICJsaWIvc2VhcmNoZXhwcmVzc2lvbjpyZWZp +bmUiICkgKTsgICAJICAgICAgICAgCgkgICAgICAgICRzZWFyY2hfbGlua3MtPmFwcGVuZENoaWxk +KCAkcmVmaW5lX2xpbmsgKTsKCgkJJGNodW5rLT5hcHBlbmRDaGlsZCggJHJlcG8tPmh0bWxfcGhy +YXNlKCAiUmVwb3J0OnNlYXJjaF9saW5rcyIsIGxpbmtzPT4kc2VhcmNoX2xpbmtzICkgKTsKCX0K +CglyZXR1cm4gJGNodW5rOwp9CgoKI2FkZHMgYSBuZXcgY2hlY2tib3ggdG8gYWxsb3cgdGhlIHVz +ZXIgdG8gY2hvb3NlIHdoaWNoIGZpZWxkcyB0byBleHBvcnQKc3ViIF9leHBvcnRfZmllbGRfY2hl +Y2tib3gKewoJbXkoICRzZWxmLCAkcmVwbywgJGZpZWxkbmFtZSwgJHVsLCAkZmllbGRsYWJlbCAp +ID0gQF87CgoJbXkgJGxpID0gJHJlcG8tPm1ha2VfZWxlbWVudCggImxpIiApOwoJJHVsLT5hcHBl +bmRDaGlsZCggJGxpICk7CgogICAgICAgIG15ICRjaGVja2JveCA9ICRyZXBvLT5tYWtlX2VsZW1l +bnQoICJpbnB1dCIsIHR5cGUgPT4gImNoZWNrYm94IiwgaWQgPT4gJGZpZWxkbmFtZSwgbmFtZSA9 +PiAkZmllbGRuYW1lLCB2YWx1ZSA9PiAkZmllbGRuYW1lICk7CglpZiggZGVmaW5lZCAkcmVwby0+ +Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkX2RlZmF1bHRzIiApICkK +CXsKCQlpZiggKCBncmVwIHsgJGZpZWxkbmFtZSBlcSAkXyB9IEB7JHJlcG8tPmNvbmZpZyggJHNl +bGYtPntleHBvcnRfY29uZn0sICJleHBvcnRmaWVsZF9kZWZhdWx0cyIgKX0gKSB8fCAoIHNjYWxh +ciggQHskcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4cG9ydF9jb25mfSwgImV4cG9ydGZpZWxkX2Rl +ZmF1bHRzIiApfSApID09IDAgKSApCgkJewoJCQkjb25seSBjaGVjayBkZWZhdWx0cyBvciBjaGVj +ayBldmVyeXRoaW5nIGlmIGRlZmF1bHRzIG5vdCBkZWZpbmVkCgkJCSRjaGVja2JveC0+c2V0QXR0 +cmlidXRlKCAiY2hlY2tlZCIsICJ5ZXMiICk7CgkJfQoJfQoJbXkgJGxhYmVsID0gJHJlcG8tPm1h +a2VfZWxlbWVudCggImxhYmVsIiwgZm9yID0+ICRmaWVsZG5hbWUgKTsKCSRsYWJlbC0+YXBwZW5k +Q2hpbGQoICRmaWVsZGxhYmVsICk7CgoJJGxpLT5hcHBlbmRDaGlsZCggJGNoZWNrYm94ICk7Cgkk +bGktPmFwcGVuZENoaWxkKCAkbGFiZWwgKTsKfQoKIyMjIHV0aWxpdHkgbWV0aG9kcwoKIyBUT0RP +IHNob3VsZCB1c2UgIkpTT04iIHBhY2thZ2UKc3ViIHRvX2pzb24KewogICAgICAgIG15KCAkc2Vs +ZiwgJG9iamVjdCApID0gQF87CgoJcmV0dXJuICIiIGlmKCAhZGVmaW5lZCAkb2JqZWN0ICk7Cgoj +IFVURi04IGlzc3VlczoKIwlyZXR1cm4gSlNPTi0+bmV3LT51dGY4KDEpLT5lbmNvZGUoICRvYmpl +Y3QgKTsKCiAgICAgICAgaWYoIHJlZiggJG9iamVjdCApIGVxICdIQVNIJyApCiAgICAgICAgewog +ICAgICAgICAgICAgICAgbXkgQHN0dWZmOwogICAgICAgICAgICAgICAgd2hpbGUoIG15KCAkaywg +JHYgKSA9IGVhY2goICUkb2JqZWN0ICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg +ICAgICAgICAgICBuZXh0IGlmKCAhRVByaW50czo6VXRpbHM6OmlzX3NldCggJHYgKSApOyAgICAg +ICAjIG9yICdudWxsJyA/CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHN0dWZmLCBFUHJp +bnRzOjpVdGlsczo6anNfc3RyaW5nKCAkayApLic6Jy4kc2VsZi0+dG9fanNvbiggJHYgKQogICAg +ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICd7JyAuIGpvaW4oICIsIiwgQHN0 +dWZmICkgLiAnfSc7CiAgICAgICAgfQogICAgICAgIGVsc2lmKCByZWYoICRvYmplY3QgKSBlcSAn +QVJSQVknICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBteSBAc3R1ZmY7CiAgICAgICAgICAg +ICAgICBmb3JlYWNoKCBAJG9iamVjdCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg +ICAgICAgICAgIG5leHQgaWYoICFFUHJpbnRzOjpVdGlsczo6aXNfc2V0KCAkXyApICk7CiAgICAg +ICAgICAgICAgICAgICAgICAgIHB1c2ggQHN0dWZmLCAkc2VsZi0+dG9fanNvbiggJF8gKTsKICAg +ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAnWycgLiBqb2luKCAiLCIsIEBz +dHVmZiApIC4gJ10nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEVQcmludHM6OlV0aWxzOjpq +c19zdHJpbmcoICRvYmplY3QgKTsKfQoKc3ViIGV4cG9ydF9wbHVnaW5zCnsKICAgICAgICBteSgg +JHNlbGYsICRnZW5lcmljICkgPSBAXzsKCglteSBAcGx1Z2luX2lkczsKCQoJbXkgJHJlcG8gPSAk +c2VsZi0+cmVwb3NpdG9yeTsKCglpZiggZGVmaW5lZCAkcmVwby0+Y29uZmlnKCAkc2VsZi0+e2V4 +cG9ydF9jb25mfSwgImV4cG9ydF9wbHVnaW5zIiApICkKCXsKCQlAcGx1Z2luX2lkcyA9IEB7JHJl +cG8tPmNvbmZpZyggJHNlbGYtPntleHBvcnRfY29uZn0sICJleHBvcnRfcGx1Z2lucyIgKX07Cgl9 +CQoJZWxzaWYoICRnZW5lcmljICkKCXsKIAkJQHBsdWdpbl9pZHMgPSAkcmVwby0+cGx1Z2luX2xp +c3QoCiAgICAgICAgICAgICAgICAJdHlwZSA9PiAiRXhwb3J0IiwKCSAgICAgICAgICAgICAgICBj +YW5fYWNjZXB0ID0+ICJyZXBvcnQvZ2VuZXJpYyIsCiAgICAgICAgCSAgICAgICAgaXNfdmlzaWJs +ZSA9PiAic3RhZmYiLAoJCQlpc19hZHZlcnRpc2VkID0+IDEsCgkgICAgICAgICk7Cgl9CgllbHNl +Cgl7CiAgICAgICAgCUBwbHVnaW5faWRzID0gJHJlcG8tPnBsdWdpbl9saXN0KAogICAgICAgICAg +ICAgICAgCXR5cGUgPT4gIkV4cG9ydCIsCgkgICAgICAgICAgICAgICAgY2FuX2FjY2VwdCA9PiAi +cmVwb3J0LyIuJHNlbGYtPmdldF9yZXBvcnQsCiAgICAgICAgCSAgICAgICAgaXNfdmlzaWJsZSA9 +PiAic3RhZmYiLAoJCQlpc19hZHZlcnRpc2VkID0+IDEsCgkgICAgICAgICk7CiAgICAgICAgfQoJ +bXkgQHBsdWdpbnM7Cglmb3JlYWNoIG15ICRpZCAoIEBwbHVnaW5faWRzICkKICAgICAgICB7CiAg +ICAgICAgICAgICAgICBteSAkcCA9ICRyZXBvLT5wbHVnaW4oICIkaWQiICkgb3IgbmV4dDsKICAg +ICAgICAgICAgICAgIHB1c2ggQHBsdWdpbnMsICRwOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJu +IEBwbHVnaW5zOwp9CgpzdWIgcmVwb3J0X3BsdWdpbnMKewoJbXkoICRzZWxmICkgPSBAXzsKCgkj +IHNmMiAtIGNhbid0IGxpc3QgdmlhIHR5cGUgPT4gIlNlYXJjaDo6UmVwb3J0IiA/IAogICAgICAg +IG15IEBwbHVnaW5faWRzID0gJHNlbGYtPnJlcG9zaXRvcnktPnBsdWdpbl9saXN0KAogICAgICAg +ICAgICAgICAgdHlwZSA9PiAiU2NyZWVuIiwKICAgICAgICApOwoKICAgICAgICBteSBAcGx1Z2lu +czsKCWZvcmVhY2ggbXkgJGlkICggQHBsdWdpbl9pZHMgKQogICAgICAgIHsKCQluZXh0IGlmKCAk +aWQgIX4gL15TY3JlZW46OlJlcG9ydDo6LyApOwkjIG5vdGUgdGhpcyBhbHNvIGZpbHRlcnMgb3V0 +ICRzZWxmIChha2EgU2NyZWVuOjpSZXBvcnQpCgogICAgICAgICAgICAgICAgbXkgJHAgPSAkc2Vs +Zi0+cmVwb3NpdG9yeS0+cGx1Z2luKCAiJGlkIiApOwoJCW5leHQgaWYoICFkZWZpbmVkICRwIHx8 +ICEkcC0+Y2FuX2JlX3ZpZXdlZCApOwoKICAgICAgICAgICAgICAgIHB1c2ggQHBsdWdpbnMsICRw +OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEBwbHVnaW5zOwp9CgojcmV0dXJucyBhIGhhc2gg +b2YgdmFsdWVzIG1hcHBlZCB0byBhIGxhYmVsIGFuZCBhIGxpc3QKI2lmIGlkc19vbmx5IGlzIHNl +dCB0aGUgbGlzdCBvZiBpdGVtcyBhcmUganVzdCByZXByZXNlbnRlZCBieSB0aGVpciBpZCAodXNl +ZCBieSByZXBvcnQgSlMpCnN1YiBnZXRfZ3JvdXBlZF9pdGVtcwp7CglteSggJHNlbGYsICRpdGVt +cywgJGlkc19vbmx5ICkgPSBAXzsKCW15ICRzZXNzaW9uID0gJHNlbGYtPntzZXNzaW9ufTsKCW15 +ICVncm91cGVkOwoKCW15ICRncm91cGluZyA9ICRzZWxmLT57cHJvY2Vzc29yfS0+e2dyb3VwfTsK +CglteSAkbWV0YWZpZWxkID0gJGl0ZW1zLT5nZXRfZGF0YXNldC0+ZmllbGQoICRncm91cGluZyAp +OwoKCSNzZXQgZ3JvdXBfb3B0cyBpZiBhcHByb3ByaWF0ZQoJaWYoIGRlZmluZWQgJHNlbGYtPntw +cm9jZXNzb3J9LT57Z3JvdXBfb3B0c30gKQoJewoJCWlmKCAkbWV0YWZpZWxkLT50eXBlIGVxICJk +YXRlIiApCgkJewoJCQkkbWV0YWZpZWxkLT57cmVuZGVyX3Jlc30gPSAkc2VsZi0+e3Byb2Nlc3Nv +cn0tPntncm91cF9vcHRzfS0+e3Jlc30gaWYgZXhpc3RzICRzZWxmLT57cHJvY2Vzc29yfS0+e2dy +b3VwX29wdHN9LT57cmVzfTsKCQl9Cgl9CgoJI2NyZWF0ZSBhIGhhc2ggb2YgZmllbGQgdmFsdWVz +IHRvIGl0ZW1zIChvciBpdGVtIGlkcykKCSRpdGVtcy0+bWFwKCBzdWIgewoJICAgICAgIAlteSgg +JHNlc3Npb24sICRkYXRhc2V0LCAkaXRlbSApID0gQF87CgkJCgkJbXkgJG11bHRpcGxlID0gJG1l +dGFmaWVsZC0+Z2V0X3Byb3BlcnR5KCAibXVsdGlwbGUiICk7CgkJbXkgQGdyb3VwX3ZhbHVlczsK +CQlpZiggJG11bHRpcGxlICkKICAgICAgICAgICAgICAgIHsKCQkJQGdyb3VwX3ZhbHVlcyA9IEB7 +JGl0ZW0tPnZhbHVlKCAkZ3JvdXBpbmcgKX07CgkJfQoJCWVsc2UKCQl7CQkJCgkJCUBncm91cF92 +YWx1ZXMgPSAoJGl0ZW0tPnZhbHVlKCAkZ3JvdXBpbmcgKSk7CgkJfQoJCgkJaWYoIHNjYWxhciBA +Z3JvdXBfdmFsdWVzID4gMCApCgkJewoJCQlmb3JlYWNoIG15ICRncm91cF92YWx1ZSAoIEBncm91 +cF92YWx1ZXMgKQoJCQl7CgkJCQlteSAkZ3JvdXBfaWQgPSAkbWV0YWZpZWxkLT5nZXRfaWRfZnJv +bV92YWx1ZSggJHNlc3Npb24sICRncm91cF92YWx1ZSApOwoJCQkJI3RydW5jYXRlIGdyb3VwIGlm +IGFwcHJvcHJpYXRlCgkJCQlpZiggZGVmaW5lZCAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9v +cHRzfSApCgkJCQl7CgkJCQkJJGdyb3VwX2lkID0gIHN1YnN0ciggIlx1JGdyb3VwX2lkIiwgMCwg +JHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXBfb3B0c30tPnt0cnVuY2F0ZX0gKSBpZiBleGlzdHMg +JHNlbGYtPntwcm9jZXNzb3J9LT57Z3JvdXBfb3B0c30tPnt0cnVuY2F0ZX07CgkJCQl9CgoJCSAg +ICAgICAgCWlmKCBleGlzdHMgJGdyb3VwZWR7JGdyb3VwX2lkfSApICN3ZSd2ZSBhbHJlYWR5IHNl +dCB0aGlzIGxpc3QgdXAsIHB1c2ggYSBuZXcgaXRlbSBvbiB0byB0aGUgbGlzdAoJCSAgICAgICAg +ICAgICAgIAl7CgkJCQkJaWYoICRpZHNfb25seSApICNzb21ldGltZXMgd2Ugb25seSB3YW50IGlk +cyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgaXRlbQoJCQkJCXsKCQkJCQkJcHVzaCBAeyRncm91cGVk +eyRncm91cF9pZH19LCAkaXRlbS0+aWQ7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXB1 +c2ggQHskZ3JvdXBlZHskZ3JvdXBfaWR9fSwgJGl0ZW07CgkJCQkJfQoJICAgICAgIAkJICAgICAg +ICB9CiAgICAgICAgCSAgICAgIAkJZWxzZSAjc2V0IHVwIGEgbGlzdCBmb3IgdGhpcyBncm91cAoJ +ICAgICAgICAJICAgICAgIAl7CgkJCQkJbXkgQGdyb3VwZWRfaXRlbXM7CgkJCQkJaWYoICRpZHNf +b25seSApICNzb21ldGltZXMgd2Ugb25seSB3YW50IGlkcyByYXRoZXIgdGhhbiB0aGUgd2hvbGUg +aXRlbQoJCSAgICAgICAgICAgICAgICAgICAgICAgIHsJCiAgICAgICAgCQkgICAgICAgICAgICAg +ICAgICAgICAgICBAZ3JvdXBlZF9pdGVtcyA9ICgkaXRlbS0+aWQpOwogICAgICAgICAgICAgICAg +CQkgICAgICAgIH0KCSAgICAgICAgICAgICAgICAJICAgICAgICBlbHNlCiAgICAgICAgCSAgICAg +ICAgICAgICAgICAJewoJICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgQGdyb3VwZWRf +aXRlbXMgPSAoJGl0ZW0pOwogICAgICAgIAkJICAgICAgICAgICAgICAgCX0KCSAgICAgICAgICAg +ICAgICAJICAgICAgICAkZ3JvdXBlZHskZ3JvdXBfaWR9ID0gW0Bncm91cGVkX2l0ZW1zXTsKCQkJ +CX0KICAgICAgICAgICAgICAgCQl9CgkJfQoJCWVsc2UKCQl7CgkJCW15ICRncm91cF9pZCA9ICJV +bnNwZWNpZmllZCAiIC4gJG1ldGFmaWVsZC0+bmFtZTsKICAJICAgIAkJaWYoIGV4aXN0cyAkZ3Jv +dXBlZHskZ3JvdXBfaWR9ICkgI3dlJ3ZlIGFscmVhZHkgc2V0IHRoaXMgbGlzdCB1cCwgcHVzaCBh +IG5ldyBpdGVtIG9uIHRvIHRoZSBsaXN0CgkJICAJewoJCQkJaWYoICRpZHNfb25seSApICNzb21l +dGltZXMgd2Ugb25seSB3YW50IGlkcyByYXRoZXIgdGhhbiB0aGUgd2hvbGUgaXRlbQoJCQkJewoJ +CQkJCXB1c2ggQHskZ3JvdXBlZHskZ3JvdXBfaWR9fSwgJGl0ZW0tPmlkOwoJCQkJfQoJCQkJZWxz +ZQoJCQkJewoJCQkJCXB1c2ggQHskZ3JvdXBlZHskZ3JvdXBfaWR9fSwgJGl0ZW07CgkJCQl9Cgkg +ICAgICAgCQl9CiAgICAgICAgCSAgICAgIAllbHNlICNzZXQgdXAgYSBsaXN0IGZvciB0aGlzIGdy +b3VwCgkgICAgICAgIAl7CgkJCQlteSBAZ3JvdXBlZF9pdGVtczsKCQkJCWlmKCAkaWRzX29ubHkg +KSAjc29tZXRpbWVzIHdlIG9ubHkgd2FudCBpZHMgcmF0aGVyIHRoYW4gdGhlIHdob2xlIGl0ZW0K +CQkgICAgICAgICAgICAgICAgewkKICAgICAgICAJCQkJQGdyb3VwZWRfaXRlbXMgPSAoJGl0ZW0t +PmlkKTsKICAgICAgICAgICAgICAgIAkJfQoJICAgICAgICAgICAgICAgIAllbHNlCiAgICAgICAg +CSAgICAgICAgICAgICAgICB7CgkgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgIEBncm91 +cGVkX2l0ZW1zID0gKCRpdGVtKTsKICAgICAgICAJICAgICAgICAgICAgICAgCX0KCSAgICAgICAg +ICAgICAgCSAgICAgICAgJGdyb3VwZWR7JGdyb3VwX2lkfSA9IFtAZ3JvdXBlZF9pdGVtc107CgkJ +CX0KCQl9CiAgICAgICAJfSApOwoKCSNub3cgc29ydCB0aGUgZ3JvdXBzIGFuZCBhZGQgaHVtYW4g +cmVhZGFibGUgbGFiZWxzCglteSBAc29ydGVkX2dyb3VwczsKCQoJbXkgJHJldmVyc2UgPSAwOwoJ +JHJldmVyc2UgPSAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfS0+e3JldmVyc2Vfb3Jk +ZXJ9IGlmIGV4aXN0cyAkc2VsZi0+e3Byb2Nlc3Nvcn0tPntncm91cF9vcHRzfS0+e3JldmVyc2Vf +b3JkZXJ9OwoJaWYoICRtZXRhZmllbGQtPnR5cGUgZXEgIm5hbWVkc2V0IiApCgl7CgkJbXkoICR0 +YWdzLCAkbGFiZWxzICkgPSAkbWV0YWZpZWxkLT50YWdzX2FuZF9sYWJlbHMoICRzZXNzaW9uICk7 +CgkJI2NvbnZlcnQgdGFncyB0byBhIGhhc2ggb2YgdmFsdWVzIGFuZCBhIHByaW9yaXR5IChmb3Ig +b3JkZXJpbmcpCgkJbXkgJXByaW9yaXR5OwoJCW15ICRpbmRleCA9IDE7CgkJZm9yZWFjaCBteSAk +dGFnIChAeyR0YWdzfSApCgkJewoJCQkkcHJpb3JpdHl7JHRhZ30gPSAkaW5kZXg7CgkJCSRpbmRl +eCsrOwoJCX0KCQlmb3JlYWNoIG15ICRrZXkgKHNvcnQgeyRwcmlvcml0eXskYX0gPD0+ICRwcmlv +cml0eXskYn19IGtleXMgJWdyb3VwZWQpCiAgICAgICAgCXsKCQkJcHVzaCBAc29ydGVkX2dyb3Vw +cywgJHNlbGYtPl9tYWtlX2dyb3VwZWRfaXRlbSggJGdyb3VwZWR7JGtleX0sICRsYWJlbHMtPnsk +a2V5fSApOwoJCX0KCX0KCWVsc2lmKCAkbWV0YWZpZWxkLT50eXBlIGVxICJzdWJqZWN0IiApCgl7 +CQkKCQlteSAkZHMgPSAkc2Vzc2lvbi0+ZGF0YXNldCggInN1YmplY3QiICk7CgkJbXkgQHZhbHVl +cyA9IGtleXMgJWdyb3VwZWQ7CgkJbXkgJHNvcnRlZCA9ICRtZXRhZmllbGQtPnNvcnRfdmFsdWVz +KCAkc2Vzc2lvbiwgXEB2YWx1ZXMgKTsKCQlteSAlcHJpb3JpdHk7CgkJbXkgJGluZGV4ID0gMTsK +ICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHZhbHVlIChAeyRzb3J0ZWR9ICkKICAgICAgICAg +ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHByaW9yaXR5eyR2YWx1ZX0gPSAkaW5k +ZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbmRleCsrOwogICAgICAgICAgICAgICAgfQoJ +CWZvcmVhY2ggbXkgJGtleSAoc29ydCB7JHByaW9yaXR5eyRhfSA8PT4gJHByaW9yaXR5eyRifX0g +a2V5cyAlZ3JvdXBlZCkKICAgICAgICAgICAgICAgIHsKCQkJbXkgJHN1YmogPSAkZHMtPmRhdGFv +YmooICRrZXkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAc29ydGVkX2dyb3Vwcywg +JHNlbGYtPl9tYWtlX2dyb3VwZWRfaXRlbSggJGdyb3VwZWR7JGtleX0sIEVQcmludHM6OlV0aWxz +Ojp0cmVlX3RvX3V0ZjgoICRzdWJqLT5yZW5kZXJfZGVzY3JpcHRpb24gKSApIGlmIGRlZmluZWQg +JHN1Ymo7CiAgICAgICAgICAgICAgICB9Cgl9CgllbHNpZiggJG1ldGFmaWVsZC0+dHlwZSBlcSAi +ZGF0ZSIgKQoJewoJCWlmKCAkcmV2ZXJzZSApCgkJewoJCQlmb3JlYWNoIG15ICRrZXkgKCBzb3J0 +IHskYiA8PT4gJGF9IGtleXMgJWdyb3VwZWQgKQoJCQl7CgkJCQlwdXNoIEBzb3J0ZWRfZ3JvdXBz +LCAkc2VsZi0+X21ha2VfZ3JvdXBlZF9pdGVtKCAkZ3JvdXBlZHska2V5fSwgJGtleSApOwoJCQl9 +CgkJfQoJCWVsc2UKCQl7CgkJCWZvcmVhY2ggbXkgJGtleSAoIHNvcnQgeyRhIDw9PiAkYn0ga2V5 +cyAlZ3JvdXBlZCApCgkJCXsKCQkJCXB1c2ggQHNvcnRlZF9ncm91cHMsICRzZWxmLT5fbWFrZV9n +cm91cGVkX2l0ZW0oICRncm91cGVkeyRrZXl9LCAka2V5ICk7CgkJCX0KCQl9Cgl9CgllbHNlCgl7 +CQoJCWlmKCAkcmV2ZXJzZSApCgkJewoJCQlmb3JlYWNoIG15ICRrZXkgKCBzb3J0IHskYiBjbXAg +JGF9IGtleXMgJWdyb3VwZWQgKQoJCQl7CgkJCQlwdXNoIEBzb3J0ZWRfZ3JvdXBzLCAkc2VsZi0+ +X21ha2VfZ3JvdXBlZF9pdGVtKCAkZ3JvdXBlZHska2V5fSwgJGtleSApOwoJCQl9CgkJfQoJCWVs +c2UKCQl7CgkJCWZvcmVhY2ggbXkgJGtleSAoIHNvcnQga2V5cyAlZ3JvdXBlZCApCgkJCXsKCQkJ +CXB1c2ggQHNvcnRlZF9ncm91cHMsICRzZWxmLT5fbWFrZV9ncm91cGVkX2l0ZW0oICRncm91cGVk +eyRrZXl9LCAka2V5ICk7CgkJCX0KCQl9Cgl9CgoJI2NoZWNrIGZvciBhbnkgdW5zcGVjaWZpZWQg +Z3JvdXBzCglteSAkZ3JvdXBfaWQgPSAiVW5zcGVjaWZpZWQgIiAuICRtZXRhZmllbGQtPm5hbWU7 +CglpZiggZXhpc3RzICRncm91cGVkeyRncm91cF9pZH0gKQoJewoJCXB1c2ggQHNvcnRlZF9ncm91 +cHMsICRzZWxmLT5fbWFrZV9ncm91cGVkX2l0ZW0oICRncm91cGVkeyRncm91cF9pZH0sICRncm91 +cF9pZCApOwoJfQoKCXJldHVybiBcQHNvcnRlZF9ncm91cHM7Cn0JCgoKc3ViIF9tYWtlX2dyb3Vw +ZWRfaXRlbQp7CglteSggJHNlbGYsICRsaXN0LCAkbGFiZWwgKSA9IEBfOwoJbXkgJWdyb3VwOwoJ +JGdyb3Vwe2xpc3R9ID0gJGxpc3Q7CgkkZ3JvdXB7bGFiZWx9ID0gJGxhYmVsOwoJcmV0dXJuIFwl +Z3JvdXA7Cn0KCnN1YiByZW5kZXJfc2VsZWN0YWxsCnsKCW15KCAkc2VsZiwgJHhtbCApID0gQF87 +CgoJbXkgJHRvZ2dsZV9mdW5jdGlvbiA9ICcKCQl2YXIgaXNDaGVja2VkID0gdHJ1ZTsKCQlmdW5j +dGlvbiB0b2dnbGVDaGVja2JveGVzKCkgewoJICAgICAgICAJdmFyIGV4cG9ydF9vcHRpb25zID0g +ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgicmVwb3J0X2V4cG9ydF9vcHRpb25zIik7 +CgkJCWZvciggZXhwb3J0X29wdGlvbiBvZiBleHBvcnRfb3B0aW9ucyApCgkJCXsKCQkJCXZhciBj +aGVja2JveGVzID0gZXhwb3J0X29wdGlvbi5nZXRFbGVtZW50c0J5VGFnTmFtZSggImlucHV0IiAp +CgkJCQlmb3IoIGNoZWNrYm94IG9mIGNoZWNrYm94ZXMgKQoJCQkJewoJCQkJCWlmKGlzQ2hlY2tl +ZCkKCQkJCQl7CgkgICAgICAgICAgICAgICAgCQkJY2hlY2tib3guY2hlY2tlZCA9ICIiOwoJCSAg +CSAgICAgICAgCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJICAgICAgICAgICAgICAgIGNoZWNrYm94 +LmNoZWNrZWQgPSAiY2hlY2tlZCI7CgkJCQkJfQoJICAgICAgICAgCQl9CgkJCX0KCQkJaXNDaGVj +a2VkID0gIWlzQ2hlY2tlZDsKCQl9JzsKCQoJbXkgJGpzX3RhZyA9ICR4bWwtPmNyZWF0ZV9lbGVt +ZW50KCAic2NyaXB0IiApOwoJJGpzX3RhZy0+YXBwZW5kQ2hpbGQoICR4bWwtPmNyZWF0ZV90ZXh0 +X25vZGUoICR0b2dnbGVfZnVuY3Rpb24gKSApOwoJcmV0dXJuICRqc190YWc7Cn0KCnN1YiByZW5k +ZXJfY2xlYXJmb3JtCnsKCW15KCAkc2VsZiwgJHhtbCApID0gQF87CgoJbXkgJGNsZWFyX2Z1bmN0 +aW9uID0gJwoJCWZ1bmN0aW9uIGNsZWFyRm9ybSgpewoJCQl2YXIgcmVwb3J0ID0gZG9jdW1lbnQu +Z2V0RWxlbWVudEJ5SWQoICJjdXN0b21fcmVwb3J0IiApOwoJCQl2YXIgZm9ybSA9IHJlcG9ydC5n +ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJzZWxlY3RlZF9mb3JtIilbMF07CgkJCXZhciBpbnB1dHMg +PSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiaW5wdXQiICk7CgkJCWZvciggaW5wdXQgb2Yg +aW5wdXRzICkKCQkJewoJCQkJZmllbGRfdHlwZSA9IGlucHV0LnR5cGUudG9Mb3dlckNhc2UoKTsJ +CgkJCQljb25zb2xlLmxvZyhmaWVsZF90eXBlKTsKCQkJCXN3aXRjaCAoZmllbGRfdHlwZSkKCQkJ +CXsKCQkJCWNhc2UgInRleHQiOgoJCQkJY2FzZSAidGV4dGFyZWEiOgoJCQkJCWlucHV0LnZhbHVl +ID0gIiI7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJyYWRpbyI6CgkJCQljYXNlICJjaGVja2JveCI6 +CgkJCQkJaWYgKGlucHV0LmNoZWNrZWQpCgkJCQkJewogICAgICAgIAkJCQkJaW5wdXQuY2hlY2tl +ZCA9IGZhbHNlOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgInNlbGVjdC1vbmUiOgoJCQkJ +Y2FzZSAic2VsZWN0LW11bHRpIjoKCQkJCQlpbnB1dC5zZWxlY3RlZEluZGV4ID0gLTE7CgkJCQkJ +YnJlYWs7CgkJCQlkZWZhdWx0OgoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CQoJCSAgICAgICAgdmFy +IHNlbGVjdHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAic2VsZWN0IiApOwoJCQlmb3Io +IHNlbGVjdCBvZiBzZWxlY3RzICkKCQkJewkKCQkJCWlmKCBzZWxlY3QuaGFzQXR0cmlidXRlKCJt +dWx0aXBsZSIpICkKCQkJCXsKCQkJCQlzZWxlY3Quc2VsZWN0ZWRJbmRleCA9IC0xOwoJCQkJfQoJ +CQl9CQkKCgkJfSc7CQkKCglteSAkanNfdGFnID0gJHhtbC0+Y3JlYXRlX2VsZW1lbnQoICJzY3Jp +cHQiICk7CiAgICAgICAgJGpzX3RhZy0+YXBwZW5kQ2hpbGQoICR4bWwtPmNyZWF0ZV90ZXh0X25v +ZGUoICRjbGVhcl9mdW5jdGlvbiApICk7CiAgICAgICAgcmV0dXJuICRqc190YWc7Cn0KCjE7Cg== diff --git a/reports.epmi b/reports.epmi index 9556e3e..3fa0d7a 100644 --- a/reports.epmi +++ b/reports.epmi @@ -1,5 +1,5 @@ - + reports https://epm.eprints-hosting.org/id/epm/reports