Files
odoo-addons/addons/cetmix_tower_git/models/cx_tower_git_remote.py

1 line
17 KiB
Python

IyBDb3B5cmlnaHQgKEMpIDIwMjQgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KaW1wb3J0IGdpdHVybHBhcnNlCgpmcm9tIG9kb28gaW1wb3J0IF8sIGFwaSwgZmllbGRzLCBtb2RlbHMKZnJvbSBvZG9vLmV4Y2VwdGlvbnMgaW1wb3J0IFZhbGlkYXRpb25FcnJvcgoKCmNsYXNzIEN4VG93ZXJHaXRSZW1vdGUobW9kZWxzLk1vZGVsKToKICAgICIiIgogICAgR2l0IFJlbW90ZS4KICAgIEltcGxlbWVudHMgc2luZ2xlIGdpdCByZW1vdGUuCiAgICBFZyBhIGJyYW5jaCBvciBhIHB1bGwgcmVxdWVzdC4KICAgICIiIgoKICAgIF9uYW1lID0gImN4LnRvd2VyLmdpdC5yZW1vdGUiCiAgICBfaW5oZXJpdCA9IFsKICAgICAgICAiY3gudG93ZXIucmVmZXJlbmNlLm1peGluIiwKICAgICAgICAiY3gudG93ZXIueWFtbC5taXhpbiIsCiAgICBdCiAgICBfZGVzY3JpcHRpb24gPSAiQ2V0bWl4IFRvd2VyIEdpdCBSZW1vdGUiCiAgICBfb3JkZXIgPSAic2VxdWVuY2UsIG5hbWUiCgogICAgIyBVc2VkIHRvIGRldGVjdCBnaXQgc3NoIHVybHMKICAgIEdJVF9TU0hfVVJMX1BBVFRFUk4gPSByIl5bXHdcLi1dK0BbXHdcLi1dKzouKlwuZ2l0JCIKICAgIEdJVF9IVFRQU19VUkxfUEFUVEVSTiA9IHIiXmh0dHBzOi8vLipcLmdpdCQiCiAgICBHSVRfR0lUX1VSTF9QQVRURVJOID0gciJeZ2l0Oi8vLipcLmdpdCQiCgogICAgYWN0aXZlID0gZmllbGRzLkJvb2xlYW4ocmVsYXRlZD0ic291cmNlX2lkLmFjdGl2ZSIsIHN0b3JlPVRydWUsIHJlYWRvbmx5PVRydWUpCiAgICBlbmFibGVkID0gZmllbGRzLkJvb2xlYW4oCiAgICAgICAgZGVmYXVsdD1UcnVlLCBoZWxwPSJFbmFibGUgaW4gY29uZmlndXJhdGlvbiBhbmQgZXhwb3J0ZWQgdG8gZmlsZXMiCiAgICApCiAgICBzZXF1ZW5jZSA9IGZpZWxkcy5JbnRlZ2VyKGRlZmF1bHQ9MTApCiAgICBuYW1lID0gZmllbGRzLkNoYXIoY29tcHV0ZT0iX2NvbXB1dGVfbmFtZSIsIHN0b3JlPVRydWUsIGRlZmF1bHQ9InJlbW90ZSIpCiAgICBzb3VyY2VfaWQgPSBmaWVsZHMuTWFueTJvbmUoCiAgICAgICAgY29tb2RlbF9uYW1lPSJjeC50b3dlci5naXQuc291cmNlIiwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIG9uZGVsZXRlPSJjYXNjYWRlIiwKICAgICAgICBhdXRvX2pvaW49VHJ1ZSwKICAgICkKICAgIGdpdF9wcm9qZWN0X2lkID0gZmllbGRzLk1hbnkyb25lKAogICAgICAgIGNvbW9kZWxfbmFtZT0iY3gudG93ZXIuZ2l0LnByb2plY3QiLAogICAgICAgIHJlbGF0ZWQ9InNvdXJjZV9pZC5naXRfcHJvamVjdF9pZCIsCiAgICAgICAgc3RvcmU9VHJ1ZSwKICAgICAgICByZWFkb25seT1UcnVlLAogICAgKQogICAgcmVwb19pZCA9IGZpZWxkcy5NYW55Mm9uZSgKICAgICAgICBjb21vZGVsX25hbWU9ImN4LnRvd2VyLmdpdC5yZXBvIiwKICAgICAgICBzdHJpbmc9IlJlcG9zaXRvcnkiLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgb25kZWxldGU9InJlc3RyaWN0IiwKICAgICAgICBoZWxwPSJJZiBzZWxlY3RlZCwgdGhlIHJlbW90ZSBVUkwgd2lsbCBiZSBmaWxsZWQgZnJvbSB0aGUiCiAgICAgICAgIiByZXBvIHNldHRpbmdzIGJhc2VkIG9uIHRoZSByZW1vdGUgcHJvdG9jb2wiLAogICAgKQogICAgcmVwb19wcm92aWRlciA9IGZpZWxkcy5TZWxlY3Rpb24oCiAgICAgICAgcmVsYXRlZD0icmVwb19pZC5wcm92aWRlciIsCiAgICAgICAgcmVhZG9ubHk9VHJ1ZSwKICAgICkKICAgICMgLS0gUmVwbyByZWxhdGVkIGZpZWxkcwogICAgdXJsX3Byb3RvY29sID0gZmllbGRzLlNlbGVjdGlvbigKICAgICAgICBzdHJpbmc9IlByb3RvY29sIiwKICAgICAgICBzZWxlY3Rpb249WwogICAgICAgICAgICAoInNzaCIsICJTU0giKSwKICAgICAgICAgICAgKCJodHRwcyIsICJIVFRQUyIpLAogICAgICAgICAgICAoImdpdCIsICJHSVQiKSwKICAgICAgICBdLAogICAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgICAgZGVmYXVsdD1sYW1iZGEgc2VsZjogc2VsZi5fZ2V0X2RlZmF1bHRfdXJsX3Byb3RvY29sKCksCiAgICApCiAgICBpc19wcml2YXRlID0gZmllbGRzLkJvb2xlYW4oCiAgICAgICAgc3RyaW5nPSJQcml2YXRlIiwKICAgICAgICBoZWxwPSJSZXBvc2l0b3J5IGlzIHByaXZhdGUiLAogICAgICAgIHJlbGF0ZWQ9InJlcG9faWQuaXNfcHJpdmF0ZSIsCiAgICAgICAgc3RvcmU9VHJ1ZSwKICAgICAgICByZWFkb25seT1UcnVlLAogICAgKQogICAgaGVhZF90eXBlID0gZmllbGRzLlNlbGVjdGlvbigKICAgICAgICBzZWxlY3Rpb249WwogICAgICAgICAgICAoImJyYW5jaCIsICJCcmFuY2giKSwKICAgICAgICAgICAgKCJwciIsICJQdWxsL01lcmdlIFJlcXVlc3QiKSwKICAgICAgICAgICAgKCJjb21taXQiLCAiQ29tbWl0IiksCiAgICAgICAgXSwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgKQogICAgaGVhZCA9IGZpZWxkcy5DaGFyKAogICAgICAgIGhlbHA9IkdpdCByZW1vdGUgaGVhZC4gTGluayB0byBicmFuY2gsIFBSLCBjb21taXQgb3IgY29tbWl0IGhhc2guIiwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIGluZGV4PVRydWUsCiAgICApCgogICAgZGVmIF9nZXRfZGVmYXVsdF91cmxfcHJvdG9jb2woc2VsZik6CiAgICAgICAgIiIiRGVmYXVsdCBVUkwgcHJvdG9jb2wgZm9yIG5ldyByZW1vdGUuCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIENoYXI6IERlZmF1bHQgVVJMIHByb3RvY29sLgogICAgICAgICIiIgogICAgICAgIHJldHVybiAiaHR0cHMiCgogICAgQGFwaS5kZXBlbmRzKCJzb3VyY2VfaWQiLCAic2VxdWVuY2UiKQogICAgZGVmIF9jb21wdXRlX25hbWUoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ29tcHV0ZSByZW1vdGUgbmFtZS4KICAgICAgICBCeSBkZWZhdWx0IGFsbCByZW1vdGVzIGFyZSBuYW1lZCBgcmVtb3RlXzxwb3NpdGlvbj5gCiAgICAgICAgd2hlcmUgcG9zaXRpb24gaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSByZW1vdGUgaW4gdGhlIHNvdXJjZS4KICAgICAgICBFZyBmaXJzdCByZW1vdGUgaXMgYHJlbW90ZV8xYCwgc2Vjb25kIGlzIGByZW1vdGVfMmAsIGV0Yy4KICAgICAgICAiIiIKICAgICAgICBmb3IgcmVtb3RlIGluIHNlbGY6CiAgICAgICAgICAgIGlmIHJlbW90ZS5zb3VyY2VfaWQ6CiAgICAgICAgICAgICAgICBmb3IgaW5kZXgsIHNvdXJjZV9yZW1vdGUgaW4gZW51bWVyYXRlKHJlbW90ZS5zb3VyY2VfaWQucmVtb3RlX2lkcyk6CiAgICAgICAgICAgICAgICAgICAgc291cmNlX3JlbW90ZS5uYW1lID0gZiJyZW1vdGVfe2luZGV4ICsgMX0iCgogICAgQGFwaS5vbmNoYW5nZSgiaGVhZCIpCiAgICBkZWYgb25jaGFuZ2VfaGVhZChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBFeHRyYWN0IGhlYWQgbnVtYmVyIGZyb20gaGVhZCB1cmwKICAgICAgICBhbmQgc2V0IGl0IGFzIGhlYWQuCiAgICAgICAgIiIiCiAgICAgICAgZm9yIHJlbW90ZSBpbiBzZWxmOgogICAgICAgICAgICBpZiByZW1vdGUuaGVhZCBhbmQgIi8iIGluIHJlbW90ZS5oZWFkOgogICAgICAgICAgICAgICAgcmVtb3RlLmhlYWQgPSBzZWxmLl9zYW5pdGl6ZV9oZWFkKHJlbW90ZS5oZWFkKQoKICAgIEBhcGkubW9kZWxfY3JlYXRlX211bHRpCiAgICBkZWYgY3JlYXRlKHNlbGYsIHZhbHNfbGlzdCk6CiAgICAgICAgIyBTYW5pdGl6ZSBoZWFkCiAgICAgICAgZm9yIHZhbHMgaW4gdmFsc19saXN0OgogICAgICAgICAgICBoZWFkID0gdmFscy5nZXQoImhlYWQiKQogICAgICAgICAgICBpZiBoZWFkIGFuZCAiLyIgaW4gaGVhZDoKICAgICAgICAgICAgICAgIHZhbHNbImhlYWQiXSA9IHNlbGYuX3Nhbml0aXplX2hlYWQoaGVhZCkKICAgICAgICByZXMgPSBzdXBlcigpLmNyZWF0ZSh2YWxzX2xpc3QpCiAgICAgICAgIyBFeHBvcnQgcHJvamVjdCB0byByZWxhdGVkIGZpbGVzIGFuZCB0ZW1wbGF0ZXMKICAgICAgICByZXMuX3VwZGF0ZV9yZWxhdGVkX2ZpbGVzX2FuZF90ZW1wbGF0ZXMoKQogICAgICAgIHJldHVybiByZXMKCiAgICBkZWYgd3JpdGUoc2VsZiwgdmFscyk6CiAgICAgICAgIyBTYW5pdGl6ZSBoZWFkCiAgICAgICAgaWYgImhlYWQiIGluIHZhbHM6CiAgICAgICAgICAgIGhlYWQgPSB2YWxzWyJoZWFkIl0KICAgICAgICAgICAgaWYgaGVhZCBhbmQgIi8iIGluIGhlYWQ6CiAgICAgICAgICAgICAgICB2YWxzWyJoZWFkIl0gPSBzZWxmLl9zYW5pdGl6ZV9oZWFkKGhlYWQpCiAgICAgICAgcmVzID0gc3VwZXIoKS53cml0ZSh2YWxzKQogICAgICAgICMgVXBkYXRlIHJlbGF0ZWQgZmlsZXMgYW5kIHRlbXBsYXRlcyBvbiB1cGRhdGUKICAgICAgICBzZWxmLl91cGRhdGVfcmVsYXRlZF9maWxlc19hbmRfdGVtcGxhdGVzKCkKICAgICAgICByZXR1cm4gcmVzCgogICAgZGVmIHVubGluayhzZWxmKToKICAgICAgICAiIiIKICAgICAgICBPdmVycmlkZSB0byB1cGRhdGUgcmVsYXRlZCBmaWxlcyBhbmQgdGVtcGxhdGVzIG9uIHVubGluawogICAgICAgICIiIgogICAgICAgIHJlbGF0ZWRfZmlsZXMgPSBzZWxmLm1hcHBlZCgiZ2l0X3Byb2plY3RfaWQiKS5tYXBwZWQoImdpdF9wcm9qZWN0X3JlbF9pZHMiKQogICAgICAgIHJlbGF0ZWRfdGVtcGxhdGVzID0gc2VsZi5tYXBwZWQoImdpdF9wcm9qZWN0X2lkIikubWFwcGVkKAogICAgICAgICAgICAiZ2l0X3Byb2plY3RfZmlsZV90ZW1wbGF0ZV9yZWxfaWRzIgogICAgICAgICkKICAgICAgICByZXMgPSBzdXBlcigpLnVubGluaygpCgogICAgICAgICMgVXBkYXRlIHJlbGF0ZWQgZmlsZXMgYW5kIHRlbXBsYXRlcyBvbiB1bmxpbmsKICAgICAgICBpZiByZWxhdGVkX2ZpbGVzOgogICAgICAgICAgICByZWxhdGVkX2ZpbGVzLl9zYXZlX3RvX2ZpbGUoKQogICAgICAgIGlmIHJlbGF0ZWRfdGVtcGxhdGVzOgogICAgICAgICAgICByZWxhdGVkX3RlbXBsYXRlcy5fc2F2ZV90b19maWxlX3RlbXBsYXRlKCkKICAgICAgICByZXR1cm4gcmVzCgogICAgZGVmIF9zYW5pdGl6ZV9oZWFkKHNlbGYsIGhlYWQpOgogICAgICAgICIiIlNhbml0aXplIGhlYWQuCiAgICAgICAgRXh0cmFjdCBoZWFkIG51bWJlciBmcm9tIGhlYWQgdXJsCiAgICAgICAgYW5kIHNldCBpdCBhcyBoZWFkLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBoZWFkIChDaGFyKTogSGVhZCB0byBzYW5pdGl6ZQoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBDaGFyOiBTYW5pdGl6ZWQgaGVhZAogICAgICAgICIiIgogICAgICAgIGlmIGhlYWQgYW5kICIvIiBpbiBoZWFkOgogICAgICAgICAgICByZXR1cm4gaGVhZC5zcGxpdCgiLyIpWy0xXS5zdHJpcCgpCiAgICAgICAgcmV0dXJuIGhlYWQKCiAgICBAYXBpLm1vZGVsCiAgICBkZWYgZ2V0X2hlYWRfZGF0YShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB2YWx1ZXMgZm9yIHRoZSBkcm9wZG93biBkeW5hbWljIHdpZGdldC4KICAgICAgICBJdCBpcyBkZXNpZ25lZCBmb3IgaW50ZWdyYXRpb25zIHdpdGggcmVwbyBwcm92aWRlcnMgdXNpbmcgQVBJcy4KCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgTGlzdDogTGlzdCBvZiB0dXBsZXMoc2VsZWN0aW9uLCBuYW1lKQogICAgICAgICAgICBlZyBbKCcxOC4wJywgJzE4LjAnKSwgKCdtYWluJywgJ21haW4nKSwgKCdkZXZlbG9wJywgJ2RldmVsb3AnKV0KICAgICAgICAiIiIKICAgICAgICB2YWx1ZXMgPSBbCiAgICAgICAgICAgICgiMTguMCIsICIxOC4wIiksCiAgICAgICAgICAgICgibWFpbiIsICJNYWluIiksCiAgICAgICAgICAgICgiZGV2ZWxvcCIsICJEZXZlbG9wIiksCiAgICAgICAgICAgICgiMTcuMCIsICIxNy4wIiksCiAgICAgICAgXQogICAgICAgIHJldHVybiB2YWx1ZXMKCiAgICBkZWYgX3VwZGF0ZV9yZWxhdGVkX2ZpbGVzX2FuZF90ZW1wbGF0ZXMoc2VsZik6CiAgICAgICAgIyBVcGRhdGUgcmVsYXRlZCBmaWxlcyBvbiB1cGRhdGUKICAgICAgICByZWxhdGVkX2ZpbGVzID0gc2VsZi5tYXBwZWQoImdpdF9wcm9qZWN0X2lkIikubWFwcGVkKCJnaXRfcHJvamVjdF9yZWxfaWRzIikKICAgICAgICBpZiByZWxhdGVkX2ZpbGVzOgogICAgICAgICAgICByZWxhdGVkX2ZpbGVzLl9zYXZlX3RvX2ZpbGUoKQogICAgICAgIHJlbGF0ZWRfdGVtcGxhdGVzID0gc2VsZi5tYXBwZWQoImdpdF9wcm9qZWN0X2lkIikubWFwcGVkKAogICAgICAgICAgICAiZ2l0X3Byb2plY3RfZmlsZV90ZW1wbGF0ZV9yZWxfaWRzIgogICAgICAgICkKICAgICAgICBpZiByZWxhdGVkX3RlbXBsYXRlczoKICAgICAgICAgICAgcmVsYXRlZF90ZW1wbGF0ZXMuX3NhdmVfdG9fZmlsZV90ZW1wbGF0ZSgpCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgUmVmZXJlbmNlIG1peGluIG1ldGhvZHMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBkZWYgX2dldF9wcmVfcG9wdWxhdGVkX21vZGVsX2RhdGEoc2VsZik6CiAgICAgICAgcmVzID0gc3VwZXIoKS5fZ2V0X3ByZV9wb3B1bGF0ZWRfbW9kZWxfZGF0YSgpCiAgICAgICAgcmVzLnVwZGF0ZSh7ImN4LnRvd2VyLmdpdC5yZW1vdGUiOiBbImN4LnRvd2VyLmdpdC5zb3VyY2UiLCAic291cmNlX2lkIl19KQogICAgICAgIHJldHVybiByZXMKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBZQU1MIG1peGluIG1ldGhvZHMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBkZWYgX2dldF9maWVsZHNfZm9yX3lhbWwoc2VsZik6CiAgICAgICAgcmVzID0gc3VwZXIoKS5fZ2V0X2ZpZWxkc19mb3JfeWFtbCgpCiAgICAgICAgcmVzICs9IFsKICAgICAgICAgICAgIm5hbWUiLAogICAgICAgICAgICAiZW5hYmxlZCIsCiAgICAgICAgICAgICJzZXF1ZW5jZSIsCiAgICAgICAgICAgICJyZXBvX2lkIiwKICAgICAgICAgICAgImhlYWQiLAogICAgICAgICAgICAiaGVhZF90eXBlIiwKICAgICAgICBdCiAgICAgICAgcmV0dXJuIHJlcwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEdpdCBBZ2dyZWdhdG9yIHJlbGF0ZWQgbWV0aG9kcwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGRlZiBfZ2l0X2FnZ3JlZ2F0b3JfcHJlcGFyZV91cmwoc2VsZik6CiAgICAgICAgIiIiUHJlcGFyZSB1cmwgZm9yIGdpdCBhZ2dyZWdhdG9yCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIENoYXI6IFByZXBhcmVkIHVybCBmb3IgZ2l0IGFnZ3JlZ2F0b3IKICAgICAgICAiIiIKICAgICAgICBzZWxmLmVuc3VyZV9vbmUoKQoKICAgICAgICBpZiBub3Qgc2VsZi5yZXBvX2lkOgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoXygiUmVwb3NpdG9yeSBpcyByZXF1aXJlZCIpKQogICAgICAgIGlmIG5vdCBzZWxmLnJlcG9faWQudXJsOgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoXygiUmVwb3NpdG9yeSBVUkwgaXMgbm90IHNldCIpKQoKICAgICAgICB1cmwgPSBzZWxmLnJlcG9faWQudXJsCiAgICAgICAgcHJlcGFyZWRfdXJsID0gZ2l0dXJscGFyc2UucGFyc2UodXJsKS51cmxzLmdldChzZWxmLnVybF9wcm90b2NvbCwgdXJsKQoKICAgICAgICAjIElmIHJlcG8gaXMgcHVibGljIG9yIGlzIG5vdCB1c2luZyBIVFRQUyBwcm90b2NvbCByZXR1cm4gVVJMIGFzIGlzCiAgICAgICAgaWYgbm90IHNlbGYuaXNfcHJpdmF0ZSBvciBzZWxmLnVybF9wcm90b2NvbCAhPSAiaHR0cHMiOgogICAgICAgICAgICByZXR1cm4gcHJlcGFyZWRfdXJsCgogICAgICAgIGlmIHNlbGYucmVwb19wcm92aWRlciA9PSAiZ2l0aHViIjoKICAgICAgICAgICAgcHJlcGFyZWRfdXJsID0gc2VsZi5fZ2l0X2FnZ3JlZ2F0b3JfcHJlcGFyZV91cmxfZ2l0aHViKHByZXBhcmVkX3VybCkKICAgICAgICBlbGlmIHNlbGYucmVwb19wcm92aWRlciA9PSAiZ2l0bGFiIjoKICAgICAgICAgICAgcHJlcGFyZWRfdXJsID0gc2VsZi5fZ2l0X2FnZ3JlZ2F0b3JfcHJlcGFyZV91cmxfZ2l0bGFiKHByZXBhcmVkX3VybCkKICAgICAgICBlbGlmIHNlbGYucmVwb19wcm92aWRlciA9PSAiYml0YnVja2V0IjoKICAgICAgICAgICAgcHJlcGFyZWRfdXJsID0gc2VsZi5fZ2l0X2FnZ3JlZ2F0b3JfcHJlcGFyZV91cmxfYml0YnVja2V0KHByZXBhcmVkX3VybCkKCiAgICAgICAgcmV0dXJuIHByZXBhcmVkX3VybAoKICAgIGRlZiBfZ2l0X2FnZ3JlZ2F0b3JfcHJlcGFyZV91cmxfZ2l0aHViKHNlbGYsIHVybCk6CiAgICAgICAgIiIiUHJlcGFyZSB1cmwgZm9yIGdpdCBhZ2dyZWdhdG9yCiAgICAgICAgZm9yIHByaXZhdGUgR2l0aHViIHJlcG8gdXNpbmcgaHR0cHMgcHJvdG9jb2wuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIHVybCAoQ2hhcik6IFVSTCB0byBwcmVwYXJlCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIENoYXI6IFByZXBhcmVkIHVybCBmb3IgZ2l0IGFnZ3JlZ2F0b3IKICAgICAgICAiIiIKICAgICAgICBzZWxmLmVuc3VyZV9vbmUoKQoKICAgICAgICAjIFRoaXMgaXMgaG93IGZpbmFsIHVybCB3aWxsIGxvb2sgbGlrZQogICAgICAgICMgaHR0cHM6Ly8kR0lUSFVCX1RPS0VOOngtb2F1dGgtYmFzaWNAZ2l0aHViLmNvbS9zb2VtX29yZy9zb21lX3ByaXZhdGVfcmVwby5naXQKICAgICAgICB1cmxfd2l0aG91dF9wcm90b2NvbCA9IHVybC5yZXBsYWNlKCJodHRwczovLyIsICIiKQogICAgICAgIHVybCA9IGYiaHR0cHM6Ly8kR0lUSFVCX1RPS0VOOngtb2F1dGgtYmFzaWNAe3VybF93aXRob3V0X3Byb3RvY29sfSIKICAgICAgICByZXR1cm4gdXJsCgogICAgZGVmIF9naXRfYWdncmVnYXRvcl9wcmVwYXJlX3VybF9naXRsYWIoc2VsZiwgdXJsKToKICAgICAgICAiIiJQcmVwYXJlIHVybCBmb3IgZ2l0IGFnZ3JlZ2F0b3IKICAgICAgICBmb3IgcHJpdmF0ZSBHaXRMYWIgcmVwbyB1c2luZyBodHRwcyBwcm90b2NvbC4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgdXJsIChDaGFyKTogVVJMIHRvIHByZXBhcmUKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgQ2hhcjogUHJlcGFyZWQgdXJsIGZvciBnaXQgYWdncmVnYXRvcgogICAgICAgICIiIgogICAgICAgIHNlbGYuZW5zdXJlX29uZSgpCgogICAgICAgICMgVGhpcyBpcyBob3cgZmluYWwgdXJsIHdpbGwgbG9vayBsaWtlCiAgICAgICAgIyBodHRwczovLzx0b2tlbi1uYW1lPjo8dG9rZW4tdmFsdWU+QDxnaXRsYWJ1cmwtcmVwb3NpdG9yeT4uZ2l0CiAgICAgICAgdXJsX3dpdGhvdXRfcHJvdG9jb2wgPSB1cmwucmVwbGFjZSgiaHR0cHM6Ly8iLCAiIikKICAgICAgICB1cmwgPSBmImh0dHBzOi8vJEdJVExBQl9UT0tFTl9OQU1FOiRHSVRMQUJfVE9LRU5Ae3VybF93aXRob3V0X3Byb3RvY29sfSIKICAgICAgICByZXR1cm4gdXJsCgogICAgZGVmIF9naXRfYWdncmVnYXRvcl9wcmVwYXJlX3VybF9iaXRidWNrZXQoc2VsZiwgdXJsKToKICAgICAgICAiIiJQcmVwYXJlIHVybCBmb3IgZ2l0IGFnZ3JlZ2F0b3IKICAgICAgICBmb3IgcHJpdmF0ZSBHaXRodWIgcmVwbyB1c2luZyBodHRwcyBwcm90b2NvbC4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgdXJsIChDaGFyKTogVVJMIHRvIHByZXBhcmUKCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgQ2hhcjogUHJlcGFyZWQgdXJsIGZvciBnaXQgYWdncmVnYXRvcgogICAgICAgICIiIgogICAgICAgIHNlbGYuZW5zdXJlX29uZSgpCgogICAgICAgICMgVGhpcyBpcyBob3cgZmluYWwgdXJsIHdpbGwgbG9vayBsaWtlCiAgICAgICAgIyBodHRwczovL3gtdG9rZW4tYXV0aDp7YWNjZXNzX3Rva2VufUBiaXRidWNrZXQub3JnL3VzZXIvcmVwby5naXQKICAgICAgICAjIEZyb20gaHR0cHM6Ly9zdXBwb3J0LmF0bGFzc2lhbi5jb20vYml0YnVja2V0LWNsb3VkL2RvY3MvdXNlLW9hdXRoLW9uLWJpdGJ1Y2tldC1jbG91ZC8KICAgICAgICB1cmxfd2l0aG91dF9wcm90b2NvbCA9IHVybC5yZXBsYWNlKCJodHRwczovLyIsICIiKQogICAgICAgIHVybCA9IGYiaHR0cHM6Ly94LXRva2VuLWF1dGg6JEJJVEJVQ0tFVF9UT0tFTkB7dXJsX3dpdGhvdXRfcHJvdG9jb2x9IgogICAgICAgIHJldHVybiB1cmwKCiAgICBkZWYgX2dpdF9hZ2dyZWdhdG9yX3ByZXBhcmVfaGVhZChzZWxmKToKICAgICAgICAiIiJQcmVwYXJlIGhlYWQgZm9yIGdpdCBhZ2dyZWdhdG9yCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIENoYXI6IFByZXBhcmVkIGhlYWQgZm9yIGdpdCBhZ2dyZWdhdG9yCiAgICAgICAgIiIiCiAgICAgICAgc2VsZi5lbnN1cmVfb25lKCkKICAgICAgICBpZiBzZWxmLnJlcG9fcHJvdmlkZXIgPT0gImdpdGh1YiI6CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9naXRfYWdncmVnYXRvcl9wcmVwYXJlX2hlYWRfZ2l0aHViKCkKICAgICAgICBpZiBzZWxmLnJlcG9fcHJvdmlkZXIgPT0gImdpdGxhYiI6CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9naXRfYWdncmVnYXRvcl9wcmVwYXJlX2hlYWRfZ2l0bGFiKCkKICAgICAgICBpZiBzZWxmLnJlcG9fcHJvdmlkZXIgPT0gImJpdGJ1Y2tldCI6CiAgICAgICAgICAgIHJldHVybiBzZWxmLl9naXRfYWdncmVnYXRvcl9wcmVwYXJlX2hlYWRfYml0YnVja2V0KCkKICAgICAgICByZXR1cm4gc2VsZi5oZWFkCgogICAgZGVmIF9naXRfYWdncmVnYXRvcl9wcmVwYXJlX2hlYWRfZ2l0aHViKHNlbGYpOgogICAgICAgICIiIlByZXBhcmUgaGVhZCBmb3IgZ2l0IGFnZ3JlZ2F0b3IgZm9yIEdpdGh1Yi4KCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgQ2hhcjogUHJlcGFyZWQgaGVhZCBmb3IgZ2l0IGFnZ3JlZ2F0b3IKICAgICAgICAiIiIKCiAgICAgICAgIyBFeHRyYWN0IGJyYW5jaCBuYW1lLCBQUi9NUiBvciBjb21taXQgbnVtYmVyIGZyb20gaGVhZAogICAgICAgIGhlYWRfbnVtYmVyID0gc2VsZi5oZWFkLnNwbGl0KCIvIilbLTFdCiAgICAgICAgaWYgbm90IGhlYWRfbnVtYmVyOgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICBfKCJHaXQgQWdncmVnYXRvcjogIiAiSGVhZCBudW1iZXIgaXMgZW1wdHkgaW4gJShoZWFkKXMiLCBoZWFkPXNlbGYuaGVhZCkKICAgICAgICAgICAgKQoKICAgICAgICAjIFBSL01SCiAgICAgICAgaWYgc2VsZi5oZWFkX3R5cGUgPT0gInByIjoKICAgICAgICAgICAgcmV0dXJuIGYicmVmcy9wdWxsL3toZWFkX251bWJlcn0vaGVhZCIKCiAgICAgICAgIyBDb21taXQKICAgICAgICBpZiBzZWxmLmhlYWRfdHlwZSBpbiBbImNvbW1pdCIsICJicmFuY2giXToKICAgICAgICAgICAgcmV0dXJuIGYie2hlYWRfbnVtYmVyfSIKCiAgICAgICAgIyBGYWxsYmFjayB0byBvcmlnaW5hbCBoZWFkCiAgICAgICAgcmV0dXJuIHNlbGYuaGVhZAoKICAgIGRlZiBfZ2l0X2FnZ3JlZ2F0b3JfcHJlcGFyZV9oZWFkX2dpdGxhYihzZWxmKToKICAgICAgICAiIiJQcmVwYXJlIGhlYWQgZm9yIGdpdCBhZ2dyZWdhdG9yIGZvciBHaXRMYWIuCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIENoYXI6IFByZXBhcmVkIGhlYWQgZm9yIGdpdCBhZ2dyZWdhdG9yCiAgICAgICAgIiIiCiAgICAgICAgIyBFeHRyYWN0IGJyYW5jaCBuYW1lLCBQUi9NUiBvciBjb21taXQgbnVtYmVyIGZyb20gaGVhZAogICAgICAgIGhlYWRfbnVtYmVyID0gc2VsZi5oZWFkLnNwbGl0KCIvIilbLTFdCiAgICAgICAgaWYgbm90IGhlYWRfbnVtYmVyOgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICBfKCJHaXQgQWdncmVnYXRvcjogIiAiSGVhZCBudW1iZXIgaXMgZW1wdHkgaW4gJShoZWFkKXMiLCBoZWFkPXNlbGYuaGVhZCkKICAgICAgICAgICAgKQoKICAgICAgICAjIFBSL01SCiAgICAgICAgaWYgc2VsZi5oZWFkX3R5cGUgPT0gInByIjoKICAgICAgICAgICAgcmV0dXJuIGYibWVyZ2UtcmVxdWVzdHMve2hlYWRfbnVtYmVyfS9oZWFkIgoKICAgICAgICAjIENvbW1pdAogICAgICAgICMgaHR0cHM6Ly9naXRsYWIuY29tL2NldG1peC90ZXN0Ly0vdHJlZS8xNy4wLXRlc3QtYnJhbmNoP3JlZl90eXBlPWhlYWRzCiAgICAgICAgaWYgc2VsZi5oZWFkX3R5cGUgaW4gWyJjb21taXQiLCAiYnJhbmNoIl06CiAgICAgICAgICAgIGhlYWRfcGFydHMgPSBoZWFkX251bWJlci5zcGxpdCgiPyIpCiAgICAgICAgICAgIHJldHVybiBmIntoZWFkX3BhcnRzWzBdfSIKCiAgICAgICAgIyBGYWxsYmFjayB0byBvcmlnaW5hbCBoZWFkCiAgICAgICAgcmV0dXJuIHNlbGYuaGVhZAoKICAgIGRlZiBfZ2l0X2FnZ3JlZ2F0b3JfcHJlcGFyZV9oZWFkX2JpdGJ1Y2tldChzZWxmKToKICAgICAgICAiIiJQcmVwYXJlIGhlYWQgZm9yIGdpdCBhZ2dyZWdhdG9yIGZvciBCaXRidWNrZXQuCgogICAgICAgIFJldHVybnM6CiAgICAgICAgICAgIENoYXI6IFByZXBhcmVkIGhlYWQgZm9yIGdpdCBhZ2dyZWdhdG9yCiAgICAgICAgIiIiCiAgICAgICAgIyBFeHRyYWN0IGJyYW5jaCBuYW1lLCBQUi9NUiBvciBjb21taXQgbnVtYmVyIGZyb20gaGVhZAogICAgICAgIGhlYWRfbnVtYmVyID0gc2VsZi5oZWFkLnNwbGl0KCIvIilbLTFdCiAgICAgICAgaWYgbm90IGhlYWRfbnVtYmVyOgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICBfKCJHaXQgQWdncmVnYXRvcjogIiAiSGVhZCBudW1iZXIgaXMgZW1wdHkgaW4gJShoZWFkKXMiLCBoZWFkPXNlbGYuaGVhZCkKICAgICAgICAgICAgKQogICAgICAgICMgUFIvTVIKICAgICAgICBpZiBzZWxmLmhlYWRfdHlwZSA9PSAicHIiOgogICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICBfKAogICAgICAgICAgICAgICAgICAgICJHaXQgQWdncmVnYXRvcjogIgogICAgICAgICAgICAgICAgICAgICJCaXRidWNrZXQgZG9lcyBub3Qgc3VwcG9ydCIKICAgICAgICAgICAgICAgICAgICAiIGZldGNoaW5nIFBScy4gUGxlYXNlIHVzZSBicmFuY2ggaW5zdGVhZC5cblxuIgogICAgICAgICAgICAgICAgICAgICJTb3VyY2U6ICUoc3JjKXNcbiIKICAgICAgICAgICAgICAgICAgICAiVVJMOiAlKHVybClzXG4iCiAgICAgICAgICAgICAgICAgICAgIkhlYWQ6ICUoaGVhZClzIiwKICAgICAgICAgICAgICAgICAgICBzcmM9c2VsZi5zb3VyY2VfaWQubmFtZSwKICAgICAgICAgICAgICAgICAgICB1cmw9c2VsZi5yZXBvX2lkLnVybCwKICAgICAgICAgICAgICAgICAgICBoZWFkPXNlbGYuaGVhZCwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQoKICAgICAgICAjIENvbW1pdAogICAgICAgIGlmIHNlbGYuaGVhZF90eXBlIGluIFsiY29tbWl0IiwgImJyYW5jaCJdOgogICAgICAgICAgICByZXR1cm4gZiJ7aGVhZF9udW1iZXJ9IgoKICAgICAgICAjIEZhbGxiYWNrIHRvIG9yaWdpbmFsIGhlYWQKICAgICAgICByZXR1cm4gc2VsZi5oZWFkCg==