1 line
5.5 KiB
Python
1 line
5.5 KiB
Python
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIKVXBkYXRlIEFja25vd2xlZGdlbWVudCBvZiBTaG9ydC1UZXJtIEludGVuc2l2ZSBQcm9ncmFtIGRvY3VtZW50Ci0gU2V0cyBkYXRlIHRvIGN1cnJlbnQgZGF0ZQotIENhbGN1bGF0ZXMgdHJhbnNmZXIgeWVhciBiYXNlZCBvbiBET0IgdXNpbmcgZ3JhZGUgcGxhY2VtZW50IHRhYmxlCiIiIgoKZnJvbSBkb2N4IGltcG9ydCBEb2N1bWVudApmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQppbXBvcnQgcmUKaW1wb3J0IHN5cwoKZGVmIGNhbGN1bGF0ZV90cmFuc2Zlcl95ZWFyKGRvYl9zdHIpOgogICAgIiIiCiAgICBDYWxjdWxhdGUgdGhlIHRyYW5zZmVyIHllYXIgYmFzZWQgb24gRE9CIGFuZCBncmFkZSBwbGFjZW1lbnQgdGFibGUuCiAgICAKICAgIFRoZSB0YWJsZSBzaG93cyBjaGlsZHJlbiBib3JuIE1heSAxIFlZWVkgdG8gQXByaWwgMzAgWVlZWSsxIGZvbGxvdyB0aGlzIHBhdHRlcm46CiAgICAtIFN0YXJ0IFByZXAgKFApIHdoZW4gdGhleSdyZSB+NSB5ZWFycyBvbGQKICAgIC0gUHJvZ3Jlc3MgdGhyb3VnaCBncmFkZXMgMS02IGluIHN1YnNlcXVlbnQgeWVhcnMKICAgIAogICAgRm9yIHNob3J0LXRlcm0gaW50ZW5zaXZlIHByb2dyYW0sIHN0dWRlbnRzIHRyYW5zZmVyIGF0IGVuZCBvZiBHcmFkZSAzLgogICAgCiAgICBBcmdzOgogICAgICAgIGRvYl9zdHI6IERhdGUgb2YgYmlydGggaW4gZGQvbW0veXl5eSBmb3JtYXQKICAgICAgICAKICAgIFJldHVybnM6CiAgICAgICAgWWVhciB3aGVuIHN0dWRlbnQgbXVzdCB0cmFuc2ZlciAoZW5kIG9mIEdyYWRlIDMpCiAgICAiIiIKICAgICMgUGFyc2UgRE9CCiAgICB0cnk6CiAgICAgICAgZG9iID0gZGF0ZXRpbWUuc3RycHRpbWUoZG9iX3N0ciwgIiVkLyVtLyVZIikKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgIHByaW50KGYiRXJyb3I6IEludmFsaWQgZGF0ZSBmb3JtYXQgJ3tkb2Jfc3RyfScuIEV4cGVjdGVkIGRkL21tL3l5eXkiKQogICAgICAgIHJldHVybiBOb25lCiAgICAKICAgICMgRGV0ZXJtaW5lIGJpcnRoIHllYXIgcmFuZ2UKICAgICMgSWYgYm9ybiBNYXkgMSAtIERlYyAzMTogYmlydGggeWVhciBpcyB0aGUgc3RhcnQgeWVhcgogICAgIyBJZiBib3JuIEphbiAxIC0gQXByaWwgMzA6IGJpcnRoIHllYXIgLSAxIGlzIHRoZSBzdGFydCB5ZWFyCiAgICBpZiBkb2IubW9udGggPj0gNTogICMgTWF5IHRocm91Z2ggRGVjZW1iZXIKICAgICAgICBiaXJ0aF95ZWFyX3N0YXJ0ID0gZG9iLnllYXIKICAgIGVsc2U6ICAjIEphbnVhcnkgdGhyb3VnaCBBcHJpbAogICAgICAgIGJpcnRoX3llYXJfc3RhcnQgPSBkb2IueWVhciAtIDEKICAgIAogICAgIyBDYWxjdWxhdGUgUHJlcCB5ZWFyICh3aGVuIGNoaWxkIHR1cm5zIDUgYmVmb3JlIEFwcmlsIDMwKQogICAgIyBDaGlsZHJlbiBib3JuIE1heSAxIFlZWVkgdG8gQXByaWwgMzAgWVlZWSsxIHN0YXJ0IFByZXAgaW4gWVlZWSs2CiAgICBwcmVwX3llYXIgPSBiaXJ0aF95ZWFyX3N0YXJ0ICsgNgogICAgCiAgICAjIEdyYWRlIHByb2dyZXNzaW9uOgogICAgIyBQcmVwOiBwcmVwX3llYXIKICAgICMgR3JhZGUgMTogcHJlcF95ZWFyICsgMQogICAgIyBHcmFkZSAyOiBwcmVwX3llYXIgKyAyCiAgICAjIEdyYWRlIDM6IHByZXBfeWVhciArIDMgKHRyYW5zZmVyIHllYXIgZm9yIHNob3J0LXRlcm0gcHJvZ3JhbSkKICAgIHRyYW5zZmVyX3llYXIgPSBwcmVwX3llYXIgKyAzCiAgICAKICAgIHJldHVybiB0cmFuc2Zlcl95ZWFyCgpkZWYgdXBkYXRlX2RvY3VtZW50KGlucHV0X3BhdGgsIG91dHB1dF9wYXRoKToKICAgICIiIgogICAgVXBkYXRlIHRoZSBhY2tub3dsZWRnZW1lbnQgZG9jdW1lbnQgd2l0aCBjdXJyZW50IGRhdGUgYW5kIGNhbGN1bGF0ZWQgdHJhbnNmZXIgeWVhci4KICAgIAogICAgQXJnczoKICAgICAgICBpbnB1dF9wYXRoOiBQYXRoIHRvIGlucHV0IFdvcmQgZG9jdW1lbnQKICAgICAgICBvdXRwdXRfcGF0aDogUGF0aCB0byBzYXZlIHVwZGF0ZWQgZG9jdW1lbnQKICAgICIiIgogICAgIyBMb2FkIGRvY3VtZW50CiAgICBkb2MgPSBEb2N1bWVudChpbnB1dF9wYXRoKQogICAgCiAgICAjIEdldCBjdXJyZW50IGRhdGUKICAgIGN1cnJlbnRfZGF0ZSA9IGRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlLWQlcyAlQiAlWSIpCiAgICAjIEFkZCBvcmRpbmFsIHN1ZmZpeAogICAgZGF5ID0gZGF0ZXRpbWUubm93KCkuZGF5CiAgICBpZiAxMCA8PSBkYXkgJSAxMDAgPD0gMjA6CiAgICAgICAgc3VmZml4ID0gJ3RoJwogICAgZWxzZToKICAgICAgICBzdWZmaXggPSB7MTogJ3N0JywgMjogJ25kJywgMzogJ3JkJ30uZ2V0KGRheSAlIDEwLCAndGgnKQogICAgY3VycmVudF9kYXRlID0gZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoZiIlLWR7c3VmZml4fSAlQiAlWSIpCiAgICAKICAgICMgVmFyaWFibGVzIHRvIHRyYWNrCiAgICBkb2JfZm91bmQgPSBOb25lCiAgICB0cmFuc2Zlcl95ZWFyID0gTm9uZQogICAgCiAgICAjIFByb2Nlc3MgYWxsIHBhcmFncmFwaHMKICAgIGZvciBwYXJhIGluIGRvYy5wYXJhZ3JhcGhzOgogICAgICAgIHRleHQgPSBwYXJhLnRleHQKICAgICAgICAKICAgICAgICAjIFVwZGF0ZSBkYXRlCiAgICAgICAgaWYgdGV4dC5zdGFydHN3aXRoKCJEYXRlOiIpOgogICAgICAgICAgICBwYXJhLnRleHQgPSBmIkRhdGU6IHtjdXJyZW50X2RhdGV9IgogICAgICAgICAgICBwcmludChmIlVwZGF0ZWQgZGF0ZSB0bzoge2N1cnJlbnRfZGF0ZX0iKQogICAgICAgIAogICAgICAgICMgRmluZCBET0IgYW5kIGNhbGN1bGF0ZSB0cmFuc2ZlciB5ZWFyCiAgICAgICAgZG9iX21hdGNoID0gcmUuc2VhcmNoKHInRE9CXHMrKFxkezJ9L1xkezJ9L1xkezR9KScsIHRleHQpCiAgICAgICAgaWYgZG9iX21hdGNoOgogICAgICAgICAgICBkb2JfZm91bmQgPSBkb2JfbWF0Y2guZ3JvdXAoMSkKICAgICAgICAgICAgdHJhbnNmZXJfeWVhciA9IGNhbGN1bGF0ZV90cmFuc2Zlcl95ZWFyKGRvYl9mb3VuZCkKICAgICAgICAgICAgcHJpbnQoZiJGb3VuZCBET0I6IHtkb2JfZm91bmR9IikKICAgICAgICAgICAgcHJpbnQoZiJDYWxjdWxhdGVkIHRyYW5zZmVyIHllYXI6IHt0cmFuc2Zlcl95ZWFyfSIpCiAgICAgICAgCiAgICAgICAgIyBVcGRhdGUgdHJhbnNmZXIgeWVhcgogICAgICAgIGlmIHRyYW5zZmVyX3llYXIgYW5kICJtdXN0IHRyYW5zZmVyIGludG8gYW5vdGhlciBzY2hvb2wgb24gb3IgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNjaG9vbCB5ZWFyIGluIiBpbiB0ZXh0OgogICAgICAgICAgICAjIFJlcGxhY2UgdGhlIHllYXIgd2l0aCBjYWxjdWxhdGVkIHllYXIKICAgICAgICAgICAgdXBkYXRlZF90ZXh0ID0gcmUuc3ViKAogICAgICAgICAgICAgICAgcid0aGUgZW5kIG9mIHRoZSBzY2hvb2wgeWVhciBpbiBcZHs0fScsCiAgICAgICAgICAgICAgICBmJ3RoZSBlbmQgb2YgdGhlIHNjaG9vbCB5ZWFyIGluIHt0cmFuc2Zlcl95ZWFyfScsCiAgICAgICAgICAgICAgICB0ZXh0CiAgICAgICAgICAgICkKICAgICAgICAgICAgcGFyYS50ZXh0ID0gdXBkYXRlZF90ZXh0CiAgICAgICAgICAgIHByaW50KGYiVXBkYXRlZCB0cmFuc2ZlciB5ZWFyIHRvOiB7dHJhbnNmZXJfeWVhcn0iKQogICAgCiAgICAjIFNhdmUgdXBkYXRlZCBkb2N1bWVudAogICAgZG9jLnNhdmUob3V0cHV0X3BhdGgpCiAgICBwcmludChmIlxuRG9jdW1lbnQgc2F2ZWQgdG86IHtvdXRwdXRfcGF0aH0iKQogICAgCiAgICBpZiBkb2JfZm91bmQ6CiAgICAgICAgcHJpbnQoZiJcblN1bW1hcnk6IikKICAgICAgICBwcmludChmIiAgRE9COiB7ZG9iX2ZvdW5kfSIpCiAgICAgICAgcHJpbnQoZiIgIFRyYW5zZmVyIFllYXI6IHt0cmFuc2Zlcl95ZWFyfSIpCiAgICAgICAgcHJpbnQoZiIgIERhdGU6IHtjdXJyZW50X2RhdGV9IikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKICAgICAgICBwcmludCgiVXNhZ2U6IHB5dGhvbiB1cGRhdGVfYWNrbm93bGVkZ21lbnQucHkgPGlucHV0X2RvYy5kb2M+IFtvdXRwdXRfZG9jLmRvY3hdIikKICAgICAgICBzeXMuZXhpdCgxKQogICAgCiAgICBpbnB1dF9wYXRoID0gc3lzLmFyZ3ZbMV0KICAgIG91dHB1dF9wYXRoID0gc3lzLmFyZ3ZbMl0gaWYgbGVuKHN5cy5hcmd2KSA+IDIgZWxzZSAiL21udC91c2VyLWRhdGEvb3V0cHV0cy8yYV9BY2tub3dsZWRnbWVudF9VcGRhdGVkLmRvY3giCiAgICAKICAgIHVwZGF0ZV9kb2N1bWVudChpbnB1dF9wYXRoLCBvdXRwdXRfcGF0aCkK |